2016-08-11 13 views
6

Я применяющий LabelEncoder к панд DataFrame, dfLabelEncoder указать классы в DataFrame

Feat1 Feat2 Feat3 Feat4 Feat5 
    A  A  A  A  E 
    B  B  C  C  E 
    C  D  C  C  E 
    D  A  C  D  E 

я применяю кодер этикетки к dataframe, как это -

from sklearn import preprocessing 
le = preprocessing.LabelEncoder() 
intIndexed = df.apply(le.fit_transform) 

Это как метки отображаются

A = 0 
B = 1 
C = 2 
D = 3 
E = 0 

Я предполагаю, что E не дана й e значение 4, поскольку оно не отображается ни в одном другом столбце, кроме Feat 5.

Я хочу, чтобы E получил значение 4 - но не знаю, как это сделать в DataFrame.

+0

Вы можете использовать 'df.replace ({ 'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4})'? – Zero

ответ

12

Вы можете fit кодер этикетки, а затем transform метки к их нормированного кодирования следующим образом:

In [4]: from sklearn import preprocessing 
    ...: import numpy as np 

In [5]: le = preprocessing.LabelEncoder() 

In [6]: le.fit(np.unique(df.values)) 
Out[6]: LabelEncoder() 

In [7]: list(le.classes_) 
Out[7]: ['A', 'B', 'C', 'D', 'E'] 

In [8]: df.apply(le.transform) 
Out[8]: 
    Feat1 Feat2 Feat3 Feat4 Feat5 
0  0  0  0  0  4 
1  1  1  2  2  4 
2  2  3  2  2  4 
3  3  0  2  3  4 

Один из способов указать метки по умолчанию будет:

In [9]: labels = ['A', 'B', 'C', 'D', 'E'] 

In [10]: enc = le.fit(labels) 

In [11]: enc.classes_      # sorts the labels in alphabetical order 
Out[11]: 
array(['A', 'B', 'C', 'D', 'E'], 
     dtype='<U1') 

In [12]: enc.transform('E') 
Out[12]: 4 
+1

Спасибо за ваш ответ Nickil, но это изменило отображение на A = 1, B = 2, C = 3, D = 4, E = 0. Могу ли я указать, какие значения я хочу? – gbhrea

+0

Да, вы можете указать метки, которые необходимо закодировать * [см. Отредактированный ответ] *. Но 'LabelEncoder' сортирует их внутри и возвращает отсортированный список. –

+0

Есть ли способ поставить это в конвейер? –

2

You может вписываться и преобразовываться в одном выражении, . Кодировка для кодирования одного столбца и присвоение кадра данных.

df[columnName] = LabelEncoder().fit_transform(df[columnName]) 
Смежные вопросы