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
的一个元素,而这个元素是in
d2
,但是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]
我有一个包含 datetime
个对象的数组 d1
。我想检查它的每个元素是否存在于 datetime
个对象 d2
.[= 的一系列(numpy
数组、pandas
系列或其他)中25=]
d1
的一个元素等于d2
的一个元素,而这个元素是in
d2
,但是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]