我正在尝试使用MySQL中的数据在Python中绘制图形,但是我收到以下错误:
File "mygraph.py", line 45, in <module>
Raw = numpy.fromiter(cursor.fetchall(), count=-1, dtype=[('', numpy.float)]*3)
TypeError: float() argument must be a string or a number
使用datetime
格式将日期保存在数据库中。以下是我的代码的一部分:
cursor = DBconn.cursor()
sql = "select mydate,temp,hum from temptable where unix_timestamp(mydate) >= (unix_timestamp(now())-(60*60*24))"
cursor.execute(sql)
Raw = numpy.fromiter(cursor.fetchall(), count=-1, dtype=[('', numpy.float)]*3)
Raw = Raw.view(numpy.float).reshape(-1, 3)
(samples,ports)=Raw.shape
print 'Samples: {}, DataPoints: {}'.format(samples,ports),
plotme=numpy.zeros((samples,ports-1)) # make an array the same shape minus the epoch numbers
问题可能在于格式化日期的方式,例如我保存在datetime
但我正在使用纪元?任何人都可以指导我如何解决这个问题吗?
更新:cursor.fetchall()
打印以下内容:
((datetime.datetime(2015, 7, 24, 21, 2, 1), Decimal('21.4'), Decimal('60.9')))
答案 0 :(得分:1)
您在调用np.fromiter
时指定的dtype与cursor.fetchall()
返回的元组列表的相应类型不匹配。每个元组中的第一项是datetime.datetime
,但您的dtype包含所有浮点数。由于没有安全的方法将datetime.datetime
转换为浮点数,因此您获得TypeError
。
尝试制作第一个字段numpy.datetime64
而不是浮点数:
numpy.fromiter(cursor.fetchall(), count=-1,
dtype=zip(('',) * 3, ('M8[us]', '<f8', '<f8'))))