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 接受它作为输入?
【问题讨论】:
使用append
,add
用于集合。
你能解释一下查询的问题吗?你的意思是你得到了行,但有时一个字母滑入并且你想删除它?
目前看来 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 中获取对象列表时