Timestamp索引下datetime类型查找失效问题咨询
pandas中DatetimeIndex与datetime.date对象索引查找的疑问
1. 构造object类型索引的DataFrame
先创建一个以datetime.date对象为索引的DataFrame df0,其索引类型为object:
import datetime import pandas as pd d0 = datetime.date(2024, 5, 5) d1 = datetime.date(2024, 5, 10) df0 = pd.DataFrame({"a": [1, 2], "b": [10, None], "c": list("xy")}, index=[d0, d1]) print(df0.index) # 输出:Index([2024-05-05, 2024-05-10], dtype='object')
此时用date对象df0.loc[d0]可以正常获取数据,但用字符串df0.loc[str(d0)]或pd.Timestamp(d0)会触发KeyError,这个表现符合预期——因为object索引要求精确匹配类型。
2. 转为DatetimeIndex后的索引查找问题
将df0重新索引为DatetimeIndex类型得到df1:
df1 = df0.reindex(pd.date_range(d0, d1)) print(df1.index) # 输出:DatetimeIndex(['2024-05-05', '2024-05-06', '2024-05-07', '2024-05-08', # '2024-05-09', '2024-05-10'], # dtype='datetime64[ns]', freq='D')
df1的索引类型为datetime64[ns],此时用pd.Timestamp(d0)和字符串df1.loc[str(d0)]都能正常查找数据,但用date对象df1.loc[d0]却触发KeyError。
疑问解答
这个现象属于已知问题,对应的GitHub issue已提交。从pandas的设计逻辑来说,DatetimeIndex本应支持通过datetime.date对象进行索引查找(自动转换为对应的Timestamp),但当前版本中存在这一匹配失败的情况,属于待确认修复的bug。
内容的提问来源于stack exchange,提问作者sds
相关产品推荐
相关产品推荐

