无法使用`fromiter()`从Python`datetime`对象的可迭代对象转换为Numpy`datetime64`对象的数组。错误?

问题描述 投票:0回答:1

我正在使用Python 3.6.2。

我从this question学到了如何在标准的datetime类型和np.datetime64类型之间进行转换,如下所示。

dt = datetime.now()
print(dt)
print(np.datetime64(dt))

输出:

2017-12-19 17:20:12.743969
2017-12-19T17:20:12.743969

但我无法将可迭代的标准datetime对象转换为Numpy数组。以下代码......

np.fromiter([dt], dtype=np.datetime64)

...给出以下错误。

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-46e4618bda89> in <module>()
----> 1 np.fromiter([dt], dtype=np.datetime64)

TypeError: Cannot cast datetime.datetime object from metadata [us] to  according to the rule 'same_kind'

但是,使用np.asarray()的作品。

np.asarray([dt])

输出:

array([datetime.datetime(2017, 12, 19, 17, 20, 12, 743969)], dtype=object)

这可能是np.fromiter()np.datetime64的错误?

python-3.x numpy datetime
1个回答
1
投票

这可能只是设置日期时间单位:

In [368]: dt = datetime.now()
In [369]: dt
Out[369]: datetime.datetime(2017, 12, 19, 12, 48, 45, 143287)

np.array的默认操作(不需要带列表的fromiter)是创建一个对象dtype数组:

In [370]: np.array([dt,dt])
Out[370]: 
array([datetime.datetime(2017, 12, 19, 12, 48, 45, 143287),
       datetime.datetime(2017, 12, 19, 12, 48, 45, 143287)], dtype=object)

看起来简单的'datetime64'会产生天数:

In [371]: np.array([dt,dt], dtype='datetime64')
Out[371]: array(['2017-12-19', '2017-12-19'], dtype='datetime64[D]')

并指定单位:

In [373]: np.array([dt,dt], dtype='datetime64[m]')
Out[373]: array(['2017-12-19T12:48', '2017-12-19T12:48'], dtype='datetime64[m]')

这也适用于fromiter

In [374]: np.fromiter([dt,dt], dtype='datetime64[m]')
Out[374]: array(['2017-12-19T12:48', '2017-12-19T12:48'], dtype='datetime64[m]')
In [384]: x= np.fromiter([dt,dt], dtype='M8[us]')
In [385]: x
Out[385]: array(['2017-12-19T12:48:45.143287', '2017-12-19T12:48:45.143287'], dtype='datetime64[us]')

我已经学会了使用datetime64的字符串名称,这允许我指定单位,而不是最通用的np.datetime64

© www.soinside.com 2019 - 2024. All rights reserved.