Pandas的SettingWithCopyWarning报警怎么解决

0 读取数据

1 复现

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再一个步骤执行修改

原文地址:https://www.cnblogs.com/weiyining/p/15480294.html