Python-序列的真值是模糊的。使用a.empty、a.bool()、a.item()、a.any()或a.all()

问题描述

or@H_403_2@和and@H_403_2@python语句需要truth-@H_403_2@值。因为pandas@H_403_2@这些被认为是模棱两可的,所以你应该使用"bitwise" |(or)or&(and)@H_403_2@操作:

result = result[(result['var']>0.25) | (result['var']<-0.25)]
@H_403_2@

对于此类数据结构,它们会重载以产生元素级or@H_403_2@(或and@H_403_2@)。

只是为该语句添加更多解释:

当你想获取的时bool@H_403_2@,会引发异常pandas.Series@H_403_2@:

>>> 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().
@H_403_2@

什么你打是一处经营隐含转换的操作数bool@H_403_2@(你用or@H_403_2@,但它也恰好为and@H_403_2@,if@H_403_2@和while@H_403_2@):

>>> 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().
@H_403_2@

除了这些4个语句有一些隐藏某几个Python函数bool调用(如any,all,filter,...@H_403_2@),这些都是通常不会有问题的pandas.Series@H_403_2@,但出于完整性我想提一提这些。

在你的情况下,该异常并没有真正的帮助,因为它没有提到正确的替代方法。对于and@H_403_2@和,or@H_403_2@你可以使用(如果需要逐元素比较):

numpy.logical_or:@H_403_2@

>>> import numpy as np
>>> np.logical_or(x, y)
@H_403_2@

或简单地|@H_403_2@算:

>>> x | y
@H_403_2@

numpy.logical_and:@H_403_2@

>>> np.logical_and(x, y)
@H_403_2@

或简单地&@H_403_2@算:

>>> x & y
@H_403_2@

如果你使用的是运算符,请确保由于运算符优先级而正确设置了括号。

有几个逻辑numpy的功能,它应该工作的pandas.Series。

如果你在执行if或时遇到异常,则异常中提到的替代方法更适合while。我将在下面简短地解释每个:

如果要检查你的系列是否为空:

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

如果没有明确的布尔值解释,Python@H_403_2@通常会将len@H_403_2@容器的gth@H_403_2@(如list,,tuple...@H_403_2@)解释为真值。因此,如果你想进行类似python@H_403_2@的检查,可以执行:if x.size@H_403_2@或if not x.empty@H_403_2@代替if x@H_403_2@。

如果你仅Series包含一个布尔值:

>>> x = pd.Series([100])
>>> (x > 50).bool()
True
>>> (x < 50).bool()
False
@H_403_2@

如果要检查系列的第一个也是唯一的一项(例如,.bool()但即使不是布尔型内容也可以使用):

>>> x = pd.Series([100])
>>> x.item()
100
@H_403_2@

如果要检查所有或任何项目是否为非零,非空或非假:

>>> 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
@H_403_2@

解决方法

在用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)]

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”