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

如何解决sklearn中Extra Trees Regressor传入含列表DataFrame的报错

解决Extra Trees Regressor输入嵌套列表的错误问题

问题根源

scikit-learn的模型要求特征矩阵是二维数值型结构(n_samples × n_features),而你的DataFrame每个单元格是长度为4的列表,属于嵌套序列,模型无法直接解析,因此抛出"setting an array element with a sequence"错误。之前调用tolist()出错是因为你直接对DataFrame对象调用该方法,正确的操作对象是DataFrame的values属性。

两种可行的转换方法

方法一:用Pandas展开嵌套列表

通过applymap将每个单元格的列表转为Series,再重新整理为二维DataFrame:

import pandas as pd
from sklearn.ensemble import ExtraTreesRegressor

# 展开嵌套列表为二维特征矩阵
X_expanded = X.applymap(lambda lst: pd.Series(lst)).stack(level=1).unstack(level=0).T

# 训练模型
model = ExtraTreesRegressor()
model.fit(X_expanded, Y)

方法二:用Numpy扁平化三维数组

先将DataFrame转为三维数组,再reshape为二维数组:

import numpy as np
from sklearn.ensemble import ExtraTreesRegressor

# 转为三维数组(样本数 × 原始列数 × 列表长度)
X_3d = np.array(X.values.tolist())
# 摊平为二维数组(样本数 × 总特征数=27×4)
X_2d = X_3d.reshape(X_3d.shape[0], -1)

# 训练模型
model = ExtraTreesRegressor()
model.fit(X_2d, Y)

验证转换结果

转换后检查特征矩阵的形状:

print(X_expanded.shape)  # 应该输出 (47724, 108)
# 或者
print(X_2d.shape)  # 同样输出 (47724, 108)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:16:25