简体   繁体   English

将pandas dataframe中的列从String转换为Float

[英]Convert a column in pandas dataframe from String to Float

I've already read about various solutions, and tried the solution stated here: Pandas: Converting to numeric, creating NaNs when necessary 我已经阅读了各种解决方案,并尝试了此处所述的解决方案: Pandas:转换为数字,必要时创建NaN

But it didn't really solve my problem: I have a dataframe contains multiple columns, in where a column ['PricePerSeat_Outdoor'] contains some float values, some empty values, and some '-' 但它并没有真正解决我的问题:我有一个数据['PricePerSeat_Outdoor']包含多个列,其中列['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]) 

Then I got: 然后我得到了:

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

Values at row #98 and 99 didn't get converted. 第98行和第99行的值未转换。 Again, I've already tried multiple methods including following but it just didn't work. 同样,我已经尝试过多种方法,包括以下但是它没有用。 Much appreciated if someone can give me some hints. 非常感谢,如果有人能给我一些提示。

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

Also, how can I convert multiple columns to numeric at once? 另外,如何将多个列一次转换为数字? Thanks. 谢谢。

try this: 尝试这个:

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

Here is an example: 这是一个例子:

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

check: 校验:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM