AttributeError 列表对象没有属性添加

Posted

技术标签:

【中文标题】AttributeError 列表对象没有属性添加【英文标题】:AttributeError list object has no attribute add 【发布时间】:2017-03-26 19:30:33 【问题描述】:

Python 对我来说是新的,我正在使用 Python 编写一些机器学习代码。我的场景是我正在从我的 sql 中读取数据并尝试为这些数据赋予形状,以便我可以将其用于 MLP 训练。

我的代码如下:

connection = mysql.connector.connect(host='localhost', port=3306, user='root', passwd='mysql', db='medicalgame')

cur = connection.cursor()
query = ""
cur.execute(query)
# X_train will be a list of list and later we'll convert it to a numpy ndarray
X_train = []

for row in cur:
    X_train.add(row)
connection.close()

X_train should be ready
X_train = np.asarray(X_train)
print 'The shape of X_train is', X_train.shape

在调试过程中,我得到的查询结果是这样的: (6, 1, 1, 1, 2, u'F', 1, 0, 0, 19) 谁能帮助我,我可以修复错误并为我的 X_train 赋予形状,以便 MLP 接受它作为输入?

【问题讨论】:

使用appendadd 用于集合。 你能解释一下查询的问题吗?你的意思是你得到了行,但有时一个字母滑入并且你想删除它? 目前看来 append 有效,但我不确定为什么这个奇怪的字母 'u' 会出现在我的查询结果中。我的 X_train 现在是这样的: [(6, 1, 1, 1, 2, u'F', 1, 0, 0, 19), (6, 1, 1, 1, 2, u'V', 1 , 0, 0, 14)] 你能告诉我如何用 '[' this 删除这个 '(' 吗? u'F' 是一个 unicode 字符。大概您的数据库有一个字符或字符串值字段。 【参考方案1】:

信息很清楚。 list 没有方法add,因为它是有序(它有一个笨拙的__add__ 方法,但那是用于添加在列表之间)。你可以insert,但你想append。所以正确的做法是:

X_train = []

for row in cur:
    X_train.append(row)

但是直接转换为列表的首选方式(迭代 cur 元素以简单且高效的方式创建列表):

X_train = list(cur)

但是您不能这样做,因为您的列表包含虚假数据。幸运的是,您可以像这样在嵌套列表推导中过滤掉它们:

X_train = [[x for x in r if type(x)==int] for r in cur]

这会构建您的列表列表,但会过滤掉非整数值并将其提供给 numpy.asarray 产量(使用您的示例数据):

[[ 6  1  1  1  2  1  0  0 19]
 [ 6  1  1  1  2  1  0  0 14]]

【讨论】:

谢谢你,你的回答很完美,帮助我正确地制作我的数据集 很好!但如果我是你,我会调查那个虚假条目。如果你不知道它为什么会在这里,你以后可能会遇到更多的问题。 那个虚假条目是为了识别我,字符串值是 unicode :) .. 我使用这个 X_train[X_train == 'F'] == 0 修复它因为对于我的 MLP,我只需要数字数据。 在这种情况下你可以做X_train = list(cur) 你的意思是如果我使用这个 X_train = list(cur) 我不需要循环?

以上是关于AttributeError 列表对象没有属性添加的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:“列表”对象没有属性“astimezone”

AttributeError:“列表”对象在转换为数组时没有属性“形状”

AttributeError:“列表”对象没有属性“排序值”

Keras AttributeError:“列表”对象没有属性“ndim”

AttributeError: 'property' 对象没有属性 'copy' - 尝试在 Django Rest 中获取对象列表时

AttributeError:“列表”对象没有属性“barh”