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)。


只是为了对此声明添加更多解释:

当您想要获取boola时会引发异常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,ifwhile):

>>> 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您可以使用(如果您想要逐元素比较):

或者只是|操作员:

    >>> x | y

或者只是&操作员:

    >>> x & y

如果您使用运算符,请确保正确设置括号,因为运算符优先级

几个逻辑 numpy函数 应该在pandas.Series.


if如果您在执行或时遇到了异常中提到的替代方案,则更适合while。我将简要解释其中的每一个:

  • 如果您想检查您的系列是否为 :
    >>> x = pd.Series([])
    

    x.empty True x = pd.Series([1]) x.empty False

如果没有明确的布尔解释,Python 通常将length 的容器(如list, , …)解释为真值。tuple因此,如果您想要类似 python 的检查,您可以这样做:if x.sizeif 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)]

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...