2016-08-01 16 views
5

Ich habe folgende Datenrahmen:Wie binäre Werte in einem Pandas DataFrame?

df = pd.DataFrame(['Male','Female', 'Female', 'Unknown', 'Male'], columns = ['Gender']) 

Ich möchte dies mit Spalten ‚männlich‘, ‚Female‘ und ‚Unknown‘ die Werte zu einem Datenrahmen konvertieren 0 und 1 das Geschlecht angegeben.

Gender Male Female 
Male  1  0 
Female 0  1 
     . 
     . 
     . 
     . 

Um dies zu tun, schrieb ich eine Funktion und nannte die Funktion mit map.

def isValue(x , value): 
if(x == value): 
    return 1 
else: 
    return 0 


for value in df['Gender'].unique(): 
    df[str(value)] = df['Gender'].map(lambda x: isValue(str(x) , str(value))) 

Das funktioniert perfekt. Aber gibt es einen besseren Weg, dies zu tun? Gibt es in irgendeinem sklearn-Paket eine integrierte Funktion, die ich verwenden kann?

Antwort

4

Ja, es gibt einen besseren Weg, dies zu tun.

order = ['Gender', 'Male', 'Female', 'Unknown'] 
pd.concat([df, pd.get_dummies(df, '', '').astype(int)], axis=1)[order] 

enter image description here

2

Meine Präferenz ist pd.get_dummies(): Es ist pd.get_dummies

pd.get_dummies(df) 

enter image description here

zu replizieren, was Sie haben genannt. Ja, es gibt Sklearn-Methode.

Von Docs:

>>> from sklearn.preprocessing import OneHotEncoder 
>>> enc = OneHotEncoder() 
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]) 
OneHotEncoder(categorical_features='all', dtype=<... 'float'>, 
     handle_unknown='error', n_values='auto', sparse=True) 
>>> enc.n_values_ 
array([2, 3, 4]) 
>>> enc.feature_indices_ 
array([0, 2, 5, 9]) 
>>> enc.transform([[0, 1, 1]]).toarray() 
array([[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]]) 

http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html