我正在尝试替换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
带索引标签或布尔列表/系列。因此,这将起作用:
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)
似乎合乎逻辑,因此无法正常工作,但会尝试将整个Series合并为一个值。而且,因为它不知道你是否希望有一个and
,or
或者一些其他的组合,它引发的错误。
df.loc[(df.column_A < 10) | (df.column_A > 1), "df.column_A"] = 1
也不应该使用,因为您没有正确引用列。有趣的是您没有收到任何错误。也许您之前在程序中做了一些可以节省您的工作...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句