Как назначить столбцу нестроковое «имя» или индекс?Python

Программы на Python
Ответить
Anonymous
 Как назначить столбцу нестроковое «имя» или индекс?

Сообщение Anonymous »

У DataFrame Pandas есть метод Assign, который присваивает значения столбцу. Он отличается от таких методов, как loc или iloc, тем, что возвращает DataFrame с вновь назначенными столбцами без изменения каких-либо поверхностных копий или ссылок на те же данные.
Метод Assign использует именованные аргументы для обозначения имен столбцов и отлично работает для имен столбцов, которые являются строками, но pandas поддерживает использование произвольных значений. объекты Python в качестве имен столбцов.
Предположим, у меня есть DataFrame с целыми числами в качестве «имен» столбцов:

Код: Выделить всё

import pandas as pd
df = pd.DataFrame({
0: [1, 2, 3],
1: [4, 5, 6]})
Как присвоить, скажем, столбцу 0?
Это не работает:

Код: Выделить всё

df.assign(0=df[[0]] + 1)

Код: Выделить всё

SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
Это тоже не так:

Код: Выделить всё

df.assign(**{0: df[[0]] + 1})

Код: Выделить всё

TypeError: keywords must be strings
Теперь я мог бы использовать прямое назначение или loc, но это изменило бы базовые данные, например:

Код: Выделить всё

df_shallow_copy = df
df[[0]] = df[[0]] + 1
Теперь df_shallow_copy будет иметь значения [2, 3, 4] для столбца 0 вместо [1, 2, 3].
Я также мог бы сделать полную глубокую копию всех столбцов, но это потребует дублирования данных в памяти и выполнения избыточных операций:

Код: Выделить всё

df_shallow_copy = df
df = df.copy()
df[[0]] = df[[0]] + 1
Как я могу назначить столбец, не создавая избыточную глубокую копию и не потенциально изменяя другие объекты?


Подробнее здесь: https://stackoverflow.com/questions/725 ... e-or-index
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»