使用pandas loc多条件过滤DataFrame触发KeyError 'Sector'问题求助
报错根因
KeyError: 'Sector' 出现的核心原因是你导入的DataFrame实际列名中不存在Sector字段:你使用了自定义列名编写筛选逻辑,但没有实际修改数据集的列名,经典adult census收入数据集的默认列名和你使用的Sector、Married、Job等自定义命名完全不匹配。
解决步骤
- 第一步先确认数据集实际列名,运行以下代码即可打印所有列名:
print(df.columns.tolist())
经典adult数据集的默认字符串类列名依次为workclass、education、marital-status、occupation、relationship、race、sex、native-country、income,可对应你筛选条件的字段含义。
另外该数据集所有字符串值默认带前后空格,需要统一清洗后再做匹配,避免列名正确的情况下依然筛选不到结果。
- 可选解决方案二选一即可:
方案1:直接用原始列名编写筛选逻辑
import pandas as pd df = pd.read_csv("adult_census_data.csv") # 批量清洗所有字符串列的前后空格 str_cols = df.select_dtypes(include='object').columns df[str_cols] = df[str_cols].apply(lambda x: x.str.strip()) # 按原始列名写筛选条件 result = 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') ] print(result)
方案2:先修改列名为你自定义的名称再筛选
import pandas as pd df = pd.read_csv("adult_census_data.csv") # 按你使用的自定义命名修改列名,注意列表顺序要和数据集实际列顺序完全对应 df.columns = ['年龄', 'Sector', 'fnlwgt', 'Education', '教育年限', 'Married', 'Job', 'Family', 'Race', 'Gender', '资本收益', '资本损失', '周工作时长', 'Location', 'Income'] # 批量清洗字符串空格 str_cols = df.select_dtypes(include='object').columns df[str_cols] = df[str_cols].apply(lambda x: x.str.strip()) # 你原有筛选代码可直接运行 result = df.loc[(df['Sector']=='State-gov') & (df['Education']=='Bachelors') & (df['Married']=='Never-married') & (df['Job']=='Adm-clerical') & (df['Family']=='Not-in-family') & (df['Race']=='White') & (df['Gender']=='Male') & (df['Location']=='United-States') & (df['Income']=='<=50k'), :] print(result)
内容的提问来源于stack exchange,提问作者M C
相关产品推荐
相关产品推荐

