我正在尝试创建一个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'
答案 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中注明。