Arff Loader : AttributeError: 'dict' object has no attribute 'data'

Arff Loader : AttributeError: 'dict' object has no attribute 'data'

我正在尝试使用 liac-arff 库将 .arff 文件加载到 numpy 数组中。 (https://github.com/renatopp/liac-arff)

这是我的代码。

import arff, numpy as np
dataset = arff.load(open('mydataset.arff', 'rb'))
data = np.array(dataset.data)

执行时出现错误。

ArffLoader.py", line 8, in <module>
data = np.array(dataset.data)
AttributeError: 'dict' object has no attribute 'data'

我看过类似的帖子,Smartsheet Data Tracker: AttributeError: 'dict' object has no attribute 'append'。我是 Python 的新手,无法解决此问题。我该如何解决这个问题?

简短版

dataset 是一个 dict。对于 dict,您可以使用 python 索引符号 dataset[key] 访问值,其中 key 可以是字符串、整数、浮点数、元组或任何其他不可变数据类型(它比那更复杂,如果您有兴趣,请参见下文)。

在您的例子中,密钥采用字符串形式。要访问它,您需要提供您想要的字符串作为索引,如下所示:

import arff
import numpy as np
dataset = arff.load(open('mydataset.arff', 'rb'))
data = np.array(dataset['data'])

(你也不应该将导入放在同一行,尽管这只是一个可读性问题)

更详细的解释

datasetdict,在某些语言中称为 maphashtable。在 dict 中,您访问值的方式与在列表或数组中建立索引的方式类似,除了 "index" 可以是 "hashable" 的任何数据类型(理想情况下,每个可能值的唯一标识符)。这个"index"被称为"key"。实际上,至少对于内置类型和大多数主要包,只有不可变数据类型或可散列数据类型,但没有实际规则要求这种情况。

你来自MATLAB吗?如果是这样,那么您可能正在尝试使用 MATLAB's struct 访问技术。您可以将 dict 视为更快、更灵活的 struct,但访问值的语法不同。

使用 scipy 很容易将 arff 数据加载到 python。

from scipy.io import arff

import pandas as pd

data = arff.loadarff('dataset.arff')

df = pd.DataFrame(data[0])

df.head()