Как вставить столбец в DataFrame, не генерируя SettingWithCopyWarning

Я хотел бы вставить столбец в существующий DataFrame. В идеале без копирования существующих данных. Что бы я ни пытался, более поздние присвоения результирующему DataFrame генерируют SettingWithCopyWarning, если вставленные данные содержат нулевые значения.

import pandas as pd

df = pd.DataFrame(data={'a': [1]})
df = df.assign(b=pd.Series(data=pd.NaT, index=df.index))
df['a'].iloc[0] = 5

Замена assign с любым из

df['b'] = pd.Series(data=pd.NaT, index=df.index)
df.insert(column='b', loc=0, value=pd.NaT)

приводит к тому же предупреждению.

Как ни странно, если вставленное значение не равно нулю (замена pd.NaT на, например, 0) не генерирует предупреждение. Это ошибка?

1 ответ

Решение

Ваша проблема, кажется, с df['a'].iloc[0] = 5где вы используете цепочку присваивания. Попробуйте это вместо этого:

df.at[0, 'a'] = 5
# Or: df.loc[0, 'a'] = 5, but `.at` is preferred when assigning scalar
Другие вопросы по тегам