如何用df.query筛选DataFrame中包含NaN值的所有列?
能否用
df.query()实现筛选含NaN列的功能? 答案是:不能直接用df.query()实现,因为df.query()的设计初衷是用于行级筛选,它的语法仅支持基于每行数据的条件判断,无法直接针对列的整体属性(比如是否包含NaN)进行筛选。
原代码的逻辑
你的原代码df.loc[:, df.isna().any()]是通过两步实现列筛选:
df.isna().any():对每列检查是否存在至少一个NaN值,返回一个布尔数组(索引为列名,值为该列是否含NaN)loc[:, 布尔数组]:通过布尔索引筛选出符合条件的列
替代方案(如果坚持用字符串式筛选风格)
如果想要用类似query的字符串语法风格来筛选列,可以使用df.filter()结合动态生成的列名列表,示例如下:
# 先获取所有含NaN的列名 nan_cols = [col for col in df.columns if df[col].isna().any()] # 用filter筛选列 df.filter(items=nan_cols)
或者一行简写:
df.filter(items=[col for col in df.columns if df[col].isna().any()])
若需结合行筛选
如果你的需求是先筛选含NaN的列,再用query进行行筛选,可以将两者结合:
df.loc[:, df.isna().any()].query("你的行筛选条件")
总结:单纯筛选含NaN的列时,df.loc[:, df.isna().any()]是最简洁高效的写法,df.query()并不适合这个场景。
内容的提问来源于stack exchange,提问作者jack homareau
相关产品推荐
相关产品推荐

