我正在尝试使用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新手,无法解决此问题。我该如何解决这个问题?
答案 0 :(得分:19)
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'])
(你也不应该把导入放在同一行,尽管这只是一个可读性问题)
dataset
是dict
,在某些语言中称为map
或hashtable
。在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()