Pandas布尔行选择异常:多条件组合返回空DataFrame问题
问题原因与解决方法
问题出在Python运算符优先级上:&(按位与)的优先级比==高,你写的组合条件会被错误解析:
# 实际执行的错误逻辑 (data['id'].isin(keep) & data['toggle']) == 2
它先把data['id'].isin(keep)的布尔序列和data['toggle']的数值列做按位与运算,再判断结果是否等于2,最终得到全为False的筛选条件,自然返回空DataFrame。
而分步筛选时,每一步都是独立的布尔索引,逻辑完全正确:先筛选id在keep列表中的行,再在结果里筛选toggle等于2的行。
正确的组合条件写法
给每个子条件单独加括号,明确运算顺序:
new_data = data[(data['id'].isin(keep)) & (data['toggle'] == 2)]
也可以用loc提升代码可读性:
new_data = data.loc[(data['id'].isin(keep)) & (data['toggle'] == 2), :]
内容的提问来源于stack exchange,提问作者WedgeAntilles
相关产品推荐
相关产品推荐

