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

使用ucimlrepo获取UCI Adult数据集时遇TypeError错误求助

解决UCIMLRepo获取Adult数据集的TypeError问题

问题重现

尝试使用UCIMLRepo库获取Adult数据集,执行官方提供的代码:

pip install ucimlrepo

from ucimlrepo import fetch_ucirepo 
  
# fetch dataset 
adult = fetch_ucirepo(id=2) 
  
# data (as pandas dataframes) 
X = adult.data.features 
y = adult.data.targets 
  
# metadata 
print(adult.metadata) 
  
# variable information 
print(adult.variables) 

触发以下TypeError:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/Users/.../playground.ipynb Cell 3 line 4
      1 from ucimlrepo import fetch_ucirepo
      3 # fetch the adult dataset
----> 4 adult = fetch_ucirepo(id=2)
      6 # convert the dataset to a Pandas DataFrame
      7 df = pd.DataFrame(adult.data.features, columns=adult.variables.names, missing_values=["?"])

File ~/anaconda3/envs/myEnv/lib/python3.11/site-packages/ucimlrepo/fetch.py:148, in fetch_ucirepo(name, id)
    142 # alternative usage?: 
    143 # variables.age.role or variables.slope.description
    144 # print(variables) -> json-like dict with keys [name] -> details
    145 
    146 # make nested metadata fields accessible via dot notation
    147 metadata['additional_info'] = dotdict(metadata['additional_info'])
--> 148 metadata['intro_paper'] = dotdict(metadata['intro_paper'])
    150 # construct result object
    151 result = {
    152     'data': dotdict(data),
    153     'metadata': dotdict(metadata),
    154     'variables': variables
    155 }

TypeError: 'NoneType' object is not iterable

不想手动下载解析数据集,希望找到简洁解决办法。

解决方案

方案1:升级UCIMLRepo库

这个错误是旧版本库的bug(处理intro_paper字段为None时未做判断),升级到最新版本即可修复:

pip install --upgrade ucimlrepo

升级后重新运行原代码,应该能正常获取数据集。

方案2:直接用Pandas加载原始数据(无需额外解析)

如果升级后仍有问题,可以直接通过Pandas从UCI的原始数据链接加载,提前整理好列名,自动处理缺失值:

import pandas as pd

# 定义Adult数据集的完整列名
columns = [
    'age', 'workclass', 'fnlwgt', 'education', 'education-num',
    'marital-status', 'occupation', 'relationship', 'race', 'sex',
    'capital-gain', 'capital-loss', 'hours-per-week', 'native-country', 'income'
]

# 加载训练集和测试集,合并为完整数据集
train_data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data', 
                         names=columns, na_values='?')
test_data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.test', 
                        names=columns, na_values='?', skiprows=1)  # 跳过测试集第一行的说明
full_dataset = pd.concat([train_data, test_data], ignore_index=True)

# 分离特征与目标变量
X = full_dataset.drop('income', axis=1)
y = full_dataset['income']

# 查看数据样例
print(full_dataset.head())

这种方式无需手动下载文件或解析adult.names,一步完成数据加载和预处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:32:52