解释SettingWithCopyWarning报警原因,并提供2种解决方法





目录



0 读取数据

Pandas的SettingWithCopyWarning报警怎么解决_数据

1 复现

Pandas的SettingWithCopyWarning报警怎么解决_数据_02

2 原因

发出警告的代码

df[condition]["wen_cha"] = df["bWendu"]-df["yWendu"]


相当于:df.get(condition).set(wen_cha),第一步骤的get发出了报警

链式操作其实是两个步骤,先get后set,get得到的dataframe可能是view也可能是copy,pandas发出警告

官网文档:

​https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy​

核心要诀:pandas的dataframe的修改写操作,只允许在源dataframe上进行,一步到位

3 解决方法1

将get+set的两步操作,改成set的一步操作

Pandas的SettingWithCopyWarning报警怎么解决_pandas_03

4 解决方法2

如果需要预筛选数据做后续的处理分析,使用copy复制dataframe

Pandas的SettingWithCopyWarning报警怎么解决_解决方法_04

总之,pandas不允许先筛选子dataframe,再进行修改写入

要么使用.loc实现一个步骤直接修改源dataframe

要么先复制一个子dataframe再一个步骤执行修改