如何根据多个条件更改 pandas 数据框列系列中的特定单元格值?

How to change specific cell values in a pandas dataframe column series based on multiple conditions?

我正在尝试替换 pandas 数据框列中的所有值 df.column_A 如果它们在范围内 1 到 10。

然而,当我这样做时:

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,如我所料。

这意味着该行的语法是正确的,所以错误一定是由于某些我不理解的因素造成的。

我做错了什么?

这是一个简单的问题。 .loc 采用索引标签或布尔值 list/Series。所以这会起作用:

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) 看起来合乎逻辑,但试图将整个系列折叠成一个值。由于它不知道您是否需要 andor 或其他组合,因此会引发该错误。

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

也不应该工作,因为您没有正确引用列。有趣的是你没有收到任何错误。也许您之前在程序中做了一些可以节省您的事情...