2013-06-17 33 views
34

Çok büyük bir veri kümem var, dizeleri sayılarla değiştirmek istiyorum. Veri kümesindeki her anahtar (sütun) için bir eşleme işlevi yazmadan veri kümesi üzerinde çalışmak istiyorum. (fillna yöntemine benzer, ancak belirli dizgiyi assosiated değeriyle değiştirin). Bunu yapmak için zaten var mı?Tüm veri çerçevesindeki dizgeyi/değeri değiştirin

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 

çok 1 = kötü kötü = 2, iyi, 3 = fakir = 4, çok iyi = 5: Burada

benim veri kümesi

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 

istenen sonuç bir örnektir

// Jonas

cevap

53

Kullanım 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

. Yeni sözdizimi için http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.DataFrame.replace.html?highlight=replace# adresine bakın. –

+1

Yukarıda küçük bir varyasyon çalışmalıdır df.replace (['çok kötü', 'kötü', 'kötü', 'iyi', 'çok iyi'], [1, 2, 3, 4, 5] , inplace = Doğru) –

4

data düşünüldüğünde aşağıdadır pandas DataFrame da kullanabilirsiniz: Bu 0.20.1 çalışmıyor

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