如何根据多个条件更改 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)
看起来合乎逻辑,但试图将整个系列折叠成一个值。由于它不知道您是否需要 and
、or
或其他组合,因此会引发该错误。
df.loc[(df.column_A < 10) | (df.column_A > 1), "df.column_A"] = 1
也不应该工作,因为您没有正确引用列。有趣的是你没有收到任何错误。也许您之前在程序中做了一些可以节省您的事情...
我正在尝试替换 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)
看起来合乎逻辑,但试图将整个系列折叠成一个值。由于它不知道您是否需要 and
、or
或其他组合,因此会引发该错误。
df.loc[(df.column_A < 10) | (df.column_A > 1), "df.column_A"] = 1
也不应该工作,因为您没有正确引用列。有趣的是你没有收到任何错误。也许您之前在程序中做了一些可以节省您的事情...