2016-03-12 140 views
1

我的DataFrame是94列728k行。每個值都是表示顏色的字符串。我打算將每種顏色轉換爲相應的數值。熊貓:有效地改變多個列中的多個值

這是一個可重現的例子。在這個例子中,我希望將字符串轉換如下:

blue = 1 
green = 2 
red = 3 
grey = 4 
orange = 5 

data = {'group1': ['red', 'grey', 'blue', 'orange'], 
    'group2': ['red', 'green', 'blue', 'blue'], 
    'group3': ['orange', 'blue', 'orange', 'green']} 

data = pd.DataFrame(data) 
data 

    group1 group2 group3 
0 red  red  orange 
1 grey green blue 
2 blue blue orange 
3 orange blue green 

輸出將是:

group1 group2 group3 
0  3  3  5 
1  4  2  1 
2  1  1  5 
3  5  1  2 

我怎麼能這樣做有效地給予我的實際數據的大小?

+1

可能不是你在尋找什麼,但看看sklearn.preprocessing.LabelEncoder爲好。 http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html – ayhan

回答

3

你可以先使用字典的字符串映射到整數:

d = {'blue': 1, 'green': 2, 'red': 3, 'grey': 4, 'orange': 5} 

然後使用replace並傳入詞典:

>>> data.replace(d) 
    group1 group2 group3 
0  3  3  5 
1  4  2  1 
2  1  1  5 
3  5  1  2 

一本字典,讓您可以挑選的優勢哪些字符串映射到哪些整數。如果您不介意爲您自動生成的值,則可以利用熊貓的categorical數據類型。

理想情況下,我們會寫data.astype('category')並從那裏開始,但從0.17.1開始,不執行二維分類轉換。

一個解決辦法是堆棧,施放,拆散:

>>> c_data = data.stack().astype('category') 
>>> c_data.cat.codes.unstack() 
    group1 group2 group3 
0  4  4  3 
1  2  1  0 
2  0  0  3 
3  3  0  1 
+1

你可以明確地傳遞類別時,風格分類,以及得到任何數字代碼你想 – Jeff