无法填充NumPy datetime64数组

cal*_*loo 10 python arrays datetime numpy

我正在尝试创建一个NumPy数组,该数组随后会被某些日期时间值填充.我似乎无法使其发挥作用.

import numpy as np
t = np.empty(3,dtype='datetime64')
t
Run Code Online (Sandbox Code Playgroud)

我得到了TypeError: Invalid datetime unit "generic" in metadata.
如果我尝试相同:

import numpy as np
t = np.empty(3,dtype='datetime64')
t[0] = np.datetime64('2014-12-12 20:20:20')
Run Code Online (Sandbox Code Playgroud)

我明白了:

TypeError : Cannot cast numpy timedelta64 scalar from metadata [m] to  according to the rule 'same_kind'
Run Code Online (Sandbox Code Playgroud)

Ale*_*ley 10

如果在创建数组时也指定了时间单位参数,它应该可以工作.例如:

>>> t = np.empty(3, dtype='datetime64[s]')
>>> t
array(['1970-01-01T00:00:00+0000', '1970-01-01T00:00:00+0000',
       '1970-01-01T00:00:00+0000'], dtype='datetime64[s]')
Run Code Online (Sandbox Code Playgroud)

然后您还可以根据需要分配值:

>>> t[0] = np.datetime64('2014-12-12 20:20:20')
>>> t
array(['2014-12-12T20:20:20+0000', '1970-01-01T00:00:00+0000',
       '1970-01-01T00:00:00+0000'], dtype='datetime64[s]')
Run Code Online (Sandbox Code Playgroud)

NumPy不允许表示具有通用单位(即没有单位)的日期时间.创建t没有unit参数的数组,然后尝试访问第一个元素t[0]将引发此错误:

ValueError: Cannot convert a NumPy datetime value other than NaT with generic units
Run Code Online (Sandbox Code Playgroud)

在这里,NumPy无法推断出日期时间的表示应该具有哪些单位.考虑到日历月份和年份的不同长度,猜测可能会导致错误的值.

这一点在文档中并不十分明确,但可以从日期时间页面中收集,并在此处的源代码中注明.