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

Pandas创建DataFrame报形状不匹配ValueError解决方法

报错原因

报错核心是数据维度和列名长度不匹配:

  • 你传入的data数组由过采样后的特征列、标签列横向拼接得到,总共只有2列:其中X是df.columns[3:4]切片取到的1列数据,y维度重构后为1列,拼接后数组形状为(2270, 2)
  • 创建DataFrame时传入的columns参数为df.columns,对应原数据集的4个列名,要求传入数据必须有4列才能完成匹配,列数不一致直接触发报错
  • 存在隐藏逻辑问题:4列数据集的列索引范围是0~3,df.columns[3:4]取到的是索引为3的列,也就是你定义的最后一列标签列,等于X和y取了同一列数据,该问题会直接导致后续模型训练无效,需要优先修正。
修复方案

根据实际使用场景选择对应方案即可:

方案1:仅需用过采样后的特征列+标签列做训练

不需要关联原表其他列的话,直接给DataFrame传入和列数匹配的列名即可,不要使用原表全量列名:

over = RandomOverSampler()
X, y = over.fit_resample(X, y)
data = np.hstack((X, np.reshape(y, (-1,1))))
# 传入和2列数据对应的列名,注意先修正X的列选取逻辑,不要和y取同一列
transformed_df = pd.DataFrame(
    data,
    columns=[df.columns[3], df.columns[-1]] # 替换为实际使用的特征列名、标签列名
)

方案2:需要保留原表其他列(如新闻文本、分类、板块字段)

不要提前只切1列特征做过采样,否则过采样打乱样本顺序后,无法将其他列和采样后的样本正确对齐。正确做法是把所有需要保留的字段都作为特征传入过采样器,采样后直接生成全量DataFrame:

# 第一步:修正列选取逻辑
# 示例:如果最后一列是标签,其余列是需要保留的特征(包含文本列、分类列、数值列)即可用下面的写法
# 如果只需要保留数值特征+标签,就把X改成选取对应的数值列即可
X = df.drop(columns=df.columns[-1]).values
y = df[df.columns[-1]].values

# 第二步:过采样
over = RandomOverSampler()
X_resampled, y_resampled = over.fit_resample(X, y)

# 第三步:生成DataFrame,此时列数和原表一致,可以直接使用原表列名
data = np.hstack((X_resampled, np.reshape(y_resampled, (-1,1))))
transformed_df = pd.DataFrame(data, columns=df.columns)
注意事项
  • 过采样前务必核对列索引,确保特征列和标签列没有重复选取
  • RandomOverSampler支持传入多列特征,采样时会同步打乱所有特征列和标签的顺序,保证样本对应关系不会错乱
  • 如果要做文本分类,建议把新闻文本列也纳入特征传入模型,仅用单一数值列做特征的分类效果会很差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:45:35