找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 15150|回复: 8

[求助] ValueError: could not convert string to float:

1

主题

7

帖子

7

积分

贫民

积分
7
QQ
wx_AdQ29fvi 发表于 2018-1-7 16:22:50 | 显示全部楼层 |阅读模式
我有一段代码读取scv文件的数值,数值超过1, 000时,也就是数值中出现逗号的时候就报错ValueError: could not convert string to float:。
如果我把数值改成1000以下,也就是没有逗号的情况就是正常的。

代码如下:
#!/uer/bin/env python3
import pandas as pd
import sys
input_file = sys.argv[1]
output_file = sys.argv[2]
data_frame = pd.read_csv(input_file)
data_frame['Cost'] = data_frame['Cost'].str.strip('$,').astype(float)
data_frame_value_meets_condition = data_frame.loc[(data_frame['Supplier Name']\
.str.contains('Z')) | (data_frame['Cost'] > 600.00), :]
data_frame_value_meets_condition.to_csv(output_file, index=False)

用strip('$,')删除逗号不行,用replace(',', '')也不行,请高手指教。
回复

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2018-1-7 17:33:58 | 显示全部楼层
好像没问题的,把cost的数据贴点上来。

replace

replace
回复 支持 反对

使用道具 举报

1

主题

7

帖子

7

积分

贫民

积分
7
QQ
wx_AdQ29fvi  楼主| 发表于 2018-1-7 18:25:12 | 显示全部楼层
Supplier Name        Invoice Number        Part Number        Cost        Purchase Date
Supplier X        001-1001        2341        $500.00         1/20/14
Supplier X        001-1001        2341        $500.00         1/20/14
Supplier X        001-1001        5467        $750.00         1/20/14
Supplier X        001-1001        5467        $750.00         1/20/14
Supplier Y        50-9501        7009        $250.00         1/30/14
Supplier Y        50-9501        7009        $250.00         1/30/14
Supplier Y        50-9505        6650        $125.00         2002/3/14
Supplier Y        50-9505        6650        $125.00         2002/3/14
Supplier Z        920-4803        3321        $615.00         2002/3/14
Supplier Z        920-4804        3321        $615.00         2002/10/14
Supplier Z        920-4805        3321        $12,545.00         2/17/14
Supplier Z        920-4806        3321        $45,646.00         2/24/14
回复 支持 反对

使用道具 举报

1

主题

7

帖子

7

积分

贫民

积分
7
QQ
wx_AdQ29fvi  楼主| 发表于 2018-1-7 18:25:55 | 显示全部楼层
出现错误如下:
ValueError: could not convert string to float: '45,646.00'
回复 支持 反对

使用道具 举报

1

主题

7

帖子

7

积分

贫民

积分
7
QQ
wx_AdQ29fvi  楼主| 发表于 2018-1-7 18:31:32 | 显示全部楼层
我把代码改了一下,可以运行,但是出来的数据没有$符号也没有逗号了。
Supplier Name        Invoice Number        Part Number        Cost        Purchase Date
Supplier X        001-1001        5467        750        1/20/14
Supplier X        001-1001        5467        750        1/20/14
Supplier Z        920-4803        3321        615        2002/3/14
Supplier Z        920-4804        3321        615        2002/10/14
Supplier Z        920-4805        3321        12545        2/17/14
Supplier Z        920-4806        3321        45646        2/24/14
回复 支持 反对

使用道具 举报

1

主题

7

帖子

7

积分

贫民

积分
7
QQ
wx_AdQ29fvi  楼主| 发表于 2018-1-7 18:32:27 | 显示全部楼层
wx_AdQ29fvi 发表于 2018-1-7 18:31
我把代码改了一下,可以运行,但是出来的数据没有$符号也没有逗号了。
Supplier Name        Invoice Number        Part  ...

修改的代码如下:
data_frame['Cost'] = data_frame['Cost'].str.replace(',', '').str.strip('$').astype(float)
回复 支持 反对

使用道具 举报

1

主题

7

帖子

7

积分

贫民

积分
7
QQ
wx_AdQ29fvi  楼主| 发表于 2018-1-7 18:35:21 | 显示全部楼层
sheeboard 发表于 2018-1-7 17:33
好像没问题的,把cost的数据贴点上来。

我把代码改了一下:data_frame['Cost'] = data_frame['Cost'].str.replace(',', '').str.strip('$').astype(float)
现在可以运行了,生成的csv文件里的数据如下:(没有$符号和逗号了,纯数字。)
Supplier Name        Invoice Number        Part Number        Cost        Purchase Date
Supplier X        001-1001        5467        750        1/20/14
Supplier X        001-1001        5467        750        1/20/14
Supplier Z        920-4803        3321        615        2002/3/14
Supplier Z        920-4804        3321        615        2002/10/14
Supplier Z        920-4805        3321        12545        2/17/14
Supplier Z        920-4806        3321        45646        2/24/14

原始数据如下:
Supplier Name        Invoice Number        Part Number        Cost        Purchase Date
Supplier X        001-1001        2341        $500.00         1/20/14
Supplier X        001-1001        2341        $500.00         1/20/14
Supplier X        001-1001        5467        $750.00         1/20/14
Supplier X        001-1001        5467        $750.00         1/20/14
Supplier Y        50-9501        7009        $250.00         1/30/14
Supplier Y        50-9501        7009        $250.00         1/30/14
Supplier Y        50-9505        6650        $125.00         2002/3/14
Supplier Y        50-9505        6650        $125.00         2002/3/14
Supplier Z        920-4803        3321        $615.00         2002/3/14
Supplier Z        920-4804        3321        $615.00         2002/10/14
Supplier Z        920-4805        3321        $12,545.00         2/17/14
Supplier Z        920-4806        3321        $45,646.00         2/24/14
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2018-1-7 18:44:26 | 显示全部楼层
本帖最后由 sheeboard 于 2018-1-7 18:47 编辑

def money(x):
        return "${:,.2f}".format(x)
data_frame['Cost']=data_frame['Cost'].apply(money)
数据处理完再改回去试试。
回复 支持 反对

使用道具 举报

1

主题

7

帖子

7

积分

贫民

积分
7
QQ
wx_AdQ29fvi  楼主| 发表于 2018-1-7 19:16:18 | 显示全部楼层
非常感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表