运行sklearns一次标记所有列上的编码器

时间:2018-04-22 16:52:25

标签: python pandas scikit-learn

Image of ull error

我正在尝试在所有类型为object的列上运行TypeError: '<' not supported between instances of 'int' and 'str' 。这是我写的代码,但它抛出了这个错误:

le=LabelEncoder()
for col in X_test.columns.values:
    if X_test[col].dtypes=='object':
        data=X_train[col].append(X_test[col])
        le.fit(data.values)
        X_train[col]=le.transform(X_train[col])
        X_test[col]=le.transform(X_test[col])

有人知道如何解决这个问题吗?

.back{
  padding: 2%;
  background: #10314c;
}

.searchicon {
   float: left;
   margin-top: -20px;
   position: relative;
   top: 35px;
   left: 25px;
   color: white;
   z-index: 2;
   }

.extand {
    width: 10%;
    height:45px;
    box-sizing: border-box;
    border: 2px solid #ccc;
    border-radius: 4px;
    font-size: 16px;
    background: #10314c;
    background-position: 10px 10px;
    background-repeat: no-repeat;
    -webkit-transition: width 0.4s ease-in-out;
    transition: width 0.4s ease-in-out;
    padding: 12px 20px 12px 45px; 
    color: white;
}

.extand:hover{
    cursor:pointer;
}

.extand:focus {
    width: 100%;
}

2 个答案:

答案 0 :(得分:3)

在追加时看起来有不同的类型。您尝试使用fit方法将所有内容转换为str

le.fit(data.values.astype(str))

您必须将str的数据类型更改为transform,因为LabelEncoder中的类将为str

X_train[col]=le.transform(X_train[col].astype(str))
X_test[col]=le.transform(X_test[col].astype(str))

尝试重现类似的问题。如果数据框的值为intstr

import pandas as pd
df = pd.DataFrame({'col1':["tokyo", 1 , "paris"]})
print(df)

结果:

    col1
0  tokyo
1      1
2  paris

现在,使用Labelenconder会出现类似的错误消息,即TypeError: unorderable types: int() < str()

from sklearn import preprocessing

le = preprocessing.LabelEncoder()
le.fit(df.col1.values)

将所有内容转换为str in fit或之前可以解决问题:

from sklearn import preprocessing

le = preprocessing.LabelEncoder()
le.fit(df.col1.values.astype(str))
print(le.classes_)

结果:

['1' 'paris' 'tokyo']

如果您只是致电le.transform(df.col1),则会再次发出类似错误。

所以,它必须是le.transform(df.col1.astype(str))

答案 1 :(得分:2)

错误基本上是告诉你确切的问题:一些值是字符串而另一些则不是。您可以在系列c.astype(str)上每次致电fitfit_transformtransform时致电c来解决此问题,例如:

le.fit(data.values.astype(str))