导入CSV文件后的数据筛选:指定条件及DataFrame列筛选简便方法问询
处理adult_census_data.csv的筛选与列选择方案
1. 导入依赖并读取CSV文件
用pandas读取CSV是Python处理表格数据的标准方式:
import pandas as pd # 读取目标CSV文件 df = pd.read_csv('adult_census_data.csv')
2. 多条件行筛选
根据你给出的所有同时满足的条件,使用布尔索引完成筛选。注意每个条件需用括号包裹,用&(按位与)替代and,避免运算符优先级问题:
# 按条件筛选行 filtered_df = df[ (df['workclass'] == 'State-Gov') & (df['education'] == 'Bachelors') & (df['marital-status'] == 'Never-Married') & (df['occupation'] == 'Adm-Clerical') & (df['relationship'] == 'Not-in-family') & (df['race'] == 'White') & (df['sex'] == 'Male') & (df['native-country'] == 'United States') & (df['income'] == '<=50K') ]
3. 筛选指定列
要仅保留条件对应的列,有两种常用实现方式:
方式一:先筛行再选列
先定义需保留的列列表,再从筛选后的DataFrame中提取:
columns_to_keep = [ 'workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race', 'sex', 'native-country', 'income' ] # 提取指定列 filtered_df = filtered_df[columns_to_keep]
方式二:一步到位(行+列筛选)
用loc方法可同时完成行筛选和列选择,效率更高:
columns_to_keep = [ 'workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race', 'sex', 'native-country', 'income' ] filtered_df = df.loc[ (df['workclass'] == 'State-Gov') & (df['education'] == 'Bachelors') & (df['marital-status'] == 'Never-Married') & (df['occupation'] == 'Adm-Clerical') & (df['relationship'] == 'Not-in-family') & (df['race'] == 'White') & (df['sex'] == 'Male') & (df['native-country'] == 'United States') & (df['income'] == '<=50K'), columns_to_keep ]
4. 更简便的实现方法
当条件较多时,推荐以下两种更简洁的写法:
方法一:使用query方法
query支持类SQL的语法,可读性更强,注意带连字符的列名要用反引号包裹:
columns_to_keep = [ 'workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race', 'sex', 'native-country', 'income' ] # 构造查询语句 filter_query = """ workclass == 'State-Gov' and education == 'Bachelors' and marital-status == 'Never-Married' and occupation == 'Adm-Clerical' and relationship == 'Not-in-family' and race == 'White' and sex == 'Male' and `native-country` == 'United States' and income == '<=50K' """ # 同时完成筛选和列选择 filtered_df = df.query(filter_query)[columns_to_keep]
方法二:用字典批量处理条件
把列名和对应值存入字典,通过循环生成筛选掩码,同时直接用字典的键作为要保留的列,避免重复写列名:
# 将条件存入字典 filter_dict = { 'workclass': 'State-Gov', 'education': 'Bachelors', 'marital-status': 'Never-Married', 'occupation': 'Adm-Clerical', 'relationship': 'Not-in-family', 'race': 'White', 'sex': 'Male', 'native-country': 'United States', 'income': '<=50K' } # 生成筛选掩码 mask = pd.Series([True] * len(df)) for col, value in filter_dict.items(): mask &= df[col] == value # 筛选行并保留指定列 filtered_df = df.loc[mask, filter_dict.keys()]
注意:确保CSV中的列名、字符串值和条件完全匹配(包括大小写、空格),否则会筛选不到数据。
内容的提问来源于stack exchange,提问作者Shane S
相关产品推荐
相关产品推荐

