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

如何移除DataFrame中指定列含零值的行?

解决Pandas筛选指定非零列数行的问题

嗨,好久不用Pandas确实容易手生,我帮你梳理下最简单的解决办法,咱们用具体例子来说明更直观~

首先咱们先构造一个符合你需求的示例DataFrame,假设最终要保留的是第2行(也就是有m列值不为0的行):

import pandas as pd

# 示例DataFrame:第2行有3列非零值,其他行不符合
df = pd.DataFrame({
    'col1': [0, 5, 3, 0],
    'col2': [2, 7, 0, 0],
    'col3': [0, 0, 2, 1],
    'col4': [1, 6, 0, 0]
})

两种常见场景的解决方法

场景1:保留指定的m列全部不为0的行

如果你已经明确知道要检查哪m列,比如要确保col1、col2、col4这3列都不为0,可以这样写:

# 定义要检查的目标列(m列)
target_columns = ['col1', 'col2', 'col4']
# 筛选出目标列全部非零的行
filtered_df = df[(df[target_columns] != 0).all(axis=1)]
  • df[target_columns] != 0:把目标列转换成布尔矩阵,非零值对应True,零对应False
  • .all(axis=1):按行判断,只有当该行所有目标列都是True(即全部非零)时,返回True

场景2:保留每行中非零列的数量恰好等于m的行

如果你不需要指定具体列,只要每行有恰好m个非零值就行(比如m=3),可以用下面的代码:

m = 3
# 计算每行非零值的数量,筛选数量等于m的行
filtered_df = df[df.ne(0).sum(axis=1) == m]
  • df.ne(0):和df != 0效果一样,生成布尔矩阵标记非零值
  • .sum(axis=1):按行求和,True会被计为1,False计为0,得到每行非零列的数量
  • 最后筛选出数量等于m的行,就能得到你要的结果啦

运行上面的代码后,filtered_df就只会包含第2行数据了~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:02:54