使用sklearn的ColumnTransformer调用OneHotEncoder报不可迭代错误如何解决
报错原因
- scikit-learn中
ColumnTransformer构造方法的第一个transformers参数,必须接收由三元组构成的列表,每个三元组固定格式为(转换器自定义名称、转换器实例、需要处理的列索引/列名)。 - 错误写法中未将转换器配置打包为元组,程序执行时误将
OneHotEncoder实例当作可迭代对象拆分解析配置,因此抛出TypeError: 'OneHotEncoder' object is not iterable异常。
解决方法
将转换器相关的三个配置项用括号包裹为元组即可,修改后的代码如下:
from sklearn.preprocessing import OneHotEncoder from sklearn.compose import ColumnTransformer ct = ColumnTransformer([('Geography', OneHotEncoder(categories='auto'), [1])], remainder='passthrough') df_ = ct.fit_transform(df.values)
如果需要避免多重共线性问题,也可以在初始化OneHotEncoder时添加drop='first'参数,自动丢弃第一列虚拟变量。
内容的提问来源于stack exchange,提问作者jbae42
相关产品推荐
相关产品推荐

