2014-02-28 68 views
8

在柱risklevels我想用1替換小,中,用5和高配15. 我嘗試:大熊貓替換多個值的一列

dfm.replace({'risk':{'Small': '1'}},{'risk':{'Medium': '5'}},{'risk':{'High': '15'}}) 

但只有培養基替換。 有什麼不對?

回答

6

你可以定義一個字典,並呼籲map

In [256]: 

df = pd.DataFrame({'a':['Small', 'Medium', 'High']}) 
df 
Out[256]: 
     a 
0 Small 
1 Medium 
2 High 

[3 rows x 1 columns] 
In [258]: 

vals_to_replace = {'Small':'1', 'Medium':'5', 'High':'15'} 
df['a'] = df['a'].map(vals_to_replace) 
df 
Out[258]: 
    a 
0 1 
1 5 
2 15 

[3 rows x 1 columns] 


In [279]: 

val1 = [1,5,15] 
df['risk'].update(pd.Series(val1)) 
df 
Out[279]: 
    risk 
0 1 
1 5 
2 15 

[3 rows x 1 columns] 
+0

使用''update''! – Jeff

+0

@Jeff不熟悉那種方法,我正確使用它嗎? – EdChum

+0

是的,這是正確的(但我意識到問題是,OP替換格式是錯誤的) – Jeff

20

你替換格式是關閉

In [21]: df = pd.DataFrame({'a':['Small', 'Medium', 'High']}) 

In [22]: df 
Out[22]: 
     a 
0 Small 
1 Medium 
2 High 

[3 rows x 1 columns] 

In [23]: df.replace({'a' : { 'Medium' : 2, 'Small' : 1, 'High' : 3 }}) 
Out[23]: 
    a 
0 1 
1 2 
2 3 

[3 rows x 1 columns] 
+1

我不確定'替換'格式行有什麼問題,所以我建議使用'map'來代替。用於發現OP錯誤的+1 – EdChum

1
In [123]: import pandas as pd                                 

In [124]: state_df = pd.DataFrame({'state':['Small', 'Medium', 'High', 'Small', 'High']})                  

In [125]: state_df 
Out[125]: 
    state 
0 Small 
1 Medium 
2 High 
3 Small 
4 High 

In [126]: replace_values = {'Small' : 1, 'Medium' : 2, 'High' : 3 }                       

In [127]: state_df = state_df.replace({"state": replace_values})                        

In [128]: state_df 
Out[128]: 
    state 
0  1 
1  2 
2  3 
3  1 
4  3 
0

字符串替換爲新的串每串(小,中,高)( 1,5,15)\

如果dfm是數據框名稱,則列是列名稱。

dfm.column = dfm.column.str.replace('Small', '1') 
dfm.column = dfm.column.str.replace('Medium', '5') 
dfm.column = dfm.column.str.replace('High', '15')