如何在不生成SettingWithCopyWarning的情况下将列插入DataFrame

时间:2017-11-18 22:37:17

标签: python pandas dataframe chained-assignment

我想在现有的DataFrame中插入一列。理想情况下无需复制现有数据。无论我尝试什么,如果插入的数据包含空值,稍后对结果DataFrame的赋值将生成一个SettingWithCopyWarning。

>>> from functools import reduce
>>> 
>>> lst = [22, 36, 47, 2, 13]
>>> reduce(lambda x, y: x if (x > y) else y, lst)
47

用{/ p>中的任何一个替换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

导致同样的警告。

奇怪的是,如果插入的值不为null(将pd.NaT替换为例如0)则不会生成警告。这是一个错误吗?

1 个答案:

答案 0 :(得分:1)

您的问题似乎与df['a'].iloc[0] = 5一致,您正在使用chained assignment。试试这个:

df.at[0, 'a'] = 5
# Or: df.loc[0, 'a'] = 5, but `.at` is preferred when assigning scalar