2014-10-28 131 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