You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:30:45