我正在尝试在对象类型的所有列上运行LabelEncoder
。这是我编写的代码,但它引发了此错误:
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])
最佳答案
看起来附加时它有不同的类型。您尝试全部转换为 str
拟合方法:
le.fit(data.values.astype(str))
并且您必须将数据类型更改为 str
对于 transform
以及自LabelEncoder
中的类(class)以来将是str
:
X_train[col]=le.transform(X_train[col].astype(str))
X_test[col]=le.transform(X_test[col].astype(str))
尝试重现类似的问题。如果数据帧的值为 int
和str
:
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
适合或之前可能会解决问题:
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))
相反。
关于python - 立即在所有列上运行 sklearn labelencoder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49968432/