Как вставить столбец в 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