无法填充NumPy datetime64数组

时间:2014-12-14 11:56:31

标签: python arrays datetime numpy

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

import numpy as np
t = np.empty(3,dtype='datetime64')
t

我得到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')

我明白了:

TypeError : Cannot cast numpy timedelta64 scalar from metadata [m] to  according to the rule 'same_kind'

1 个答案:

答案 0 :(得分:9)

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

>>> 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]')

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

>>> 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]')

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

ValueError: Cannot convert a NumPy datetime value other than NaT with generic units

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

这一点在文档中并不明确,但可以从datetime page收集,并在源代码here中注明。