Тип машинописного массива [дубликат]

Имена столбцов vs Имена серий

Я хотел бы немного объяснить, что происходит за кулисами.

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'

BUT

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']]
10
задан user1302914 10 May 2013 в 15:40
поделиться

1 ответ

Обновление. Если вы хотите увидеть это поведение, скопируйте и вставьте код в консоль и выполните. Затем закройте инструменты разработчика и снова откройте, видимо, вещь указателя происходит только тогда, когда код выполняется в фоновом режиме (что происходит при повторном открытии консоли).

Вывод 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.

14
ответ дан Daniel Aranda 25 August 2018 в 03:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: