您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python-Pandas中布尔索引的逻辑运算符

Python-Pandas中布尔索引的逻辑运算符

当你说

(a['x']==1) and (a['y']==10)

你暗中要求Python进行转换(a['x']==1)并转换(a['y']==10)为布尔值。

NumPy数组(长度大于1)和Pandas对象(例如Series)没有布尔值-换句话说,它们引发

ValueError: The truth value of an array is ambiguous. Use a.empty, a.any() or a.all().

当用作布尔值时。那是因为不清楚何时应该为True或False。如果某些用户的长度非零,则可能会认为它们为True,例如python列表。其他人可能只希望其所有元素均为True 才希望它为True。如果其他任何元素为True,则其他人可能希望它为True。

由于期望值如此之多,因此NumPyPandas的设计师拒绝猜测,而是提出了ValueError

相反,你必须是明确的,通过调用empty()all()any()方法来表示你的愿望是什么行为。

但是,在这种情况下,你似乎不希望布尔值求值,而是希望按元素进行逻辑与。这就是&二进制运算符执行的操作:

(a['x']==1) & (a['y']==10)

返回一个布尔数组。

顺便说一句,正如alexpmil所指出的,括号是强制性的,因为&其运算符优先级高于==。如果没有括号,a['x']==1 & a['y']==10则将被评估为a['x'] == (1 & a['y']) == 10等效于链式比较(a['x'] == (1 & a['y'])) and ((1 & a['y']) == 10)。那是形式的表达Series and Series。and与两个Series一起使用将再次触发与ValueError上述相同的操作。这就是为什么括号是强制性的。

python 2022/1/1 18:28:53 有183人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶