使用`np.datetime64`对象填充空的Numpy数组时出错

时间:2019-05-30 12:21:03

标签: python numpy datetime

我一直对Python的标准库datetime对象和Numpy的datetime对象之间的交互感到困惑。以下代码给出了一个错误,使我感到困惑。

from datetime import datetime
import numpy as np

b = np.empty((1,), dtype=np.datetime64)
now = datetime.now()
b[0] = np.datetime64(now)

这会出现以下错误:

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

我在这里做什么错了?

1 个答案:

答案 0 :(得分:3)

np.datetime64是一个类,而np.dtype('datetime64[us]')是NumPy dtype:

import numpy as np
print(type(np.datetime64))
# <class 'type'>

print(type(np.dtype('datetime64[us]')))
# <class 'numpy.dtype'>

使用NumPy dtype而非类指定b的dtype:

from datetime import datetime
import numpy as np

b = np.empty((1,), dtype='datetime64[us]')  
# b = np.empty((1,), dtype=np.dtype('datetime64[us]'))  # also works
now = datetime.now()
b[0] = np.datetime64(now)
print(b)
# ['2019-05-30T08:55:43.111008']

请注意,datetime64[us]只是许多可能的dtypes之一。对于 例如datetime64[ns]datetime64[ms]datetime64[s]datetime64[D]datetime64[Y] dtypes,取决于所需的时间 分辨率。

datetime.dateitem.now()返回具有微秒分辨率的日期时间, 所以我选择datetime64[us]进行匹配。