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

Pandas DataFrame列子集化后列维度丢失问题求助

解决Pima Indians数据集子集化后维度丢失的问题

看起来你是把特征和标签的子集搞反了,还踩了Pandas单列索引返回一维结构的小坑——这是新手用Pandas处理机器学习数据时很常见的问题,我来帮你理清楚:

问题根源分析

你提到子集化前8列后X.shape是(768,),反而Y.shape是(768,8),这说明你大概率搞反了X和Y的赋值逻辑:

  • 当你执行X = pima.iloc[:,-1].values时,你取的是最后一列(也就是标签列),而非前8列特征,所以X变成了一维数组(768,)
  • 而你可能误把前8列赋值给了Y,导致Y是二维的(768,8)

另外,Pandas的iloc在取单个列时(比如iloc[:, -1]),返回的是Series对象,转成numpy数组后就是一维结构;只有取多个列时(比如iloc[:, :8]),才会返回DataFrame,转成数组后是二维的(样本数, 特征数),这才是大多数机器学习模型fit方法要求的特征矩阵格式。

正确的代码实现

下面是正确的子集化步骤,保证X和Y的维度符合模型要求:

import pandas as pd

# 读取数据集
pima = pd.read_csv('你的数据集路径.csv')
print(pima.shape)  # 输出 (768, 9),符合预期

# 提取前8列作为特征矩阵X(二维,shape=(768, 8))
X = pima.iloc[:, :8].values

# 提取最后一列作为标签Y(一维,shape=(768,),大多数模型接受这种格式)
Y = pima.iloc[:, -1].values

# 如果你的模型要求Y是二维数组(比如某些深度学习框架),可以这样写:
# Y = pima.iloc[:, -1:].values  # shape=(768, 1)

验证维度

运行完上面的代码后,你可以打印维度确认:

print(X.shape)  # 输出 (768, 8)
print(Y.shape)  # 输出 (768,) 或 (768, 1)

这样再调用模型的fit(X, Y)方法就不会因为维度问题报错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:11:39