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

在Pandas DataFrame的apply()中访问DateTime索引的报错解决方法

问题解决方法

错误原因

  1. 调用daily_data.apply(func1)时未指定axis,默认按列处理,此时x是close列的Series,x.index是整个DatetimeIndex对象,而get_indexer需要传入单个/多个标量时间值,不是索引对象,导致"unhashable type: 'DatetimeIndex'"错误。
  2. 函数内变量名写错:data_weekly应为weekly_data。

方案1:修正apply用法(逐行处理)

指定axis=1按行处理,此时每行Series的name就是当前行的Date索引值,直接传入get_indexer即可:

import pandas as pd

def func1(x):
    # x.name 是当前行的Date索引值
    weekly_index = weekly_data.index.get_indexer([pd.to_datetime(x.name)], method='pad')
    return weekly_index[0]

daily_data['weekly_index'] = daily_data.apply(func1, axis=1)

方案2:向量化处理(推荐,效率更高)

直接对daily_data的整个索引批量处理,避免逐行apply的性能损耗:

# 批量获取每日日期对应的周数据iloc索引
daily_data['weekly_index'] = weekly_data.index.get_indexer(daily_data.index, method='pad')

验证说明

两种方法均可实现:对每日数据的日期,匹配weekly_data中最近的(不晚于该日期)周数据,并返回其iloc索引。比如2022-05-03会匹配2022-05-02的周数据,返回索引0;2022-05-09匹配自身,返回索引1,以此类推。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:25:09