我试图用来isin()
过滤我的df中的日期时间列。发现以下奇怪行为:
让我们定义一个具有唯一日期值的数据框:
>>>from datetime import datetime
>>>date = datetime.fromisoformat('2011-11-04')
>>>df = pd.DataFrame({'date': [date]})
>>>print(df)
date
0 2011-11-04
我们将日期范围设置为 2 天:
>>>date_rg = pd.date_range(end='2011-11-04', periods=2)
日期预计在以下范围内:
>>>date in date_rg
True
但是,如果我们使用isin()
,就会发生奇怪的事情!
>>>df.date.dt.date.isin(date_rg)
0 False
Name: date, dtype: bool
通过进一步调查,我发现了更奇怪的行为:
>>>for i in range(1,10):
>>> date_rg = pd.date_range(end='2011-11-04', periods=i)
>>> print('i =', i)
>>> print(df.date.dt.date.isin(date_rg))
i = 1
0 False
Name: date, dtype: bool
i = 2
0 False
Name: date, dtype: bool
i = 3
0 True
Name: date, dtype: bool
i = 4
0 False
Name: date, dtype: bool
i = 5
0 True
Name: date, dtype: bool
i = 6
0 True
Name: date, dtype: bool
i = 7
0 True
Name: date, dtype: bool
i = 8
0 True
Name: date, dtype: bool
i = 9
0 True
Name: date, dtype: bool
只有当 period = 1、2 和 4 天时,它才会返回 False!
我强烈怀疑这是 Pandas lib 的错误。我正在pandas:1.0.5
使用numpy:1.19.0
.
顺便说一句,我们可以使用以下方法对其进行轮廓化date_range.date
:
>>>df.date.dt.date.isin(date_rg.date)
0 True
Name: date, dtype: bool