2014-06-08 16 views

Antwort

21

Seit Pandas Version 0.15.0, pd.get_dummies kann einen Datenrahmen direkt verarbeiten (davor, es könnte nur eine einzige Serie handhaben, und unten für die Problemumgehung sehen):

In [1]: df = DataFrame({'A': ['a', 'b', 'a'], 'B': ['c', 'c', 'b'], 
    ...:     'C': [1, 2, 3]}) 

In [2]: df 
Out[2]: 
    A B C 
0 a c 1 
1 b c 2 
2 a b 3 

In [3]: pd.get_dummies(df) 
Out[3]: 
    C A_a A_b B_b B_c 
0 1 1 0 0 1 
1 2 0 1 0 1 
2 3 1 0 1 0 

Behelfslösung für Pandas < 0.15.0

Sie können für jede Spalte seperate es tun und dann concat die Ergebnisse:

In [111]: df 
Out[111]: 
    A B 
0 a x 
1 a y 
2 b z 
3 b x 
4 c x 
5 a y 
6 b y 
7 c z 

In [112]: pd.concat([pd.get_dummies(df[col]) for col in df], axis=1, keys=df.columns) 
Out[112]: 
    A  B  
    a b c x y z 
0 1 0 0 1 0 0 
1 1 0 0 0 1 0 
2 0 1 0 0 0 1 
3 0 1 0 1 0 0 
4 0 0 1 1 0 0 
5 1 0 0 0 1 0 
6 0 1 0 0 1 0 
7 0 0 1 0 0 1 

Wenn Sie die Multi-Index-Spalte nicht möchten, entfernen Sie die keys=.. aus dem Concat-Funktionsaufruf.

+0

Schön, ich mag die Multi-Index-Spalte. – chrisb

3

Jemand könnte etwas schlauer haben, aber hier sind zwei Ansätze. Angenommen, Sie haben einen Datenrahmen mit dem Namen df mit den Spalten 'Name' und 'Jahr', für den Sie Dummies verwenden möchten.

Zuerst einfach über die Spalten Iterieren ist nicht so schlecht:

In [93]: for column in ['Name', 'Year']: 
    ...:  dummies = pd.get_dummies(df[column]) 
    ...:  df[dummies.columns] = dummies 

Eine weitere Idee, das patsy Paket zu verwenden wäre, die entworfen, um Datenmatrizen von R-Typ Formeln zu konstruieren.

In [94]: patsy.dmatrix(' ~ C(Name) + C(Year)', df, return_type="dataframe") 
1

Es sei denn, ich die Frage nicht verstehen, wird es, indem man die Spalten Argument nativ in get_dummies unterstützt.

+0

Es war nicht dann. – Emre

+0

Sie müssen das Argument 'columns' nicht angeben. Standardmäßig werden alle kategorienähnlichen Spalten (string/categorical) codiert. – joris

+0

Das stimmt, ich nahm an, dass @Emre kontrollieren wollte, welche Spalten getäuscht wurden. –

13

Mit Pandas 0,19, können Sie, dass in einer einzigen Zeile tun:

pd.get_dummies(data=df, columns=['A', 'B']) 

Columns gibt an, wo die eine heiße Encoding zu tun.

>>> df 
    A B C 
0 a c 1 
1 b c 2 
2 a b 3 

>>> pd.get_dummies(data=df, columns=['A', 'B']) 
    C A_a A_b B_b B_c 
0 1 1.0 0.0 0.0 1.0 
1 2 0.0 1.0 0.0 1.0 
2 3 1.0 0.0 1.0 0.0 
Verwandte Themen