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

How to insert a column into a DataFrame without generating the 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),则不会生成警告。这是一个错误吗?

您的问题似乎与 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