当你说
(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().
当用作布尔值时。这是因为它的unclear when it should be True or False.有些用户可能会假设他们是True,如果他们有非零长度,像Python列表。其他人可能希望它为真,只有当其所有元素都为真。如果其任何元素为True,其他人可能希望它为True。
因为有这么多冲突的期望,NumPy和Pandas的设计者拒绝猜测,而是提出一个ValueError。
相反,你必须是显式的,通过调用empty(),all()或any()方法来指示你想要的行为。
在这种情况下,但是,它看起来像你不想要布尔评估,你想要元素的逻辑和。这就是&二元运算符执行:
(a['x']==1) & (a['y']==10)
返回一个布尔数组。