【问题标题】:Cannot convert string to float in pandas (ValueError)无法将字符串转换为 pandas 中的浮点数(ValueError)
【发布时间】:2016-12-31 17:28:19
【问题描述】:

我有一个从 JSON 输出创建的数据框,如下所示:

        Total Revenue    Average Revenue    Purchase count    Rate
Date    
Monday  1,304.40 CA$     20.07 CA$          2,345             1.54 %

存储的值作为字符串从 JSON 中接收。我正在尝试:

1) 删除条目中的所有字符(例如:CA$ 或 %) 2) 将汇率和收入列转换为浮动 3) 将计数列转换为 int

我尝试执行以下操作:

df[column] = (df[column].str.split()).apply(lambda x: float(x[0]))

它工作正常,除非我有一个昏迷值(例如:1,465 不起作用,而 143 会)。

我尝试使用几个函数将“,”替换为“”等。到目前为止没有任何效果。我总是收到以下错误:

ValueError:无法将字符串转换为浮点数:'1,304.40'

【问题讨论】:

    标签: python json pandas dataframe numeric


    【解决方案1】:

    这些字符串以逗号作为千位分隔符,因此您必须在调用 float 之前将其删除:

    df[column] = (df[column].str.split()).apply(lambda x: float(x[0].replace(',', '')))
    

    这可以通过将split 移动到lambda 中来稍微简化:

    df[column] = df[column].apply(lambda x: float(x.split()[0].replace(',', '')))
    

    【讨论】:

      【解决方案2】:

      另一个具有list 理解的解决方案,如果需要应用string functions 仅与SeriesDataFrame 的列)一起使用,例如str.splitstr.replace

      df = pd.concat([df[col].str.split()
                             .str[0]
                             .str.replace(',','').astype(float) for col in df], axis=1)
      
      #if need convert column Purchase count to int
      df['Purchase count'] = df['Purchase count'].astype(int)
      print (df)
               Total Revenue  Average Revenue  Purchase count  Rate
      Date                                                        
      Monday         1304.4            20.07            2345  1.54
      

      【讨论】:

        猜你喜欢
        • 2021-07-22
        • 2022-01-10
        • 1970-01-01
        • 2019-10-03
        • 1970-01-01
        • 2019-03-23
        • 2018-06-13
        • 2013-05-30
        • 1970-01-01
        相关资源
        最近更新 更多