我正在尝试在所有类型为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%;
}
答案 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))
尝试重现类似的问题。如果数据框的值为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
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)
上每次致电fit
,fit_transform
或transform
时致电c
来解决此问题,例如:
le.fit(data.values.astype(str))