Pandas未知列名时如何筛选至少一列含指定值的行
解决方案
你可以直接用pandas内置的any方法实现需求,不需要提前知道所有列名,以下是两种适配不同场景的实现方式:
方法1:排除指定非判断列后筛选
如果只有ID列不需要参与是否为True的判断,先删除该列后逐行判断即可:
df[df.drop('ID', axis=1).any(axis=1)]
方法2:自动筛选所有布尔列参与判断
如果不清楚哪些列是需要判断的布尔列,可以自动匹配所有布尔类型的列做判断,完全不需要关心列名:
df[df.select_dtypes(include='bool').any(axis=1)]
原理解释
any(axis=1)会逐行扫描输入的DataFrame,只要该行存在任意一个True值就返回True,全为False则返回False,生成的布尔序列可以直接作为行筛选的索引掩码。- 两种方法都不需要手动罗列所有需要判断的列名,适配列数多、列名未知的场景,运行后都会得到你给出的预期输出结果。
内容的提问来源于stack exchange,提问作者Ewdlam
相关产品推荐
相关产品推荐

