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

在Jupyter中使用Pandas与GluonTS时遇类型错误的求助

问题分析与解决方案

核心错误原因

你遇到的TypeError: cannot infer freq from a non-convertible index type <class 'pandas.core.indexes.numeric.Int64Index'>,本质是GluonTS的PandasDataset要求输入的DataFrame是时间序列格式——它需要基于时间的索引(DatetimeIndex),或者明确指定时间戳列和时间频率参数,否则无法自动推断时间序列的频率,进而抛出错误。

另外你的代码还有两个小问题:

  • 变量名笔误:dataset = PandasDataset(df2)中df2未定义,应该是筛选后的df
  • 读取CSV时的DtypeWarning:是因为第2列存在混合数据类型,需要在读取时指定类型或关闭低内存检查

修复步骤与完整代码

1. 读取CSV并处理时间列

全球城市温度数据集通常包含Year、Month、Day这类拆分的时间字段,需要先将它们合并为一个完整的时间戳列,再设置为DataFrame的索引(或者明确告诉PandasDataset哪一列是时间戳)。

2. 筛选目标城市数据

正确筛选City为Algiers的行。

3. 正确初始化PandasDataset

可以通过两种方式:

  • 方式一:将时间列设置为DataFrame的DatetimeIndex,让PandasDataset自动推断频率
  • 方式二:保留原索引,显式指定timestamp参数(时间列名)和freq参数(时间频率,比如每日频率D)

以下是完整修复后的代码:

import pandas as pd
import matplotlib.pyplot as plt
import scipy

from gluonts.dataset.pandas import PandasDataset
from gluonts.dataset.split import split
from gluonts.torch import DeepAREstimator

# 1. 读取CSV,处理时间列,修复类型警告
df = pd.read_csv(
    "city_temperature.csv",
    low_memory=False,  # 关闭低内存检查,解决DtypeWarning
    dtype={"Column2": str}  # 如果知道第2列的类型,也可以指定,比如字符串类型
)

# 合并年、月、日为时间戳列,注意数据集可能有无效日期(比如2月30日),需要errors='coerce'转为NaT
df['timestamp'] = pd.to_datetime(
    df[['Year', 'Month', 'Day']].astype(str).agg('-'.join, axis=1),
    errors='coerce'
)
# 移除无效时间的行
df = df.dropna(subset=['timestamp'])

# 2. 筛选Algiers的数据
df = df[df["City"] == "Algiers"]

# 3. 方式一:设置时间列为索引,初始化PandasDataset
df = df.set_index('timestamp')
dataset = PandasDataset(df, target='Temperature')  # 指定目标列(温度列,根据你的数据集列名调整)

# 或者方式二:不设置索引,显式指定timestamp和freq参数
# dataset = PandasDataset(df, target='Temperature', timestamp='timestamp', freq='D')

# 后续的拆分、训练代码可以正常执行
training_data, test_gen = split(df, offset=-36)
test_data = test_gen.generate_instances(prediction_length=12, windows=3)

关键说明

  • PandasDataset的核心是用于时间序列预测,因此必须明确时间维度:要么索引是时间类型,要么通过timestamp参数指定时间列,同时freq参数需要和你的数据频率匹配(比如每日数据用D,每月用M)
  • 处理无效日期时,pd.to_datetime的errors='coerce'会把无效日期转为NaT,后续用dropna移除这些行,避免影响后续处理
  • 关于target参数:需要指定你要预测的列名(比如温度列,通常数据集里是Temperature,请根据你的实际列名调整)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:45:14