python - 立即在所有列上运行 sklearn labelencoder

标签 python pandas scikit-learn

Image of ull error

我正在尝试在对象类型的所有列上运行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))

尝试重现类似的问题。如果数据帧的值为 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适合或之前可能会解决问题:

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/

相关文章:

python - 在 Python 3 中是否有将汉字转换为日文 (kanji) 或韩文 (hanja) 的模块?

python - 时间序列线性测试

Python/Matplotlib 子图 - 堆积条形图 - 为类别设置固定颜色

python - 输入长度不匹配 scikit

python - PCA:结果矩阵 n-1 行

python - 使用 python xlrd 从 Excel 单元格获取公式

python - 石头、剪刀、布 - Python

python - secondary_y=True 改变 pandas 中的 x 轴

python - 定义用于更改列值和创建新数据集的函数

python - 如何使用 StackingClassifier + Logistic Regression(二元分类)查找系数的特征名称