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

使用pandas get_indexer找最近日期触发TypeError类型比较错误

解决TypeError: Cannot compare dtypes int64 and datetime64[ns]问题

错误原因

你调用df.index.get_indexer()时,操作的是DataFrame的默认整数索引(dtype=int64),但传入的是datetime64[ns]类型的目标时间,两种类型无法直接比较,因此抛出类型不匹配错误。问题核心是你搞错了操作对象——datetime数据存储在DataFrame的列中,而非索引上。

解决方案

方案1:将datetime列设为索引后查找

把存储datetime数据的列转为DatetimeIndex,再使用get_indexer方法:

import pandas as pd

# 假设你的datetime列名为'datetime',先确保列是datetime类型
df['datetime'] = pd.to_datetime(df['datetime'])
# 将该列设置为DataFrame的索引
df = df.set_index('datetime')

# 现在可以正常调用get_indexer查找最近值
target_time = pd.to_datetime('2019-04-09 17:01:00')
result = df.index.get_indexer([target_time], method='nearest')
# result会返回目标时间对应的索引位置,这里结果是[16],对应2019-04-09 17:00:00

方案2:不修改索引,直接对datetime列计算最近值

如果不想改动原有索引,可通过计算时间差的绝对值找到最近的记录:

import pandas as pd

target_time = pd.to_datetime('2019-04-09 17:01:00')
# 计算每条记录与目标时间的时间差绝对值,取最小的索引
nearest_idx = (df['datetime'] - target_time).abs().idxmin()
# 获取对应的最近时间
nearest_time = df.loc[nearest_idx, 'datetime']
# nearest_time结果为2019-04-09 17:00:00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:58:20