2013-06-17 1 views
34

Ich habe einen sehr großen Datensatz, wo ich Zeichenfolgen durch Zahlen ersetzen möchte. Ich möchte das Dataset bearbeiten, ohne eine Zuordnungsfunktion für jeden Schlüssel (Spalte) im Dataset eingeben zu müssen. (ähnlich der Fillna-Methode, aber ersetzen Sie die spezifische Zeichenkette durch den zugehörigen Wert). Gibt es das überhaupt, um das zu tun? HierErsetze String/Wert im gesamten Datenrahmen

ist ein Beispiel für meine Daten-Set

data 
    resp   A   B   C 
0  1  poor  poor  good 
1  2  good  poor  good 
2  3 very good very good very good 
3  4  bad  poor  bad 
4  5 very bad very bad very bad 
5  6  poor  good very bad 
6  7  good  good  good 
7  8 very good very good very good 
8  9  bad  bad very bad 
9 10 very bad very bad very bad 

Das gewünschte Ergebnis:

data 
    resp A B C 
0  1 3 3 4 
1  2 4 3 4 
2  3 5 5 5 
3  4 2 3 2 
4  5 1 1 1 
5  6 3 4 1 
6  7 4 4 4 
7  8 5 5 5 
8  9 2 2 1 
9 10 1 1 1 

sehr schlecht = 1, schlecht = 2, schlecht = 3, gut = 4, sehr gut = 5

// Jonas

Antwort

53

Verwenden replace

In [126]: df.replace(['very bad', 'bad', 'poor', 'good', 'very good'], 
        [1, 2, 3, 4, 5]) 
Out[126]: 
     resp A B C 
    0  1 3 3 4 
    1  2 4 3 4 
    2  3 5 5 5 
    3  4 2 3 2 
    4  5 1 1 1 
    5  6 3 4 1 
    6  7 4 4 4 
    7  8 5 5 5 
    8  9 2 2 1 
    9 10 1 1 1 
+0

Das ist nicht in 0.20.1 funktioniert. Siehe http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.DataFrame.replace.html?highlight=replace# für neue Syntax. –

+1

Oben mit einer kleinen Variation sollte funktionieren df.replace (['sehr schlecht', 'schlecht', 'schlecht', 'gut', 'sehr gut'], [1, 2, 3, 4, 5] , inplace = Wahr) –

4

data In Anbetracht ist Ihr pandas DataFrame Sie können auch verwenden:

data.replace({'very bad': 1, 'bad': 2, 'poor': 3, 'good': 4, 'very good': 5}, inplace=True)