2016-08-11 13 views
6

jestem wprowadzające LabelEncoder do DataFrame pandy, dfLabelEncoder określić zajęcia w 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 

mam zastosowaniu kodera etykiet do dataframe jak ta -

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

ten sposób etykiety są mapowane

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

Zgaduję, że E nie jest podane e wartość 4, ponieważ nie występuje w żadnej innej kolumnie niż Feat 5.

Chcę, aby E otrzymał wartość 4 - ale nie wiem, jak to zrobić w DataFrame.

+0

Możesz użyć 'df.replace ({'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4})'? – Zero

Odpowiedz

12

Można fit enkoder etykiety i później transform etykiet do ich znormalizowanego kodowania następująco:

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 

Jednym ze sposobów określenia etykiety domyślnie będzie:

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

Dzięki za odpowiedź Nickil, ale to zmieniło mapowanie na A = 1, B = 2, C = 3, D = 4, E = 0. Czy mogę określić, jakie wartości chcę? – gbhrea

+0

Tak, możesz określić etykiety, które wymagają zakodowania * [patrz odpowiedź do edycji] *. Ale '' LabelEncoder' sortuje je wewnętrznie i zwraca posortowaną listę. –

+0

Czy istnieje sposób na umieszczenie tego w potoku? –

2

You można dopasować i przekształcić w pojedynczym komunikacie, Proszę znaleźć kod do kodowania pojedynczej kolumny i przypisywania z powrotem do ramki danych.

df[columnName] = LabelEncoder().fit_transform(df[columnName])