2016-04-26 78 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