在Pandas DataFrame的apply()中访问DateTime索引的报错解决方法
问题解决方法
错误原因
- 调用
daily_data.apply(func1)时未指定axis,默认按列处理,此时x是close列的Series,x.index是整个DatetimeIndex对象,而get_indexer需要传入单个/多个标量时间值,不是索引对象,导致"unhashable type: 'DatetimeIndex'"错误。 - 函数内变量名写错:
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
相关产品推荐
相关产品推荐

