DataFrame获取最近非未来DatetimeIndex记录时出现KeyError问题排查咨询
为啥会报这个KeyError?我来给你拆解清楚
首先,你的代码逻辑和需求完全不匹配,再加上时间边界的问题,才导致了报错:
method="backfill"的逻辑反了:get_loc的backfill是用来找第一个比目标时间大或相等的索引,但你要的是最接近且不晚于目标时间的记录,也就是找最后一个比目标时间小或相等的索引,这时候应该用method="pad"(或者等价的"ffill")。- 目标时间晚于所有数据:你的
current_datetime是2021-07-20,但holdings_df里最晚的记录是2021-06-24,根本不存在比2021-07-20晚的索引,backfill找不到匹配项,直接就抛出KeyError了。
两种靠谱的解决办法
办法1:修正get_loc的method参数
把backfill换成pad,就能正确定位到符合要求的索引:
holdings_df.iloc[holdings_df.index.get_loc(pd.to_datetime(current_datetime), method="pad")]["holdings"]
如果目标时间早于所有记录,pad会自动返回第一个索引的位置,不会报错(要是需要单独处理这种情况,可以加个判断)。
办法2:用Pandas专门的asof方法
其实Pandas有个更省心的方法asof(),就是专门干这个“找最近不晚于指定时间的记录”的活,代码更简洁:
holdings_df.asof(pd.to_datetime(current_datetime))["holdings"]
要是目标时间早于所有记录,这个方法会返回NaN,你可以根据需求加个默认值处理。
内容的提问来源于stack exchange,提问作者iuuujkl
相关产品推荐
相关产品推荐

