如何将包含日期字符串的python字典列表强制转换为datetime对象的numpy记录数组?

这个问题是关于从字典列表中构造一个numpy记录数组的(与另一个问题一样),但是专门针对datetime dtype。这里概述的方法对我不起作用。继续阅读-

我有一个Python 3字典列表,例如:

e = [{"date":"2019-11-07","value":3.147},{"date":"2019-11-08","value":2.7315}]

我想一次将e转换为numpy记录数组/结构,并将日期字符串转换为datetimenp.datetime64对象。

但是以下操作不起作用:date字段仍然是字符串-不是任何类型的datetime对象-或抛出ValueError Could not convert object to NumPy datetime

import numpy as np
what_goes_here = 'datetime64[s]' # or 'M8[D]',or..?
e_type = np.dtype([('date',what_goes_here),('value',float)])
i = np.array(e,dtype=e_type)

有没有一种方法可以一步一步实现所有这些目标?如果可以,怎么办?

请不要使用Python 2或Pandas。

这是对Efficient way to convert numpy record array to a list of dictionary的相反转换-加上增加的datetime并发症

szd00789 回答:如何将包含日期字符串的python字典列表强制转换为datetime对象的numpy记录数组?

获取值并将其保存为元组列表,然后将dtype强制转换为datetime64np.float

import numpy as np
e = [{"date": "2019-11-07","value": 3.147},{"date": "2019-11-08","value": 2.7315}]
e = [(d["date"],d["value"]) for d in e]
e = np.rec.array(e,dtype=[('date','datetime64[s]'),('value',np.float)])
print('result: ',e)
print('data type of date: ',type(e.date[0]))

# print result
result:  [('2019-11-07T00:00:00',3.147 ) ('2019-11-08T00:00:00',2.7315)]
data type of date:  <class 'numpy.datetime64'>
,

根据this answer,numpy中日期时间对象的转换在1.11中发生了变化。

使用该链接中的一部分问题,这应该可以为您提供所需的信息(明确指定datetime numpy类型):

import numpy as np

e = [{"date":"2019-11-07","value":3.147},{"date":"2019-11-08","value":2.7315}]
e_type = np.dtype([('date','datetime64[us]'),np.float)])

records = np.array([(x['date'],x['value']) for x in e],dtype=e_type)

# Produces
array([('2019-11-07T00:00:00.000000',3.147 ),('2019-11-08T00:00:00.000000',2.7315)],'<M8[us]'),'<f8')])

>>> records[0][0]
numpy.datetime64('2019-11-07T00:00:00.000000')
本文链接:https://www.f2er.com/3142219.html

大家都在问