使用PandasSettingWithCopyWarning报警的原由:

读取数据

  读取原始数据,并做一些简单的处理:

Pandas系列(六)SettingWithCopyWarning报警

复现警告

  利用.str.startswith()可以选出3月份的数据,之后对其设置新列温差:

Pandas系列(六)SettingWithCopyWarning报警

  可以看到这里报出一个警告SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame。也就是说df[condition]这一步得到的dataframecopy出来的新dataframe还是view的,未知,期望你用.loc[row_indexer,col_indexer] = value的方法去实现。

解决办法

解决办法1

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

Pandas系列(六)SettingWithCopyWarning报警

解决方法2

  方法2就比较直接,将满足条件的dataframe采用copy()的方法取出来单独处理:

Pandas系列(六)SettingWithCopyWarning报警

  总结来说就是,pandas不允许先筛选子dataframe,再进行修改写入,要么使用.loc实现一个步骤直接修改源dataframe,要么先复制一个子dataframe再一个步骤执行修改。

相关文章:

  • 2022-12-23
  • 2021-07-20
  • 2022-01-25
  • 2022-12-23
  • 2022-12-23
  • 2021-08-26
  • 2021-08-02
  • 2021-10-20
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-19
  • 2022-02-18
  • 2021-12-17
相关资源
相似解决方案