1

我想在现有的 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)

导致相同的警告。

奇怪的是,如果插入的值不为空(例如,用 0 替换 pd.NaT)不会产生警告。那是一个错误吗?

4

1 回答 1

1

您的问题似乎与df['a'].iloc[0] = 5您使用链式分配的地方有关。试试这个:

df.at[0, 'a'] = 5
# Or: df.loc[0, 'a'] = 5, but `.at` is preferred when assigning scalar
于 2017-11-18T22:41:42.603 回答