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

Pandas 2中get_loc无method参数,如何获取最近时间戳索引?

在Pandas 2.x中获取时间索引最近位置的替代方案

推荐方案:使用get_indexer(向量化高效)

Pandas 2.x里,Index.get_indexer()方法仍支持method='nearest'参数,而且是向量化操作,比循环逐个处理效率高很多,直接替换原循环逻辑即可:

# 将时间列表统一转为Datetime类型
tfo_dt = pd.to_datetime(tfo_dates)
# 一次性获取所有目标时间对应的最近索引
indx_time = df.index.get_indexer(tfo_dt, method='nearest').tolist()

备选方案:使用searchsorted手动处理(单值场景)

如果需要逐个处理单个时间戳,可以用searchsorted找到插入位置,再对比前后时间差确定最近索引:

indx_time = []
for time in tfo_dates:
    dt = pd.to_datetime(time)
    pos = df.index.searchsorted(dt)
    # 处理边界情况:目标时间早于所有索引或晚于所有索引
    if pos == 0:
        nearest_pos = 0
    elif pos == len(df.index):
        nearest_pos = len(df.index) - 1
    else:
        # 比较前后索引时间与目标时间的差值
        diff_before = dt - df.index[pos-1]
        diff_after = df.index[pos] - dt
        nearest_pos = pos - 1 if diff_before < diff_after else pos
    indx_time.append(nearest_pos)

补充说明

  • 优先选择get_indexer方案,它内部已经封装了边界处理逻辑,且批量处理的速度远高于循环遍历。
  • 两种方案都能实现Pandas 1.5版本中get_loc(dt, method='nearest')的完全相同效果。

内容的提问来源于stack exchange,提问作者roudan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:02:46