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

使用Python Pandas过滤CSV多变量时遇代码问题求助

问题修复:Adult数据集处理代码调整

原代码核心问题梳理

  • 变量名不统一:读取数据赋值给df,后续却用未定义的data调用,触发NameError
  • 字符串拼接语法错误:跨多行拼接字符串未加\,导致代码无法编译
  • 字符串常量未加引号:Male是字符串值,未加引号会被识别为变量,触发NameError
  • 多条件过滤语法错误:布尔索引的多条件需要用括号包裹后再用&连接,否则运算优先级出错
  • 循环效率极低:用iterrows()逐行统计组合次数,大数据集下性能极差

修复后的完整代码

import pandas as pd
import numpy as np

# 读取数据,统一使用变量名df
df = pd.read_csv("adult.data.csv")

# 输出数据基本信息,用f-string替代字符串拼接更简洁
print(f"data shape: {df.shape}")
print(f"number of rows: {df.shape[0]}")
print(f"number of cols: {df.shape[1]}")
print(df.columns.values)

# 用pandas内置分组方法统计指定列的组合出现次数,性能远超循环
combination_counts = df.groupby(['age', 'sex', 'workclass', 'education', 'marital-status', 'race']).size()

# 统计仅出现一次的组合数量
unique_row_count = len(combination_counts[combination_counts == 1])
print(unique_row_count)

# 打印所有仅出现一次的组合
for combo, count in combination_counts[combination_counts == 1].items():
    print(combo)

# 正确的多条件过滤写法:括号包裹单个条件,字符串值加引号,用&连接逻辑与
filtered_data = df.loc[(df['age'] == 58) & (df['sex'] == 'Male')]
print(filtered_data)

关键修复说明

  1. 变量名统一:将所有data替换为df,避免未定义变量错误
  2. 语法错误修正:给字符串常量Male添加引号,修复跨行字符串拼接的语法问题
  3. 多条件过滤优化:用括号包裹每个过滤条件,确保&的逻辑运算优先级正确
  4. 性能提升:用groupby().size()替代逐行循环,利用pandas向量化操作特性,处理大数据集时性能提升数十倍甚至百倍

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:03:30