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

Darts转换DatetimeIndex DataFrame为Series索引变object解决方法

问题背景

存储逐小时温度测量数据的DataFrame结构如下:

df.info()

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 17545 entries, 2020-01-01 00:00:00+00:00 to 2022-01-01 00:00:00+00:00
Data columns (total 1 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   T (degC)  17545 non-null  float64
dtypes: float64(1)
memory usage: 274.1 KB

使用如下代码将DataFrame转换为Darts的TimeSeries对象:

df_series = TimeSeries.from_dataframe(df)
df_series

转换后无法执行绘图操作,抛出如下类型错误:

TypeError: Plotting requires coordinates to be numeric, boolean, or dates of type numpy.datetime64, datetime.datetime, cftime.datetime or pandas.Interval. Received data of type object instead.

根据Darts官方文档说明,未指定time_col参数时会直接使用DataFrame原有的DatetimeIndex转换,但实际转换后时间索引变为object类型,导致绘图失败。

故障原因

核心诱因是DataFrame的DatetimeIndex携带了时区标记:从df.info()输出可见,索引时间末尾带+00:00的UTC时区偏移,属于时区感知型时间索引。Darts的from_dataframe()方法默认不会自动剥离时区信息,转换后内部时间坐标会被识别为object类型,不符合绘图接口要求的合法时间数据类型,因此抛出类型错误。

修复方案

方案1:转换前移除索引时区(推荐)

在生成TimeSeries前,先将DataFrame索引转为无时区的datetime64类型,代码如下:

# 移除索引时区,转换为原生datetime64格式
df.index = df.index.tz_localize(None)
# 执行转换
df_series = TimeSeries.from_dataframe(df)

转换完成后即可正常调用绘图方法,不会再触发类型错误。

方案2:转换时显式指定时间频率,强制标准化时间索引

如果需要保留原始时区信息,可以在转换时开启缺失日期填充参数,同时显式指定数据采样频率,强制Darts对时间索引做标准化解析:

df_series = TimeSeries.from_dataframe(
    df,
    fill_missing_dates=True,
    freq="h"
)

注意:如果数据不是小时级采样,需要将freq参数替换为实际采样频率,例如日频数据传入"D"、15分钟间隔数据传入"15min"即可。

转换完成后可执行print(df_series.time_index.dtype)验证,输出为datetime64[ns]即代表时间类型符合要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:33:24