将包含日期时间对象的元组转换为numpy结构化数组时,TypeError:float()参数必须是字符串或数字`

时间:2015-07-25 12:57:26

标签: python mysql datetime numpy

我正在尝试使用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')))

1 个答案:

答案 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'))))