2017-11-03 99 views
0

之外我有內部的for循環熊貓數據幀在那裏我改變這樣的熊貓數據框中的值:大熊貓數據框中值不改變的功能

df[item].ix[(e1,e2)] = 1 

然而,當我訪問DF,該值仍然保持不變。你知道我到底錯在哪裏嗎?

有什麼建議嗎?

+2

不要使用'.ix',它已被棄用。但我懷疑問題是'df [item]'正在返回一份副本,然後你立即更新並立即丟棄。所以只需嘗試'df.loc [item,(e1,e2)] = 1' –

+0

Elisha512,如果它解決了您的問題,或者讓我知道我還能做些什麼來幫助,請隨時接受我的答案。謝謝。 – MarredCheese

回答

0

您正在使用鏈接索引,這通常會導致問題。在您的代碼中,df[item]返回一個系列,然後.ix[(e1,e2)] = 1修改該系列,從而保持原始數據幀不變。您需要修改原來的數據幀,而不是像這樣:

import pandas as pd 

df = pd.DataFrame({'colA': [5, 6, 1, 2, 3], 
        'colB': ['a', 'b', 'c', 'd', 'e']}) 

print df 
df.ix[[1, 2], 'colA'] = 111 
print df 

的代碼的組行1和可樂的2至111,我相信這事情你希望做的那種。當然,1和2可以用變量代替。

colA colB 
0  5 a 
1  6 b 
2  1 c 
3  2 d 
4  3 e 

    colA colB 
0  5 a 
1 111 b 
2 111 c 
3  2 d 
4  3 e 

有關鏈式索引的更多信息,請參閱文檔: https://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

旁註:您可能還需要重新考慮你的代碼一般既然你提到修改循環中的數據幀。使用熊貓時,您通常可以並應該避免循環並改用基於集合的操作。它需要一些習慣,但它是解開圖書館全部力量的方法。