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

时间序列预测多列数据缩放报ValueError: setting an array element with a sequence错误

报错根因

你遇到的ValueError: setting an array element with a序列报错核心原因是输入MinMaxScaler的数据格式不符合要求:

  • 当你新增第三列后,读取的Excel数据为3列结构,raw_values是形状为(n, 3)的二维数组
  • 你当前的difference函数处理多列数据时,会把每一行的差分结果(长度为3的数组)作为单个元素存入列表,再封装为Series,最终得到的supervised_values是嵌套数组结构,每个元素是数组而非标量,Scikit-learn的缩放器不支持这种输入格式
  • 另外你的scale函数存在笔误:最后返回的变量写为test_scale,但实际定义的变量是test_scaled,也会触发运行报错

修复方案

1. 修改差分函数适配多列数据

直接返回二维numpy数组,不要封装为Series,避免产生嵌套结构:

import numpy as np
def difference(dataset, interval=1):
    diff = []
    for i in range(interval, len(dataset)):
        value = dataset[i] - dataset[i - interval]
        diff.append(value)
    # 直接返回numpy二维数组,不封装Series
    return np.array(diff)

2. 修复scale函数的笔误与冗余代码

MinMaxScaler的输入只要求是(样本数, 特征数)的二维标量数组,你当前的reshape操作没有实际作用,可直接删除,同时修正返回变量名:

from sklearn.preprocessing import MinMaxScaler
def scale(train, test):
    scaler = MinMaxScaler(feature_range=(-1, 1))
    scaler = scaler.fit(train)
    train_scaled = scaler.transform(train)
    test_scaled = scaler.transform(test)
    return scaler, train_scaled, test_scaled

3. 可选:读取数据时移除squeeze参数(适配多列场景)

squeeze=True会在数据只有一列时自动转为Series,多列场景下保留默认值即可,避免格式异常:

import pandas as pd
series = pd.read_excel('amx.xlsx', header=0, parse_dates=[0], index_col=0)

修改完成后重新运行即可正常完成多列数据的缩放操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:06:03