You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 09:02:29