在for循环中使用Sklearn的LabelEncoder错误
LabelEncoder error using Sklearn in a for loop
我正在 运行ning Python 3 使用 spyder 2,当我尝试 运行 此代码时:
from sklearn.preprocessing import LabelEncoder
cv=train.dtypes.loc[train.dtypes=='object'].index
print (cv)
le=LabelEncoder()
for i in cv:
train[i]=le.fit_transform(train[i])
test[i]=le.fit_transform(test[i])
我收到这个错误:
le=LabelEncoder()
for i in cv:
train[i]=le.fit_transform(train[i])
test[i]=le.fit_transform(test[i])
Traceback (most recent call last):
File "<ipython-input-5-8739984f61b2>", line 3, in <module>
train[i]=le.fit_transform(train[i])
File "C:\Users\myname\Anaconda3\lib\site-packages\sklearn\preprocessing\label.py", line 127, in fit_transform
self.classes_, y = np.unique(y, return_inverse=True)
File "C:\Users\myname\Anaconda3\lib\site-packages\numpy\lib\arraysetops.py", line 195, in unique
perm = ar.argsort(kind='mergesort' if return_index else 'quicksort')
TypeError: unorderable types: str() > float()
奇怪的是,如果我在数据中的指定列上调用编码器,则输出成功。例如:
le.fit_transform(test['Race'])
结果:
le.fit_transform(test['Race'])
Out[7]: array([2, 4, 4, ..., 4, 1, 4], dtype=int64)
我试过:
float(le.fit_transform(train[i]))
str(le.fit_transform(train[i]))
两者均无效。
有人可以帮我吗?
我也遇到了同样的问题。原来我错过了检查缺失值。
检查您是否还有剩余(在您的情况下):
print(train.apply(lambda x : sum(x.isnull())))
print(test.apply(lambda x : sum(x.isnull())))
如果你有一些要么用参数替换它们(平均值,中值,mod ...)
或者简单地将它们编码为字符串,即对于任意变量 VAR :
parameter = train[VAR].mean() # parameter = "Nan"
train[VAR].fillna(parameter, inplace = True )
我正在 运行ning Python 3 使用 spyder 2,当我尝试 运行 此代码时:
from sklearn.preprocessing import LabelEncoder
cv=train.dtypes.loc[train.dtypes=='object'].index
print (cv)
le=LabelEncoder()
for i in cv:
train[i]=le.fit_transform(train[i])
test[i]=le.fit_transform(test[i])
我收到这个错误:
le=LabelEncoder()
for i in cv:
train[i]=le.fit_transform(train[i])
test[i]=le.fit_transform(test[i])
Traceback (most recent call last):
File "<ipython-input-5-8739984f61b2>", line 3, in <module>
train[i]=le.fit_transform(train[i])
File "C:\Users\myname\Anaconda3\lib\site-packages\sklearn\preprocessing\label.py", line 127, in fit_transform
self.classes_, y = np.unique(y, return_inverse=True)
File "C:\Users\myname\Anaconda3\lib\site-packages\numpy\lib\arraysetops.py", line 195, in unique
perm = ar.argsort(kind='mergesort' if return_index else 'quicksort')
TypeError: unorderable types: str() > float()
奇怪的是,如果我在数据中的指定列上调用编码器,则输出成功。例如:
le.fit_transform(test['Race'])
结果:
le.fit_transform(test['Race'])
Out[7]: array([2, 4, 4, ..., 4, 1, 4], dtype=int64)
我试过:
float(le.fit_transform(train[i]))
str(le.fit_transform(train[i]))
两者均无效。
有人可以帮我吗?
我也遇到了同样的问题。原来我错过了检查缺失值。 检查您是否还有剩余(在您的情况下):
print(train.apply(lambda x : sum(x.isnull())))
print(test.apply(lambda x : sum(x.isnull())))
如果你有一些要么用参数替换它们(平均值,中值,mod ...) 或者简单地将它们编码为字符串,即对于任意变量 VAR :
parameter = train[VAR].mean() # parameter = "Nan"
train[VAR].fillna(parameter, inplace = True )