时间序列预测多列数据缩放报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
相关产品推荐
相关产品推荐

