如何在不生成 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
我想在现有的 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