Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:设置为“复制警告”_Python_Python 2.7_Pandas_Chained Assignment - Fatal编程技术网

Python 熊猫:设置为“复制警告”

Python 熊猫:设置为“复制警告”,python,python-2.7,pandas,chained-assignment,Python,Python 2.7,Pandas,Chained Assignment,我想用NaN替换大于任意数字(本例中为100)的Pandas数据帧中的值(因为如此大的值表示实验失败)。以前,我用它来替换不需要的值: sve2_all[sve2_all[' Hgtot ng/l'] > 100] = np.nan 但是,我得到了以下错误: -c:3: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_

我想用
NaN
替换大于任意数字(本例中为100)的
Pandas
数据帧中的值(因为如此大的值表示实验失败)。以前,我用它来替换不需要的值:

sve2_all[sve2_all[' Hgtot ng/l'] > 100] = np.nan
但是,我得到了以下错误:

-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
从我看来,这一警告有时似乎可以忽略,但我无法很好地跟踪讨论,以确定这是否适用于我的情况。警告是否基本上让我知道我将覆盖数据帧中的一些值


编辑:据我所知,一切都按其应有的方式进行。作为后续行动,我的替代价值观的方法是否非标准?是否有更好的方法来替换值?

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

sve2_all.loc[sve2_all['Hgtot ng/l'] > 100] = np.nan

此警告用于阻止您修改副本(此处
sve2_all[sve2_all['Hgtot ng/l']>100]
可能是一个副本,如果它是副本,则任何修改都不会改变原始框架。可能是在某些情况下它工作正常,但pandas无法保证它在所有情况下都能工作……使用风险自负(请考虑您自己的警告!).

我在尝试重置整个数据帧的内容时收到此警告,但无法使用
loc
iloc
解决此问题:

df.loc[:, :] = new_values # SettingWithCopyWarning
df.iloc[:, :] = new_values # SettingWithCopyWarning
但解决了数据中包含的数据数组的问题:

df.values[:, :] = new_values # no warnings and desired behavior

根据其他用户的建议,您可以尝试:

myindex = sve2_all[' Hgtot ng/l'] > 100

sve2_all.loc[myindex, 'yourcolumn'] = np.nan
请记住,如果在创建透视表时遇到问题(透视表
关键字不受
pandas 0.16.0#417
支持),则应使用索引和列的新语法,而不是行和列

另见:

---问题为我解决了---


即使使用“.loc”命令,当我试图转换浮点-->int时也会出现这个错误。我的错误是,我在操作之前过滤了我的数据帧(带掩码),因此转换只发生在数据帧项/列的一小部分中,结果是一个混合类型列,其中创建了混淆。我通过在掩码之前转换数据帧(数据过滤)解决了这个问题,我希望这会有所帮助。

我使用相同的方法替换了一列,对于df.loc,我也得到了这个警告。您可以检查索引中是否有真值,然后在(myindex==True)的情况下应用替换。sum()>0:df_train.loc[myindex,c]=0