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

如何筛选pandas DataFrame中所有数值列取值均为0的行

最优实现方案

不需要手动拼接20个列的查询条件,用pandas内置的批量判断逻辑即可实现,代码简洁且易维护。

方案1:按数据类型自动识别要校验的数值列

如果所有需要校验的列都是数值类型(整数、浮点数),且不存在其他不需要校验的数值类分类列(比如userId是整数但不需要校验的话不要用这个方案),可以直接用select_dtypes自动筛选数值列:

# 筛选所有数值列,判断每行所有值都为0
mask = df.select_dtypes(include=['int', 'float']).eq(0).all(axis=1)
# 保留符合条件的行
result = df[mask]

方案2:手动指定要校验的数值列范围(更推荐,避免误判)

如果存在userId这类不需要校验的数值类型列,或者数值列有统一命名规则,可以先筛选目标列再判断:

# 方式A:如果数值列有统一前缀,直接按列名规则筛选
numeric_cols = [col for col in df.columns if col.startswith('numericColumn')]
# 方式B:也可以手动列出来所有要校验的数值列
# numeric_cols = ['numericColumn1', 'numericColumn2', 'numericColumn3', ...]

# 判断目标列每行所有值都为0
mask = df[numeric_cols].eq(0).all(axis=1)
result = df[mask]

逻辑说明

  • eq(0):会对选中的所有列的每个元素判断是否等于0,返回相同形状的布尔值DataFrame
  • all(axis=1):对每一行的布尔值做与运算,只有该行所有值都是True(即所有目标列都为0)时才返回True
    两种方案不管有多少个数值列都可以正常运行,不需要手动修改逻辑,比拼接query条件的可维护性高很多。

内容的提问来源于stack exchange,提问作者usernameistaken777

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:57:05