Darts/Pandas日期解析问题:TimeSeries转换时频率属性缺失报错
解决TimeSeries.from_dataframe的freq属性缺失报错问题
问题根源
你的日期是公司自定义工作日,和pandas标准工作日(freq='B')规则不匹配(比如包含公司专属假期/非工作日),导致强制指定标准工作日频率时,系统无法识别日期序列的一致性,触发报错。
解决方案
1. 先排查基础问题
首先确认日期列的有效性:
# 检查是否有重复日期 print(df['Date'].duplicated().any()) # 查看日期间隔分布,确认是否有异常间隔 print(df['Date'].diff().dropna().value_counts()) # 若日期带时区,先统一为无时区格式 df['Date'] = df['Date'].dt.tz_localize(None)
2. 定义公司专属工作日频率
用CustomBusinessDay创建匹配你公司作息的自定义频率:
import pandas as pd from pandas.tseries.offsets import CustomBusinessDay # 替换为你公司的实际假期列表 company_holidays = pd.to_datetime(['2023-01-02', '2023-05-18', '2023-10-06']) # 创建自定义工作日频率 custom_bday = CustomBusinessDay(holidays=company_holidays)
3. 预处理日期序列并生成TimeSeries
有两种方式处理:
方式一:先补全自定义工作日日期再创建序列
# 将日期设为索引 df = df.set_index('Date') # 生成覆盖数据起止日期的完整自定义工作日序列 full_date_range = pd.date_range(start=df.index.min(), end=df.index.max(), freq=custom_bday) # 重新索引,缺失日期用业务逻辑填充(示例用前向填充,可按需调整) df = df.reindex(full_date_range).ffill() # 创建TimeSeries(此时索引已带明确freq属性) series = TimeSeries.from_dataframe(df)
方式二:直接在创建时指定自定义频率并填充
series = TimeSeries.from_dataframe( df, time_col='Date', fill_missing_dates=True, freq=custom_bday )
额外提示
如果公司工作日还有特殊规则(比如每周只工作4天),可以在CustomBusinessDay中进一步指定weekmask参数,例如:
# 示例:仅周一到周四为工作日 custom_bday = CustomBusinessDay(holidays=company_holidays, weekmask='Mon Tue Wed Thu')
内容的提问来源于stack exchange,提问作者Raghu
相关产品推荐
相关产品推荐

