无法将字符串转换为pandas中的float(ValueError)

时间:2016-08-24 14:09:38

标签: python json pandas dataframe numeric

我有一个从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:无法将字符串转换为float:'1,304.40'

2 个答案:

答案 0 :(得分:0)

这些字符串的逗号为千位分隔符,因此您必须在调用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(',', '')))

答案 1 :(得分:0)

具有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