Pandas按OR逻辑过滤数据失效问题排查求助
问题分析与解决方案
我一眼就看出你的问题出在逻辑运算符的优先级上啦!
问题根源
Python里按位与&的优先级比比较运算符>=、<=更高,你写的datos['EdadCurp'] >= 21 & datos['EdadCurp']<=68这类表达式,实际会先计算21 & datos['EdadCurp'](按位与操作),再进行大小比较,这完全偏离了你想要的「21≤值≤68」的区间判断逻辑,导致筛选条件失效,才会出现不符合规则的条目混进结果里。
修正后的代码
给每个区间判断的比较表达式单独加括号,确保先完成「值≥21」和「值≤68」的判断,再用&连接成完整的区间条件,最后用|组合多列的判断结果:
datos[ ((datos['edad'] >= 21) & (datos['edad'] <= 68)) | ((datos['EdadCurp'] >= 21) & (datos['EdadCurp'] <= 68)) | ((datos['edadrfc'] >= 21) & (datos['edadrfc'] <= 68)) ][["edad", "EdadCurp", "edadrfc"]].head(100)
更简洁的优化写法
可以用Pandas自带的between()方法简化区间判断,它默认包含边界值(即left ≤ x ≤ right),刚好匹配你的需求,代码可读性也更强:
datos[ datos['edad'].between(21, 68) | datos['EdadCurp'].between(21, 68) | datos['edadrfc'].between(21, 68) ][["edad", "EdadCurp", "edadrfc"]].head(100)
内容的提问来源于stack exchange,提问作者JoseGzz
相关产品推荐
相关产品推荐

