使用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
相关产品推荐
相关产品推荐

