2013-06-17 12 views
34

Ho un set di dati molto grande se volevo sostituire stringhe con numeri. Mi piacerebbe operare sul set di dati senza digitare una funzione di mappatura per ogni chiave (colonna) nel set di dati. (simile al metodo fillna, ma sostituire la stringa specifica con il valore asserito). C'è comunque qualcosa da fare?sostituisce stringa/valore nell'intero dataframe

Ecco un esempio del mio set di dati

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 

Il risultato desiderato:

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 

molto male = 1, Bad = 2, povero = 3, buono = 4, molto bene = 5

// Jonas

risposta

53

Usa 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

Questo non sta lavorando in 0.20.1. Vedi http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.DataFrame.replace.html?highlight=replace# per la nuova sintassi. –

+1

Sopra con una variazione minore dovrebbe funzionare df.replace (['very bad', 'bad', 'poor', 'good', 'very good'], [1, 2, 3, 4, 5] , inplace = True) –

4

Considerando data è il vostro pandas DataFrame è anche possibile utilizzare:

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