使用Pandas中SettingWithCopyWarning报警的原由:
读取数据
读取原始数据,并做一些简单的处理:
复现警告
利用.str.startswith()可以选出3月份的数据,之后对其设置新列温差:
可以看到这里报出一个警告SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame。也就是说df[condition]这一步得到的dataframe是copy出来的新dataframe还是view的,未知,期望你用.loc[row_indexer,col_indexer] = value的方法去实现。
解决办法
解决办法1
将get+set的两步操作,改成set的一步操作:
解决方法2
方法2就比较直接,将满足条件的dataframe采用copy()的方法取出来单独处理:
总结来说就是,pandas不允许先筛选子dataframe,再进行修改写入,要么使用.loc实现一个步骤直接修改源dataframe,要么先复制一个子dataframe再一个步骤执行修改。