我一直对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'
我在这里做什么错了?
答案 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]
进行匹配。