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

Pandas 1.5.3中Index.get_indexer无法替代index.get_loc的问题

问题:Pandas 1.5.3中用get_indexer替代get_loc报错的原因及解决方法

此前使用Pandas 1.4之前的版本,升级至1.5.3后收到大量index.get_loc的弃用提示,改用index.get_indexer却报错:'datetime.datetime' object is not iterable。

代码以时间戳为索引,使用get_loc时传入单个datetime对象即可获取索引位置,但get_indexer执行失败。示例代码如下:

from datetime import datetime, timedelta

import pandas as pd
import numpy as np
expiration_date = datetime(2016,3,24,16,00,0)
num_minutes = 50000
date_list = [expiration_date - timedelta(minutes=x) for x in range(num_minutes)]
df = pd.DataFrame(index = date_list)
searchDate = date_list[10]
idx_get_loc = df.index.get_loc(searchDate, method='nearest')
print(f'Closes index using get_loc: {idx_get_loc}')
idx_get_indexer = df.index.get_indexer(searchDate, method='nearest')  
print(f'Closes index using get_indexer: {idx_get_indexer}')
解决方法

核心问题是**get_indexer和get_loc的参数要求不同**:

  • get_loc接收单个标签(比如单个datetime对象),返回该标签对应的单个索引位置;
  • get_indexer要求传入可迭代的标签序列(比如列表、数组),返回对应每个标签的索引位置数组。

你直接传入单个datetime对象,它不属于可迭代类型,因此触发了报错。

修改代码只需把单个searchDate包装进列表即可:

# 将单个datetime对象放入列表中传入
idx_get_indexer = df.index.get_indexer([searchDate], method='nearest')  
print(f'Closest index using get_indexer: {idx_get_indexer[0]}')

执行后会返回一个数组,取数组第一个元素就能得到和get_loc一致的单个索引位置。

如果需要批量查询多个日期,直接把所有待查日期放进列表传入get_indexer即可,它会返回每个日期对应的索引位置数组——这也是get_indexer相比get_loc的核心优势:支持批量标签查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:42:38