gpt4 book ai didi

python - 系列的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

转载 作者:太空宇宙 更新时间:2023-11-03 19:48:33 24 4
gpt4 key购买 nike

我想使用 or 条件过滤数据帧,以保留特定列值超出 [-0.25, 0.25] 范围的行。我尝试过:

df = df[(df['col'] < -0.25) or (df['col'] > 0.25)]

但我收到错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

最佳答案

orand Python 语句需要值。对于 pandas,这些被认为是不明确的,因此您应该使用“按位”|(或)或 &(与)运算:

df = df[(df['col'] < -0.25) | (df['col'] > 0.25)]

这些类型的数据结构被重载,以产生按元素的 orand

<小时/>

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

当你想获取pandas.Seriesbool时抛出异常:

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

除了这四个语句之外,还有几个 Python 函数隐藏了一些 bool 调用(例如 anyallfilter,...)。这些通常对于 pandas.Series 来说不会有问题,但为了完整起见,我想提及这些。

<小时/>

就您而言,异常(exception)并没有真正的帮助,因为它没有提及正确的替代方案。对于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

如果您使用运算符,请务必正确设置括号,因为 operator precedence .

several logical NumPy functions 应该适用于pandas.Series

<小时/>

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

  • 如果您想检查您的系列是否为空:

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

    Python 通常会将容器的 length(例如 listtuple...)解释为真值(如果它没有)显式 boolean 解释。因此,如果您想要类似 Python 的检查,您可以执行以下操作:if x.sizeif not x.empty 而不是 if x

  • 如果您的系列包含一个且仅有一个 boolean 值:

    >>> x = pd.Series([100])
    >>> (x > 50).bool()
    True
    >>> (x < 50).bool()
    False
  • 如果您想检查系列中的第一个且唯一的项目(例如 .bool(),但它甚至适用于非 boolean 内容) :

    >>> x = pd.Series([100])
    >>> x.item()
    100
  • 如果您想检查所有任何项是否非零、非空或非False:

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

关于python - 系列的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59981643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com