Я хотел бы немного объяснить, что происходит за кулисами.
Dataframes - это набор сериалов.
Ряды в свою очередь являются расширением numpy.array
numpy.array
s имеют свойство .name
Это имя серии. Редко, что панды уважают этот атрибут, но он задерживается в местах и может быть использован для взлома некоторых поведений панд.
В этом много ответов говорится о атрибут df.columns
является list
, когда на самом деле это Series
. Это означает, что у него есть атрибут .name
.
Это то, что произойдет, если вы решите заполнить имя столбцов Series
:
df.columns = ['column_one', 'column_two']
df.columns.names = ['name of the list of columns']
df.index.names = ['name of the index']
name of the list of columns column_one column_two
name of the index
0 4 1
1 5 2
2 6 3
Обратите внимание, что имя индекса всегда приходит на один столбец ниже.
Атрибут .name
иногда задерживается. Если вы установите df.columns = ['one', 'two']
, тогда df.one.name
будет 'one'
.
Если вы установите df.one.name = 'three'
, тогда df.columns
все равно даст вам ['one', 'two']
, а df.one.name
даст вам 'three'
pd.DataFrame(df.one)
вернет
three
0 1
1 2
2 3
Поскольку pandas повторно использует .name
уже заданного Series
.
У Pandas есть способы создания многоуровневых имен столбцов. Мало того, что магия была задействована, но я хотел осветить это в своем ответе, так как я не вижу, чтобы кто-то набирал это здесь.
|one |
|one |two |
0 | 4 | 1 |
1 | 5 | 2 |
2 | 6 | 3 |
Это легко достижимо, устанавливая столбцы в списки, например:
df.columns = [['one', 'one'], ['one', 'two']]
Обновление. Если вы хотите увидеть это поведение, скопируйте и вставьте код в консоль и выполните. Затем закройте инструменты разработчика и снова откройте, видимо, вещь указателя происходит только тогда, когда код выполняется в фоновом режиме (что происходит при повторном открытии консоли).
Вывод Console.log объектов, является указателем, нет реальной стоимости. Это означает, что если объект изменится позже, объект console.log будет обновлен. Попробуйте:
console.log("start");
var array = [1];
for(var i = 0; i < array.length; i++){
console.log(i + " = " + array[i]);
}
console.log(array);
console.log("end");
array.push(9999);// you will see the 9999 in the console no matter it was added after the output.
Чтобы предотвратить проблемы с указателем, попробуйте это: console.log (array.join ()); потому что позже в какой-то момент вашего приложения вы добавляете значение 139.