熊猫:SettingWithCopyWarning

Jas*_*son 18 python python-2.7 pandas chained-assignment

我想用Pandas DataFrame大于任意数字(在这种情况下NaN为100)的值替换(因为这个值很大,表示实验失败).以前我用它来替换不需要的值:

sve2_all[sve2_all[' Hgtot ng/l'] > 100] = np.nan
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

-c:3: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
C:\Users\AppData\Local\Enthought\Canopy32\User\lib\site-packages\pandas\core\indexing.py:346: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
self.obj[item] = s
Run Code Online (Sandbox Code Playgroud)

这个StackExchange问​​题来看,似乎有时候这个警告可以被忽略,但我不能很好地跟进讨论,以确定这是否适用于我的情况.这个警告基本上让我知道我会覆盖我的一些价值观DataFrame吗?

编辑:据我所知,一切都表现得如此.跟进是我取代非标准价值的方法吗?有没有更好的方法来取代价值观?

And*_*den 23

正如错误消息中所建议的那样,您应该使用loc来执行此操作:

sve2_all.loc[sve2_all['Hgtot ng/l'] > 100] = np.nan
Run Code Online (Sandbox Code Playgroud)

该警告是来阻止你修改副本(在这里sve2_all[sve2_all[' Hgtot ng/l'] > 100]潜在的副本,如果是则进行任何修改不会改变原有的框架.这可能是因为它正确地工作在某些情况下,但大熊猫不能保证它将工作在所有案件......使用风险自负(考虑自己警告!;)).