Pandas布尔索引语法疑问:拆分赋值写法可行,合并写法为何无法运行?
问题分析:合并筛选条件时的语法错误原因
你完全说对了,这里确实存在运算符优先级的语法问题!
在Python里,&(按位与)的优先级比==更高,所以当你写A['Gender']=='Male' & A['Attrition']=='Yes'的时候,Python会先计算'Male' & A['Attrition']——字符串和Series做按位与操作完全不符合逻辑,自然会报错。
而你分开赋值给m1和m2的写法是对的:每个条件被单独计算成布尔Series,之后再用&对两个布尔Series做按位与操作,这才是符合你需求的筛选逻辑。
正确的合并写法
你只需要给每个条件加上括号,强制改变运算优先级,让Python先计算每个==的判断:
A[(A['Gender']=='Male') & (A['Attrition']=='Yes')]
另外,也可以用pandas的query()方法,写法更直观,还不需要担心优先级问题:
A.query("Gender == 'Male' and Attrition == 'Yes'")
这样两种写法都能得到和你分开赋值时一样的结果啦~
内容的提问来源于stack exchange,提问作者Ashok Kumar
相关产品推荐
相关产品推荐

