码迷,mamicode.com
首页 > 其他好文 > 详细

pandas警告:SettingWithCopyWarning

时间:2018-10-22 16:39:19      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:href   成功   解决方法   赋值   chain   trying   htm   中文   ram   

  在使用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

标签:href   成功   解决方法   赋值   chain   trying   htm   中文   ram   

原文地址:https://www.cnblogs.com/solong1989/p/9830471.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!