Скопируйте все значения в столбце в новый столбец в фрейме данных pandas
Это очень простой вопрос, я просто не могу найти ответ.
У меня есть подобный dataframe, называемый df:
A B C
a.1 b.1 c.1
a.2 b.2 c.2
a.3 b.3 c.3
Затем я извлекаю все строки из df, где столбец "B" имеет значение "b.2". Я присваиваю эти результаты df_2.
df_2 = df[df['B'] == 'b.2']
df_2 становится:
A B C
a.2 b.2 c.2
Затем я копирую все значения в столбце "B" в новый столбец с именем "D". Вызов df_2:
A B C D
a.2 b.2 c.2 b.2
Когда я выполняю задание следующим образом:
df_2['D'] = df_2['B']
Я получаю следующее предупреждение:
Значение пытается установить на копии среза из DataFrame. Пытаться используя .loc [row_indexer, col_indexer] = значение вместо
См. оговорки в документации: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
Я также пытался использовать .loc при создании df_2 следующим образом:
df_2 = df.loc[df['B'] == 'b.2']
Однако я все еще получаю предупреждение.
Любая помощь очень ценится.
Ответы
Ответ 1
Вы можете просто назначить B
новому столбцу, Like -
df['D'] = df['B']
Пример/Демо -
In [1]: import pandas as pd
In [2]: df = pd.DataFrame([['a.1','b.1','c.1'],['a.2','b.2','c.2'],['a.3','b.3','c.3']],columns=['A','B','C'])
In [3]: df
Out[3]:
A B C
0 a.1 b.1 c.1
1 a.2 b.2 c.2
2 a.3 b.3 c.3
In [4]: df['D'] = df['B'] #<---What you want.
In [5]: df
Out[5]:
A B C D
0 a.1 b.1 c.1 b.1
1 a.2 b.2 c.2 b.2
2 a.3 b.3 c.3 b.3
In [6]: df.loc[0,'D'] = 'd.1'
In [7]: df
Out[7]:
A B C D
0 a.1 b.1 c.1 d.1
1 a.2 b.2 c.2 b.2
2 a.3 b.3 c.3 b.3
Ответ 2
Проблема находится в строке перед тем, который выдает предупреждение. Когда вы создаете df_2, где вы создаете копию среза фрейма данных. Вместо этого, когда вы создаете df_2, используйте .copy(), и вы не получите этого предупреждения позже.
df_2 = df[df['B'] == 'b.2'].copy()
Ответ 3
Я думаю, что правильный метод доступа использует индекс:
df_2.loc[:,'D'] = df_2['B']