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
相关产品推荐
相关产品推荐

