2016-08-11 4 views
6

Ich bin ein LabelEncoder zu einem Pandas Dataframe Anwendung dfLabelEncoder angeben Klassen in Datenrahmen

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 

Ich bin ein Etikett Geber auf einen Datenrahmen wie diese Anwendung -

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

Dies ist, wie die Etiketten

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

ich vermute, dass E nicht gegeben ist th e Wert von 4, da es in keiner anderen Spalte als erscheint.

Ich möchte E, um den Wert 4 gegeben werden - aber ich weiß nicht, wie dies in einem DataFrame zu tun.

+0

Sie 'df.replace verwenden könnten ({ 'A': 0, 'B': 1, 'C': 2, 'D': 3 'E': 4})'? – Zero

Antwort

12

Sie könnten das Label Encoder fit und später transform die Etiketten zu ihrer normalisierten Codierung wie folgt:

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 

Eine Möglichkeit, Etiketten standardmäßig angeben würde:

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

Danke für deine Antwort Nickil, aber das hat die Zuordnung zu A = 1, B = 2, C = 3, D = 4, E = 0 geändert. Kann ich angeben, welche Werte ich möchte? – gbhrea

+0

Ja, Sie können die Labels angeben, die codiert werden müssen * [siehe bearbeitete Antwort] *. Aber der "LabelEncoder" sortiert sie intern und gibt die sortierte Liste zurück. –

+0

Gibt es eine Möglichkeit, dies in eine Pipeline zu stecken? –

2

Sie kann in einzelne Anweisung passen und transformieren, Finden Sie den Code für die Codierung einzelner Spalte und die Zuordnung zurück zum Datenrahmen.

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