2013-06-17 33 views
34

Tôi có một tập dữ liệu rất lớn là tôi muốn thay thế chuỗi bằng số. Tôi muốn hoạt động trên tập dữ liệu mà không cần nhập hàm ánh xạ cho mỗi khóa (cột) trong tập dữ liệu. (tương tự như phương pháp fillna, nhưng thay thế chuỗi cụ thể bằng giá trị được xác định). Có cách nào để thực hiện việc này không?thay thế chuỗi/giá trị trong toàn bộ khung dữ liệu

Dưới đây là một ví dụ về dữ liệu của tôi

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 

Kết quả mong muốn:

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 

rất xấu = 1, xấu = 2, nghèo = 3, tốt = 4, rất tốt = 5

// Jonas

Trả lời

53

Sử dụng 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

này không hoạt động trong 0.20.1. Xem http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.DataFrame.replace.html?highlight=replace# để biết cú pháp mới. –

+1

Ở trên có một biến thể nhỏ nên hoạt động df.replace (['rất xấu', 'xấu', 'kém', 'tốt', 'rất tốt'], [1, 2, 3, 4, 5] , inplace = True) –

4

Xét datapandas DataFrame của bạn, bạn cũng có thể sử dụng:

data.replace({'very bad': 1, 'bad': 2, 'poor': 3, 'good': 4, 'very good': 5}, inplace=True) 
Các vấn đề liên quan