一个序列的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

847
我想用一个“或”条件来过滤我的数据框,以保留特定列值在范围[-0.25, 0.25]之外的行。我尝试了:
df = df[(df['col'] < -0.25) or (df['col'] > 0.25)]

但是我遇到了一个错误:
ValueError: Series的真值是模棱两可的。请使用a.empty、a.bool()、a.item()、a.any()或a.all()。

125
请使用符号 | 代替 or - MaxU - stand with Ukraine
7
这里有一个解决方法:abs(result['var'])>0.25 - ColinMac
3
我在使用标准的 max() 函数时遇到了相同的错误消息。将其替换为 numpy.maximum() 用于两个值之间的逐元素最大值解决了我的问题。 - AstroFloyd
14个回答

1
你需要在pandas中使用位运算符|而不是or,并且使用&而不是and。 不能简单地使用python的布尔语句。
对于更复杂的过滤操作,请创建一个掩码mask,并将其应用于数据框。将所有查询放入掩码中并应用它。例如,
mask = (df["col1"]>=df["col2"]) & (stock["col1"]<=df["col2"])
df_new = df[mask]

0
我遇到了相同的错误,并因PySpark数据框问题被卡住了几天。由于我要比较两个字段的整数值,所以通过使用0填充na值成功地解决了它。

0
在我的情况下,由于类型值错误,导致了这个错误的出现。请确保比较运算符被赋予相同的数据类型元素进行比较。

0

有一件小事情浪费了我的时间。

在比较时,使用“=”,“!=”运算符时,请将条件放在括号中。如果不这样做,也会引发异常。

以下代码可以正常工作:

df[(some condition) conditional operator (some conditions)]

这将不会:

df[some condition conditional-operator some condition]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接