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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:25:14