pandas警告:SettingWithCopyWarning

Posted solong1989

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas警告:SettingWithCopyWarning相关的知识,希望对你有一定的参考价值。

  在使用pandas对DataFrame进行赋值操作时,会出现一个看似莫名巧妙的告警信息:

  SettingWithCopyWarning:A value is trying to be set on a copy of slice from a DataFrame

  Try using .loc[row_indexer,col_indexer] = value instead

  这条告警信息的大意是,“尝试在DataFrame一个切片的副本上进行赋值,使用 .loc[row_indexer,col_indexer] = value 代替当前赋值操作”。导致这条告警产生的原因,是由于pandas无法判断对原始DataFrame进行切片,产生的是视图还是副本。如果切片产生的是视图,则赋值操作会修改原始DataFrame,如果产生的是副本,则不会修改原始的DataFrame。

  一般产生这条告警,都是由于使用链式索引(chained indexing)赋值导致的;而使用  .loc[row_indexer,col_indexer] 则会产生一个新的DataFrame,在某些情况下,可以解决该告警问题(ps:导致 SettingWithCopyWarning 告警产生的情况不止一种!)。如果你选择忽视这条告警,那么你最好查看一下自己的赋值操作有没有成功(虽然本人实际运用中查看了多次,都是成功的,但不代表每一次都能成功,所以建议还是不要忽视这条告警)。

  总而言之,应该竟可能的避免使用链式索引对 DataFrame 进行复制操作。具体产生告警的原因及解决方法的详解,可以参考pandas官方文档中的 "Indexing and Selecting Data"模块下的"Returning a view versus a copy"  http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy。也可参考我看到一篇写的很好的文章:https://www.dataquest.io/blog/settingwithcopywarning/(英文原文),https://www.jianshu.com/p/72274ccb647a(中文翻译版)。

以上是关于pandas警告:SettingWithCopyWarning的主要内容,如果未能解决你的问题,请参考以下文章

pandas DataFrame 警告(SettingWithCopyWarning)

pandas chained_assignment 警告异常处理

pandas警告:SettingWithCopyWarning

在 Pandas 中使用 Scipy 发出警告

在 Pandas 中使用 Scipy 发出警告

如何找出和访问 pandas 警告子类?