如何移除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
相关产品推荐
相关产品推荐

