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

如何使用pandas删除DataFrame中除ID列外所有值为0或'nan'的行

解决pandas DataFrame行过滤问题

问题原因

你的原有代码存在两处逻辑错误:

  • 未排除id列参与校验:你的需求是仅判断除ID列外的其余列,原代码把ID列也纳入了判断范围
  • 聚合逻辑用反:all(axis=1)要求该行所有列都满足「不等于0且不等于'nan'」才会保留,你需要的是「除ID外的列只要存在至少一个不是0或'nan'就保留」,等价于「剔除除ID外所有列都是0或'nan'的行」。

正确代码

易读版写法

# 生成布尔掩码:除id外的列,只要有一个值不是0也不是'nan'就为True
mask = df.drop('id', axis=1).apply(lambda x: (x != 0) & (x != 'nan')).any(axis=1)
# 按掩码过滤,加reset_index重置行索引和预期输出完全一致
res = df[mask].reset_index(drop=True)

简洁版写法

res = df[~df.drop('id', axis=1).isin([0, 'nan']).all(axis=1)].reset_index(drop=True)

输出结果

运行后得到的结果和你预期一致:

id  a  b  c
0   2  0  1  1
1   4  1  1  1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 15:36:04