程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

系列的真值是模棱两可的。使用a.empty,a.bool(),a.item(),a.any()或a.all()

发布于2019-08-21 16:34     阅读(1213)     评论(0)     点赞(23)     收藏(4)


问题是使用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)]

解决方案


orand蟒蛇语句需要truth-值。因为pandas这些被认为是不明确的,所以你应该使用“按位” |(或)或&(和)操作:

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

对于这些类型的数据结构,这些都是重载的,以产生元素or(或and)。


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

当你想得到bool一个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但它也适用于andifwhile)的地方:

>>> 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调用(如anyallfilter,...),这些都是通常没有问题与pandas.Series而是完整性我想提一提这些。


在您的情况下,异常并不真正有用,因为它没有提到正确的替代方案对于andor你可以使用(如果你想要元素比较):

  • 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时遇到它,那么Exception中提到的替代方案更适合while我将简要解释其中的每一个:

  • 如果要检查系列是否为

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

    如果没有明确的布尔解释Python通常会将len容器gth(例如listtuple...)解释为真值。因此,如果你想要类似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


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/50713/e92dfd83b8db6e6ceae8/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

23 0
收藏该文
已收藏

评论内容:(最多支持255个字符)