python – 即使在使用.loc之后,Pandas仍然会获得SettingWithCopyWarning
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 即使在使用.loc之后,Pandas仍然会获得SettingWithCopyWarning,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1850字,纯文字阅读大概需要3分钟。
内容图文
![python – 即使在使用.loc之后,Pandas仍然会获得SettingWithCopyWarning](/upload/InfoBanner/zyjiaocheng/714/ec5fa5dec94a44be9ef434c40333222c.jpg)
起初,我尝试编写一些看起来像这样的代码:
import numpy as np
import pandas as pd
np.random.seed(2016)
train = pd.DataFrame(np.random.choice([np.nan, 1, 2], size=(10, 3)),
columns=['Age', 'SibSp', 'Parch'])
complete = train.dropna()
complete['AgeGt15'] = complete['Age'] > 15
获得SettingWithCopyWarning后,我尝试使用.loc:
complete.loc[:, 'AgeGt15'] = complete['Age'] > 15
complete.loc[:, 'WithFamily'] = complete['SibSp'] + complete['Parch'] > 0
但是,我仍然得到同样的警告.是什么赋予了?
解决方法:
注意:从pandas版本0.24开始,is_copy已弃用,将在以后的版本中删除.虽然私有属性_is_copy存在,但下划线表明此属性不是公共API的一部分,因此不应依赖它.因此,展望未来,看起来沉默SettingWithCopyWarning的唯一正确方法是在全球范围内这样做:
pd.options.mode.chained_assignment = None
当执行complete = train.dropna()时,dropna可能会返回一个副本,所以
出于谨慎的考虑,熊猫将complete.is_copy设置为Truthy
值:
In [220]: complete.is_copy
Out[220]: <weakref at 0x7f7f0b295b38; to 'DataFrame' at 0x7f7eee6fe668>
这允许Pandas稍后在完成[‘AgeGt15’] =完成[‘Age’]>时向您发出警告.执行15,您可能正在修改一个对火车没有影响的副本.对于初学者来说,这可能是一个有用的警告.在您的情况下,您似乎无意通过修改完整来间接修改列车.因此,在您的情况下,警告只是一种毫无意义的烦恼.
你可以通过设置来静音警告,
complete.is_copy = False # deprecated as of version 0.24
这比制作实际副本要快,并且将BudW中的SettingWithCopyWarning压缩(在点where _check_setitem_copy is called处):
def _check_setitem_copy(self, stacklevel=4, t='setting', force=False):
if force or self.is_copy:
...
如果您确信自己知道自己在做什么,可以使用全局关闭SettingWithCopyWarning
pd.options.mode.chained_assignment = None # None|'warn'|'raise'
使警告静音的另一种方法是制作新副本:
complete = complete.copy()
但是,如果DataFrame很大,您可能不希望这样做,因为复制
可能需要大量的时间和记忆,而且确实如此
如果你知道完整已经是一个副本,那么完全没有意义(除了为了保护警告).
内容总结
以上是互联网集市为您收集整理的python – 即使在使用.loc之后,Pandas仍然会获得SettingWithCopyWarning全部内容,希望文章能够帮你解决python – 即使在使用.loc之后,Pandas仍然会获得SettingWithCopyWarning所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。