Pandas的SettingWithCopyWarning报警怎么解决
0 读取数据
![](https://img2020.cnblogs.com/blog/1912556/202110/1912556-20211029135901701-1736002153.png)
1 复现
![](https://img2020.cnblogs.com/blog/1912556/202110/1912556-20211029141717819-1162886914.png)
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的一步操作
4 解决方法2
如果需要预筛选数据做后续的处理分析,使用copy复制dataframe
总之,pandas不允许先筛选子dataframe,再进行修改写入
要么使用.loc实现一个步骤直接修改源dataframe
要么先复制一个子dataframe再一个步骤执行修改