2016-11-18 101 views
0

我想替換所有值在大熊貓數據幀列df.column_A如果他們下降到10如何根據多個條件更改熊貓數據框列系列中的特定單元格值?

然而,1的範圍內當我做:

df.loc[(1 < df.column_A < 10), "Column_A"] = 1

我屈服:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()

或者,當我這樣做:

df.loc[(df.column_A < 10) & (df.column_A > 1), "df.column_A"] = 1

我得到沒有錯誤可言,但該值不被替換。

奇怪的是,當我做:

df.loc[(df.column_A < 10) | (df.column_A > 1), "df.column_A"] = 1

df.column_A所有值被替換爲1,正如我所期望的。

這意味着該行的語法是正確的,所以錯誤必須是由於某些我不明白的因素。

我在做什麼錯?

回答

1

這是一個簡單的問題。 .loc需要索引標籤或布爾列表/系列。所以這將工作:

df.loc[(df.column_A < 10) & (df.column_A > 1), "column_A"] = 1 

請注意,我從列索引的地方刪除df.


df.loc[(1 < df.column_A < 10), "Column_A"] = 1 

不會起作用,因爲操作(1 < df.column_A < 10)似乎是合乎邏輯的,但試圖將整個系列摺疊成一個值。而且由於它不知道您是否想要and,or或其他組合,它會引發該錯誤。

df.loc[(df.column_A < 10) | (df.column_A > 1), "df.column_A"] = 1 

不應該這樣做,因爲您沒有正確引用列。有趣的是,你沒有得到任何錯誤。也許你早些時候在你的程序中做了一些事情,可以節省你...

相關問題