StandardScaler.fit_transform缩放数据报ValueError如何解决
报错原因
运行标准化代码时触发如下报错:
ValueError: could not convert string to float: 'INLAND'
- 核心原因是
StandardScaler仅支持数值型输入,你读取的数据集里存在取值为INLAND这类字符串的分类特征列,未做编码转换直接传入标准化工具就会触发类型转换错误。
LabelEncoder修复方案
LabelEncoder的作用是将单列的字符串分类值映射为从0开始的连续整数,注意它仅支持一维数组输入,不能直接传入整个DataFrame,需要逐列处理,修正后的可运行代码如下:
import pandas as pd from sklearn.preprocessing import StandardScaler, LabelEncoder # 读取目标数据集 housing_feature_engineered = pd.read_csv("todaytest.csv") # 筛选出所有存储字符串的对象类型列 category_columns = housing_feature_engineered.select_dtypes(include="object").columns # 逐列执行标签编码 encoder = LabelEncoder() for col in category_columns: housing_feature_engineered[col] = encoder.fit_transform(housing_feature_engineered[col]) # 分类特征编码完成后再执行标准化 scaler = StandardScaler() housing_scaled = scaler.fit_transform(housing_feature_engineered) housing_scaled
注意事项
- 使用提示:如果你的分类特征取值没有天然顺序关系(比如
INLAND这类区位标签、品类标签),LabelEncoder生成的整数会人为引入大小关系,可能误导后续模型学习到错误规律,这类场景更建议换用OneHotEncoder做独热编码。 - 编码前建议先检查分类列是否存在缺失值,LabelEncoder无法直接处理空值,需要先对空值做填充或者删除对应行/列再执行编码。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

