如何在Pandas中正确实现多列数据的条件过滤?
多列批量过滤0值的实现方案
你可以直接通过pandas的按行布尔判断实现一次性过滤,不需要逐列操作,也不需要用iloc修改值,具体实现如下:
import pandas as pd # 读取本地数据集文件 df = pd.read_csv("你的本地数据集路径.csv") # 提取除Outcome外的所有特征列名 feature_cols = df.columns.drop("Outcome") # 生成行掩码:只有当前行所有特征列都没有0值时才为True row_mask = (df[feature_cols] != 0).all(axis=1) # 过滤得到符合要求的结果 filtered_df = df[row_mask]
常见结果不一致原因说明
你之前多列过滤得到不同行数,基本是逻辑判断用错导致的:
- 如果用
any(axis=1)或者|(或)逻辑,规则变为只要有一列不为0就保留,会得到行数更多的652条结果 - 用
all(axis=1)或者&(且)逻辑,规则才是你需要的所有列都不为0才保留,最终得到429条结果,符合过滤要求
你可以用下面的代码验证过滤结果是否正确:
# 统计过滤后特征列的0值总数,返回全0则代表过滤成功 print(filtered_df[feature_cols].isin([0]).sum())
内容的提问来源于stack exchange,提问作者Madman
相关产品推荐
相关产品推荐

