我需要找到two
和1.5
之间库仑3.5
值的所有行。我期待的结果是索引1和2的行。我尝试了以下代码,但收到错误。
>>> d = {'one' : [1., 2., 3., 4.],
... 'two' : [4., 3., 2., 1.],
... 'three':['a','b','c','d']}
>>> d
{'three': ['a', 'b', 'c', 'd'], 'two': [4.0, 3.0, 2.0, 1.0], 'one': [1.0, 2.0, 3.0, 4.0]}
>>> DataFrame(d)
one three two
0 1 a 4
1 2 b 3
2 3 c 2
3 4 d 1
>>> df = DataFrame(d)
>>> df[1.5 <= df['two'] <= 3.5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>>
答案 0 :(得分:5)
不幸的是,你不能用numpy(因此是pandas)进行链式比较。改为:
df[(1.5 <= df.two) & (df.two <= 3.5)]
答案 1 :(得分:5)
一个非答案的排序,但我想我会分享
在pandas == 0.13(下一个主要版本)中,您将能够执行以下操作
df['1.5 <= two <= 3.5']
# or use the query method
df.query('1.5 <= two <= 3.5')
在引擎盖下,它使用pd.eval
函数,它将链式比较重写为通常如何编写它们,然后将结果字符串传递给numexpr
。它还将DataFrame
中的列(以及索引和列索引)“附加”到特定于查询的命名空间(这可由用户控制,但默认为前面提到的元素)。您还可以使用and
,or
和{{1}的方式使用not
,&
和|
个关键字标准Python中的按位运算符。