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

Python机器学习实践代码报错:tuple无reshape属性,如何解决?

解决OneHotEncoder使用中的reshape报错问题

错误原因

pd.Series.factorize()方法返回的是元组(tuple),包含两个元素:编码后的数值数组、对应的原始类别数组。你直接对这个元组调用reshape,自然会触发tuple没有reshape属性的错误。

修正方案

步骤1:提取编码后的数组

从factorize的返回结果中,只取第一个元素(编码后的数值数组),第二个元素(类别)可以用下划线_接收(表示不需要使用)。

步骤2:调整数组维度

OneHotEncoder要求输入必须是二维数组(格式为(样本数, 特征数)),所以要把一维的编码数组转成二维,用reshape(-1, 1)即可(-1表示自动计算样本数量)。

修正后的完整代码

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

data = pd.read_csv('housing.csv')
housing = data['ocean_proximity']

encoder = OneHotEncoder()
# 提取factorize返回的编码数组,忽略类别信息
housing_cat_fac, _ = housing.factorize()
# 转换为OneHotEncoder要求的二维格式
housing_final = encoder.fit_transform(housing_cat_fac.reshape(-1, 1))

更简洁的替代方案

其实OneHotEncoder可以直接处理字符串类型的分类特征,不需要提前用factorize编码,直接传入二维格式的特征即可:

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

data = pd.read_csv('housing.csv')
housing = data['ocean_proximity']

encoder = OneHotEncoder()
# 直接将Series转为DataFrame(自动变成二维格式)传入
housing_final = encoder.fit_transform(housing.to_frame())

内容的提问来源于stack exchange,提问作者Vahid Agha ahmadi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:09:57