这个问题在这里已经有答案了:
如何处理大熊猫中的复制警告设置
(18个答案)
(18个答案)
两年前关闭的
我想用NaN替换大于任意数字(本例中为100)的Pandas数据帧中的值(因为如此大的值表示实验失败)。以前,我用它来替换不需要的值:
sve2_all[sve2_all['Hgtot ng/l']>;100]=np.nan
但是,我得到了以下错误:
-c:3:SettingWithCopyWarning:试图在数据帧切片的副本上设置值。
尝试改用.loc[row\u index,col\u indexer]=value
C:\Users\AppData\Local\enthund\Canopy32\User\lib\site packages\pandas\core\index.py:346:SettingWithCopyWarning:试图在数据帧切片的副本上设置值。
尝试改用.loc[row\u index,col\u indexer]=value
self.obj[item]=s
从这个StackExchange问题来看,似乎有时可以忽略这个警告,但我无法很好地跟踪讨论,以确定这是否适用于我的情况。警告是否基本上让我知道我将覆盖数据帧中的一些值
编辑:据我所知,一切都按其应有的方式进行。作为后续行动,我的替代价值观的方法是否非标准?有没有更好的方法来替换值
正如错误消息中所建议的,您应该使用loc来执行此操作:
sve2_all.loc[sve2_all['Hgtot ng/l']>;100]=np.nan
此警告用于阻止您修改副本(此处sve2_all[sve2_all['Hgtot ng/l']>100]可能是一个副本,如果是,任何修改都不会改变原始框架。可能是在某些情况下它工作正常,但pandas不能保证它在所有情况下都能工作……使用风险自负(请考虑您自己的警告!;)。