当尝试将 numpy 对象与另一种类型的对象进行比较时,numpy 将尝试进行转换。在这里,目标是一个不属于 numpy 的 Python 对象,因此 numpy 会将 numpy 日期转换为 Python 对象。人们会期望生成的 Python 对象是 a datetime.datetime
,但由于它不支持纳秒,numpy 将其转换为 a int
。
请参阅 numpy 代码的相关部分。
https://github.com/numpy/numpy/blob/608329acac78b98e9c1044dca23a4f287d639b24/numpy/core/src/multiarray/datetime.c#L2847
例如,您可以尝试:
>>> np.array(['2009-05-01T00:00:00.000000000'], dtype='datetime64[ns]').tolist()
[1241136000000000000]
Pythonint
无法与 进行比较datetime.datetime
,因此出现错误。
但是,如果 numpy 日期时间可以表示为 a datetime.datetime
(如果其精度高于微秒并且在有效日期时间范围内),它将被转换为 adatetime.datetime
而不是 a int
。尝试例如:
>>> np.array(['2009-05-01T00:00:00.000000000'], dtype='datetime64[us]').tolist()
[datetime.datetime(2009, 5, 1, 0, 0)]
因此,要使您的示例正常工作,您只需将dtype
from更改datetime64[ns]
为datetime64[us]
,它的行为就应该符合您的预期。
请注意,此行为与数组无关。
>>> np.datetime64('2009-05-01T00:00:00.000000000', 'ns') > dt.datetime(2001, 1, 1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'int' and 'datetime.datetime'
>>> np.datetime64('2009-05-01T00:00:00.000000000', 'us') > dt.datetime(2001, 1, 1)
True