or或者python语句需要真值.对于熊猫,这些被认为是含糊的,所以你应该使用“bitwise”| (或)或& (和)操作:
result = result[(result['var']>0.25) | (result['var']
对于这些类型的数据结构来说,这些都是过载的,以产生元素或(或).
只是为了在这个语句中增加一些解释:
当你想得到一个pandas.Series的bool时,抛出异常:
>>> 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的地方(你使用过但是也会发生在和,如果和同时):
>>> 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调用(像任何一个,all,filter,…)这些通常对于pandas.Series是没有问题的,但为了完整,我想提到这些.
在你的情况下,例外并不真正有用,因为它没有提到正确的选择.对于和和/或您可以使用(如果您想要元素比较):
>>> import numpy as np
>>> np.logical_or(x, y)
或者简单的操作符:
>>> x | y
>>> np.logical_and(x, y)
或简单地操作符:
>>> x & y
如果您使用的是运算符,那么请确保由于the operator precedence而正确设置了圆括号.
在Exception中提到的备选方案更适合在执行if或while时遇到它.我稍后会解释一下:
>如果你想检查你的系列是否为空:
>>> x = pd.Series([])
>>> x.empty
True
>>> x = pd.Series([1])
>>> x.empty
False
如果没有明确的布尔解释,Python通常将容器的长度(如list,tuple,…)解释为true-value.所以,如果你想要像类似Python的检查,你可以做:如果x.size或如果不是x.empty而不是x.
>如果您的系列包含一个且只有一个布尔值:
>>> x = pd.Series([100])
>>> (x > 50).bool()
True
>>> (x < 50).bool()
False
>如果你想检查你的系列的第一个也是唯一的项目(如.bool(),但工作甚至不是布尔内容):
>>> 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