2016-09-15 5 views
3

Я бегу на Python 3 с помощью Spyder 2, и при попытке запустить этот код:LabelEncoder ошибка при использовании Sklearn в цикле

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])) 

Оба не работали.

Может кто-нибудь, пожалуйста, помогите мне?

ответ

2

Если бы такая же проблема тоже. Оказывается, я пропустил проверку отсутствующих значений. Проверьте, если у вас есть какие-либо влево (в вашем случае):

print(train.apply(lambda x : sum(x.isnull()))) 
print(test.apply(lambda x : sum(x.isnull()))) 

Если у вас есть некоторые либо заменить их с параметром (среднее, медианы, мод ...) или просто кодировать их в виде строки, т.е. для произвольной переменной VAR:

parameter = train[VAR].mean() # parameter = "Nan" 
train[VAR].fillna(parameter, inplace = True) 
Смежные вопросы