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

如何用Python的Pandas正确加载标准格式的ARFF数据集?

解决ARFF文件加载转DataFrame的TypeError问题

报错原因

arff.load()返回的是生成器对象,生成器不支持下标([])操作,直接尝试访问生成器的['data']键就会抛出TypeError: 'generator' object is not subscriptable。

解决方案

步骤1:导入依赖库

import arff
import pandas as pd

步骤2:正确读取ARFF文件

标准ARFF文件通常只包含一个数据集,可通过next()提取生成器中的唯一数据集对象,或把生成器转为列表后访问:

方法一:用next()提取数据集

with open('ALOI.arff', 'r', encoding='utf-8') as f:
    dataset = next(arff.load(f))

方法二:转换为列表后访问

with open('ALOI.arff', 'r', encoding='utf-8') as f:
    dataset = list(arff.load(f))[0]

步骤3:转换为Pandas DataFrame

从数据集的attributes字段提取列名,再将data字段转为DataFrame:

# attributes格式为[(属性名, 数据类型), ...],提取属性名作为列名
columns = [attr_name for attr_name, _ in dataset['attributes']]
df = pd.DataFrame(dataset['data'], columns=columns)

可选:处理标称属性

如果ARFF文件包含标称类型属性,可在加载时添加encode_nominal=True参数自动将其转为数值:

with open('ALOI.arff', 'r', encoding='utf-8') as f:
    dataset = next(arff.load(f, encode_nominal=True))

完整示例代码

import arff
import pandas as pd

with open('ALOI.arff', 'r', encoding='utf-8') as f:
    dataset = next(arff.load(f, encode_nominal=True))

columns = [attr[0] for attr in dataset['attributes']]
df = pd.DataFrame(dataset['data'], columns=columns)

# 查看前5行验证结果
print(df.head())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:00:10