Arff Loader:AttributeError:'dict'对象没有属性'data'

时间:2015-03-10 14:31:35

标签: python attributes runtime-error arff

我正在尝试使用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新手,无法解决此问题。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:19)

短版

datasetdict。对于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中,您可以通过与列表或数组中的索引类似的方式访问值,除了&#34; index&#34;可以是任何数据类型&#34; hashable&#34; (理想情况下,是每个可能值的唯一标识符)。这个&#34;索引&#34;被称为&#34;键&#34;。在实践中,至少对于内置类型和大多数主要包,只有不可变数据类型或可清除,但没有实际规则要求这样。

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

答案 1 :(得分:1)

使用scipy轻松将arff数据加载到python中。

from scipy.io import arff

import pandas as pd

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

df = pd.DataFrame(data[0])

df.head()