如何解决Series 的真值是不明确的使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
和python 语句需要or
-values 。因为这些被认为是模棱两可的,所以你应该使用“按位”
(或)或(和)操作:and``truth``pandas``|``&
result = result[(result['var']>0.25) | (result['var']<-0.25)]
对于这些类型的数据结构,这些被重载以产生元素方式or
(或and
)。
只是为了对此声明添加更多解释:
当您想要获取bool
a时会引发异常pandas.Series
:
>>> import pandas as pd
>>> x = pd.Series([1])
>>> bool(x)
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
您遇到的是运算符 将操作数转换为的位置bool
(您使用过or
,但它也发生在and
,if
和while
):
>>> x or x
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> x and x
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> if x:
... print('fun')
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> while x:
... print('fun')
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
除了这 4 条语句之外,还有几个 python 函数可以隐藏一些bool
调用(如any
, all
, filter
,
…),这些通常没有问题,pandas.Series
但为了完整起见,我想提一下这些。
在您的情况下,异常并没有真正的帮助,因为它没有提到 。对于and
并且or
您可以使用(如果您想要逐元素比较):
-
numpy.logical_or
:>>> import numpy as np
np.logical_or(x, y)
或者只是|
操作员:
>>> x | y
-
numpy.logical_and
:>>> np.logical_and(x, y)
或者只是&
操作员:
>>> x & y
如果您使用运算符,请确保正确设置括号,因为运算符优先级。
有几个逻辑 numpy函数 应该在pandas.Series
.
if
如果您在执行或时遇到了异常中提到的替代方案,则更适合while
。我将简要解释其中的每一个:
- 如果您想检查您的系列是否为 :
>>> x = pd.Series([])
x.empty True x = pd.Series([1]) x.empty False
如果没有明确的布尔解释,Python 通常将len
gth 的容器(如list
, , …)解释为真值。tuple
因此,如果您想要类似
python 的检查,您可以这样做:if x.size
或if not x.empty
代替if x
.
-
如果您
Series
包含 布尔值:>>> x = pd.Series([100])
(x > 50).bool() True (x < 50).bool() False
-
如果您想检查您的系列的 (例如
.bool()
但即使对于非布尔内容也有效):>>> x = pd.Series([100])
x.item() 100
-
如果您想检查 或 项目是否非零、非空或非假:
>>> x = pd.Series([0, 1, 2])
x.all() # because one element is zero False x.any() # because one (or more) elements are non-zero True
解决方法
使用条件过滤我的结果数据框时出现or
问题。我希望我的结果df
能够提取所有var
高于 0.25 且低于 -0.25 的列值。
下面的这个逻辑给了我一个模棱两可的真值但是当我把这个过滤分成两个单独的操作时它会起作用。这里发生了什么?不知道在哪里使用建议的a.empty(),a.bool(),a.item(),a.any() or a.all()
.
result = result[(result['var'] > 0.25) or (result['var'] < -0.25)]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。