【问题标题】:Convert a column in pandas dataframe from String to Float将 pandas 数据框中的列从 String 转换为 Float
【发布时间】:2016-08-20 19:57:42
【问题描述】:

我已经阅读了各种解决方案,并尝试了此处所述的解决方案: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')

另外,如何一次将多列转换为数字?谢谢。

【问题讨论】:

    标签: python pandas dataframe typeconverter


    【解决方案1】:

    试试这个:

    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
    

    【讨论】:

    • 但是,您是否知道如何将相同的内容应用于多个列?
    • @Kevin,我添加了一个示例 - 请检查
    猜你喜欢
    • 2013-07-30
    • 2018-03-08
    • 1970-01-01
    • 2018-03-25
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    相关资源
    最近更新 更多