Numpy.isin 没有检测到日期时间在 datetime64[ns] 元素的向量中的存在,而平等有效

Numpy.isin not detecting presence of a datetime in a vector of datetime64[ns] elements, while equality works

我有一个包含 datetime 个对象的数组 d1。我想检查它的每个元素是否存在于 datetime 个对象 d2.[= 的一系列(numpy 数组、pandas 系列或其他)中25=]

d1的一个元素等于d2的一个元素,而这个元素是ind2,但是numpy.isin在这里不起作用.我错过了什么?

如果要进行任何操作,我希望在 d2 上进行(d1 最好保持不变)。

import numpy as np
import datetime
import pandas as pd

d1 = np.array([datetime.datetime(2021, 1, 1, 0, 0),
               datetime.datetime(2021, 1, 1, 12, 0)])
d2 = pd.to_datetime(['2021-01-01 12:00:00', '2021-01-02 12:00:00'])
print(d1)
# [datetime.datetime(2021, 1, 1, 0, 0) datetime.datetime(2021, 1, 1, 12, 0)]
print(d2)
# DatetimeIndex(['2021-01-01 12:00:00', '2021-01-02 12:00:00'], 
#               dtype='datetime64[ns]', freq=None)


print(d1[1] == d2[0])
# True
print(d1[1] in d2)
# True
print(np.isin(d1, d2))
# [False False] # !!! What is happening here?
# Expected result:
# [False True]

对我来说 pandas 解决方案比较 DatetimeIndex by Index.isin:

print(pd.DatetimeIndex(d1).isin(d2))
[False  True]

就像提到的@juanpa.arrivillaga,为了工作 np.isin 需要相同的类型,所以将 d1 转换为日期时间然后比较

print(d1.astype('datetime64[us]'))
#another way of converting
print(d1.astype('<M8[ns]'
['2021-01-01T00:00:00.000000' '2021-01-01T12:00:00.000000']

print (np.isin(d1.astype('datetime64[us]'), d2))
[False  True]

print (np.isin(d1.astype('<M8[ns]'), d2))
[False  True]