今天在用OneHotEncoder进行数据预处理阶段的类别变量转换时,突然报错:

咦?怎么回事。。。明明掌柜看官方文档说的是可以对类别(字符串)变量进行转换的:

而且示例也是可以的:

怎么到掌柜这里就不行了???掌柜再三确认自己没有写错代码啊,这是怎么回事?

于是掌柜就左翻右翻各种资料,发现都说OneHotEncoder确实是可以对类别变量进行转换的,那这里就没用错。就在掌柜以为又要被困在bug中的时候😂,突然晃了一眼刚刚官方文档那里,发现这里有一排斜体的小字:在0.20版本修改过。。。

所以是不是意味着之前sklearn版本的OneHotEncoder方法是不能直接转换字符串变量的???

马上翻到sklearn的0.19版本的官方文档同样位置一看:

奶奶的,果真是这样:
0.19版本的OneHotEncoder方法要求输入的变量应该是整数的矩阵!!!
掌柜又去查看自己的sklearn版本:

这下没跑了,报错的原因找到了:就是掌柜的sklearn版本太低!!!才会导致类别变量(字符串变量)没法进行转换。。。

那么解决的办法就很简单:

  • 第一种👉:升级sklearn到最新的0.23.1版本即可!(推荐)
  • 第二种👇:
    假如你怕因为升级包导致各种版本冲突,到时候又要去解决其他bug的情况出现,所以想继续用0.19版的sklearn。那么就先用LabelEncoder把字符串变量转换成数值型变量,然后再用OneHotEncoder进行编码,像下面这样:

    也同样可以解决0.19版OneHotEncoder不能处理字符串变量的问题。(也许你会疑问:为什么不直接用LabelEncoder转换就好?掌柜这里先留个悬念,后面再做解答🧐)

参考资料:
sklearn的官方文档0.23.1版本
sklearn的官方文档0.19.2版本