2016-11-18 78 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 

不应该这样做,因为您没有正确引用列。有趣的是,你没有得到任何错误。也许你早些时候在你的程序中做了一些事情,可以节省你...

相关问题