使用ColumnTransformer仅标准化数值特征时报错原因求解
报错含义
这个报错的核心意思是:通过字符串列名指定需要处理的列,仅支持输入为pandas DataFrame类型的场景,你当前传入ColumnTransformer的是numpy数组类型的数据,numpy数组没有columns属性,无法匹配你写的列名字符串,因此触发报错。
错误原因
你在定义特征X的时候,末尾加了.values,这个操作会直接把pandas DataFrame转换成numpy ndarray格式,后续拆分得到的X_train、X_test也都是numpy数组类型,自然无法支持按列名字符串筛选列的操作。
修复方案
有两种常用修复方式:
- 方式一:保留DataFrame格式,定义X的时候去掉末尾的
.values即可
后续拆分得到的X_train、X_test都是DataFrame,原有ColumnTransformer代码不需要修改即可正常运行。# 去掉.values,X保持DataFrame格式 X=concat_df[[ 'satisfaction_level', 'last_evaluation', 'number_project', 'average_monthly_hours', 'time_spent_company', 'work_accident', 'promotion_last_5years', ('IT',), ('RandD',), ('accounting',), ('hr',), ('management',), ('marketing',), ('product_mng',), ('sales',), ('support',), ('technical',), 'oe_salary', 'eval_spent']] y=concat_df["left"].values - 方式二:如果需要保持numpy数组格式,把需要标准化的列换成对应的列索引即可
先数清楚需要标准化的6个列在X的特征列表中的位置索引,比如satisfaction_level是第0位,last_evaluation是第1位,以此类推,将Cols修改为对应索引的列表:
用数值索引指定列的方式对numpy数组也生效,不需要修改其他代码。# 示例索引,你可以根据自己的特征顺序核对调整 Cols = [0,1,2,3,4,18]
内容的提问来源于stack exchange,提问作者cped
相关产品推荐
相关产品推荐

