2013-06-17 13 views
34

Mam bardzo duży zbiór danych, gdy chcę zastąpić ciągi liczbami. Chciałbym operować na zestawie danych bez wpisywania funkcji mapowania dla każdego klucza (kolumny) w zestawie danych. (podobne do metody fillna, ale zastąp konkretny ciąg z przypisaną wartością). Czy mimo to można to zrobić?Zamień ciąg/wartość w całej ramce danych

Oto przykład mego zbiorze

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 

Pożądany wynik:

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 

Bardzo słabe = 1, Bad = 2, słaba = 3, dobra = 4, bardzo dobra = 5

// Jonas

Odpowiedz

53

Zastosowanie 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

To nie działa w 0.20.1. Zobacz http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.DataFrame.replace.html?highlight=replace# dla nowej składni. –

+1

Powyżej z niewielkimi zmianami powinien działać df.replace (["bardzo zły", "zły", "słaby", "dobry", "bardzo dobry"], [1, 2, 3, 4, 5] , inplace = True) –

4

Zważywszy data jest twój pandas DataFrame można również użyć:

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