使用DARTS创建时间序列对象时遇缺失日期报错求助
解决Darts TimeSeries.from_dataframe的日期频率验证错误
错误原因
即使设置了fill_missing_dates=False,当指定freq='B'时,Darts仍会校验所有输入日期是否属于该频率定义的时间点集合。'B'默认对应美国标准工作日,如果你的股票数据包含其他地区的工作日(比如中国、欧洲等,节假日与美国不同),或者数据中存在不符合该频率的日期(比如误录入的周末日期),就会触发此错误。
分步解决方案
1. 先验证数据中的日期合法性
首先检查数据里是否存在非工作日或不符合目标频率的日期:
import pandas as pd # 标记每个日期是否为周一至周五的工作日 target_pivot['is_weekday'] = target_pivot['date'].dt.weekday < 5 # 筛选出异常日期 invalid_dates = target_pivot[~target_pivot['is_weekday']]['date'] print("异常日期列表:", invalid_dates.tolist())
如果输出非空,需要清理这些异常日期后再继续。
2. 方案一:移除freq参数,让Darts自动推断频率
如果确认所有日期都是合法工作日,但和默认'B'的节假日规则不匹配,可以直接不指定freq,让Darts根据现有日期自动推断:
target_ts = TimeSeries.from_dataframe( target_pivot, time_col='date', value_cols=target_pivot.columns[1:].tolist(), fill_missing_dates=False, fillna_value=0, static_covariates=['static_covariate'], hierarchy=None )
3. 方案二:自定义匹配你数据的工作日频率
如果需要明确指定频率(比如适配中国/欧洲的节假日),可以自定义CustomBusinessDay:
from pandas.tseries.offsets import CustomBusinessDay from pandas.tseries.holiday import AbstractHolidayCalendar, Holiday, nearest_workday # 示例:自定义中国工作日日历(需根据实际年份补充完整节假日规则) class LocalHolidayCalendar(AbstractHolidayCalendar): rules = [ Holiday('元旦', month=1, day=1, observance=nearest_workday), Holiday('春节', month=2, day=10, observance=nearest_workday), # 2024年示例 Holiday('五一劳动节', month=5, day=1, observance=nearest_workday), # 其他节假日... ] # 创建自定义工作日频率 local_bd = CustomBusinessDay(calendar=LocalHolidayCalendar()) # 使用自定义频率创建TimeSeries target_ts = TimeSeries.from_dataframe( target_pivot, time_col='date', value_cols=target_pivot.columns[1:].tolist(), fill_missing_dates=False, freq=local_bd, fillna_value=0, static_covariates=['static_covariate'], hierarchy=None )
4. 方案三:绕过DataFrame直接用时间和值创建
如果上述方法仍有问题,可以先提取时间序列的时间点和数值,直接用from_times_and_values创建:
# 将date设为索引 target_pivot.set_index('date', inplace=True) # 提取时间点和对应数值 times = target_pivot.index values = target_pivot.values # 创建TimeSeries对象 target_ts = TimeSeries.from_times_and_values( times=times, values=values, fill_missing_dates=False, static_covariates=['static_covariate'], hierarchy=None )
内容的提问来源于stack exchange,提问作者Rick Hamilton
相关产品推荐
相关产品推荐

