2016-04-26 33 views
3

我已經瞭解了各種解決方案,並試圖解決方案在這裏說:Pandas: Converting to numeric, creating NaNs when necessary轉換一列浮動

但它並沒有真正解決我的問題: 我有一個數據幀中包含多列,在一列['PricePerSeat_Outdoor']包含一些浮點值,一些空值,有的'-'

print type(df_raw['PricePerSeat_Outdoor'][99]) 
    print df_raw['PricePerSeat_Outdoor'][95:101] 
    df_raw['PricePerSeat_Outdoor'] = df_raw['PricePerSeat_Outdoor'].apply(pd.to_numeric, errors='coerce') 
    print type(df_raw['PricePerSeat_Outdoor'][99]) 

然後我:

<type 'str'> 
95  17.21 
96  17.24 
97   - 
98   - 
99  17.2 
100 17.24 
Name: PricePerSeat_Outdoor, dtype: object 
<type 'str'> 

#98和99行的值未被轉換。再次,我已經嘗試了多種方法,包括跟隨,但它只是沒有工作。非常感謝,如果有人可以給我一些提示。

df_raw['PricePerSeat_Outdoor'] = df_raw['PricePerSeat_Outdoor'].apply(pd.to_numeric, errors='coerce')

另外,我怎麼能轉換成多列數字一次?謝謝。

回答

9

試試這個:

df_raw['PricePerSeat_Outdoor'] = pd.to_numeric(df_raw['PricePerSeat_Outdoor'], errors='coerce') 

下面是一個例子:

In [97]: a = pd.Series(['17.21','17.34','15.23','-','-','','12.34'] 

In [98]: b = pd.Series(['0.21','0.34','0.23','-','','-','0.34']) 

In [99]: df = pd.DataFrame({'a':a, 'b':b}) 

In [100]: df['c'] = np.random.choice(['a','b','b'], len(df)) 

In [101]: df 
Out[101]: 
     a  b c 
0 17.21 0.21 a 
1 17.34 0.34 b 
2 15.23 0.23 b 
3  -  - b 
4  -  b 
5   - b 
6 12.34 0.34 b 

In [102]: cols_to_convert = ['a','b'] 

In [103]: cols_to_convert 
Out[103]: ['a', 'b'] 

In [104]: for col in cols_to_convert: 
    .....:   df[col] = pd.to_numeric(df[col], errors='coerce') 
    .....: 

In [105]: df 
Out[105]: 
     a  b c 
0 17.21 0.21 a 
1 17.34 0.34 b 
2 15.23 0.23 b 
3 NaN NaN b 
4 NaN NaN b 
5 NaN NaN b 
6 12.34 0.34 b 

檢查:

In [106]: df.dtypes 
Out[106]: 
a float64 
b float64 
c  object 
dtype: object 
+0

是的,這就是我終於用...謝謝! – Kevin

+0

但是,你碰巧知道我應該如何應用多列? – Kevin

+0

@凱文,我已經添加了一個例子 - 請檢查 – MaxU