Pandas逻辑运算: The truth value of a Series is ambiguous
问题描述
1 | 'state': ['US','Ohio','Nevada'], 'pop':[2.5, 4.3, 3.2]} > data = { |
解决问题
原因是由于在python中 or
和 and
的声明需要 truth-values
, 即真实的True或者False
但是df['pop']>3
返回并不是True或False,而仍然是一个Series,所以在pandas中这样使用被认为是不明确(ambiguous)
因此需要使用位运算符(bitwise)即 |
(or) 或者 &
(and):
1 | >>> df[(df['pop']>3) & (df['pop']<4)] |
附加说明
如果想实现 and 或者 or 的效果,可以使用 logical_or 和 logical_and 或者 位运算符(bitwise)即 |
(or) 和 &
(and)
- logical_or:
1 | > import numpy as np |
或者 |
运算符
1 | >>> x | y |
- logical_and:
1 | > import numpy as np |
或者 &
运算符
1 | > x & y |
当使用位运算符时,因为运算符优先级的问题,请将两边用括号包起来。查看详情
除此之外还有 一些其他逻辑操作 logical_not
和 logical_xor
… 查看详情
注意
当使用bool
来操作pandas.Series
时会返回一个异常:
1 | >>> x = pd.Series([1]) |
下列操作也会抛出异常:
1 | >>> x or x |
这些隐式调用其实也是将之转为bool类型,因此仍会错误,除了上述4个声明外,还有一些操作会产生同样的效果(类似any, all, filter, …)