2014-10-28 129 views
1

我明白链分配背后的想法,当我得到警告熊猫:写入原始数据帧。 SettingWithCopyWarning

Pandas: SettingWithCopyWarning 

它让我知道,我正在写一个副本,而不是原来的数据帧。

但我似乎不能成功实施的.loc或.IX()或.iloc(),使我实际写入原始数据帧。

在中不是空的“大小”一栏,我想设置的值设置为null的情况。我已经试过:

import numpy as np 
df.loc[df['size'].notnull()].value=np.nan 

我也试图与替换功能打转转,但要更换无果(值都为零,所以.replace(0,np.nan的实现)也可以工作)。

+0

规范是'df.loc [df ['size']。notnull(),'col'] = np.nan'什么是您的列名?请注意,您无法赋予'values'属性 – EdChum 2014-10-28 19:43:29

+0

完美无缺 - 非常感谢! – user3591836 2014-10-28 20:43:44

回答

2

下面的答案是原来的问题(之前它是由OP编辑)。有问题的代码行是:

df.loc[df['size'].notnull() & df['value'] == 0].value = np.nan 

和我建议尝试这个代替(内部的[]移动值):

df.loc[df['size'].notnull() & df['value'] == 0, 'value'] = np.nan 

编辑:

此假定列名是“值”,你是不是要设置的值属性(如上面的注释说明,你不能这样做)

这样,这将具有以下数据框中工作,例如:

d = {'size' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd']), 
'value' : pd.Series([1., 2., 0.], index=['a', 'b', 'd'])} 

df = pd.DataFrame(d) 
+0

是的 - 道歉编辑,我想我会简化。但那正是我想要的。非常感谢!! – user3591836 2014-10-28 20:43:28

+0

@ user3591836,没问题。很高兴为你工作。 – cgc 2014-10-28 20:46:52