2017-08-09 44 views
2

我有以下數據集(自制)。如何識別數據框中的標稱列?

a , b , c , 1 , 1.3 ,d 
q , w , e , 2 , 45.5 ,r 
z , x , c , 1 , 76.09,f 
z , x , e , 4 , 0.09 ,r 

這裏最後一個col是類的值。現在,當我將數據加載到數據幀(DF)和應用

pandas.get_dummies(df) 

我得到這樣

0_a 0_q 0_z 1_b 1_w 1_x 2_c 2_e 3_1 3_2 3_4 4_0.09 4_1.3 \ 
0 1 0 0 1 0 0 1 0 1 0 0  0  1 
1 0 1 0 0 1 0 0 1 0 1 0  0  0 
2 0 0 1 0 0 1 1 0 1 0 0  0  0 
3 0 0 1 0 0 1 0 1 0 0 1  1  0 

這裏輸出它轉換分數值也是如此。如果我指定這樣

df = pandas.get_dummies(df , columns=[0,1,2]) 

山坳號我就可以得到所需的輸出

3  4 0_a 0_q 0_z 1_b 1_w 1_x 2_c 2_e 
0 1 1.3 1 0 0 1 0 0 1 0 
1 2 45.5 0 1 0 0 1 0 0 1 
2 1 76.09 0 0 1 0 0 1 1 0 
3 4 0.09 0 0 1 0 0 1 0 1 

我的問題是,我該怎麼辦,如果沒有指定的列數。是否可以確定只有標稱數據的列數(不是分數)?

回答

3

IIUC我們可以使用DataFrame.select_dtypes()方法:

來源DF:

In [151]: df 
Out[151]: 
    0 1 2 3  4 5 
0 a b c 1 1.30 d 
1 q w e 2 45.50 r 
2 z x c 1 76.09 f 
3 z x e 4 0.09 r 

解決方案:

In [155]: df.select_dtypes(['number']) \ 
      .join(pd.get_dummies(df.select_dtypes(exclude=['number']))) 
Out[155]: 
    3  4 0_a 0_q 0_z 1_b 1_w 1_x 2_c 2_e 5_d 5_f 5_r 
0 1 1.30 1 0 0 1 0 0 1 0 1 0 0 
1 2 45.50 0 1 0 0 1 0 0 1 0 0 1 
2 1 76.09 0 0 1 0 0 1 1 0 0 1 0 
3 4 0.09 0 0 1 0 0 1 0 1 0 0 1