无法将字符串转换为 pandas 中的浮点数(ValueError)
Posted
技术标签:
【中文标题】无法将字符串转换为 pandas 中的浮点数(ValueError)【英文标题】:Cannot convert string to float in 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'
【问题讨论】:
【参考方案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 仅与Series
(DataFrame
的列)一起使用,例如str.split
和str.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
【讨论】:
以上是关于无法将字符串转换为 pandas 中的浮点数(ValueError)的主要内容,如果未能解决你的问题,请参考以下文章