Arff 加载器:属性错误:"dict"对象没有属性"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"对象没有属性"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'])

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

更详细的解释

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

你来自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()

相关内容

最新更新