赞
踩
这个错误提示表明在将字符串转换为浮点数时出现了错误,因为字符串-2914.013108.005
中包含了两个小数点,所以Python无法正确将其转换为一个合法的浮点数。
txt文档里面有一列数据计数发生错误
处理该错误的方法是先将字符串中的非数字字符去除或替换为合法字符,再进行浮点数转换。你可以使用re.sub()
函数和正则表达式来实现这一步骤。例如:
- import re
-
- string = '-2914.013108.005'
- string = re.sub(r'[^0-9\.]', '', string)#将字符串中所有非数字字符和小数点都替换为空字符
- print(float(string))
-
- #'-2914.013108.005' -> '2914013108.005'
- #然后,float('2914013108.005')会报出正确的结果,即 -2914.013108005
-
然后,float('2914013108.005')
会报出正确的结果,即 -2914.013108005
。
如果你有多个包含非数字字符的字符串需要转换为浮点数,可以将上述代码封装为一个函数,并将该函数应用到整个数据集中的某一列中。例如:
- def str_to_float(string):
- string = re.sub(r'[^0-9\.]', '', string)
- return float(string)
-
- df['column_name'] = df['column_name'].apply(str_to_float)
但是我的数据只是个别有计数错误,所以加个条件语句
- import re
- import pandas as pd
-
- def str_to_float(string):
- if type(string) == str:
- string = re.sub(r'[^0-9\.]', '', string)
- return float(string)
- else:
- return string
'运行
这样,就可以把那一列计数错误的数据纠正过来
说一下转换数据类型的详细介绍
Python 自带的 re
正则表达式模块中的 sub()
函数。它使用正则表达式 r'[^0-9\.\-]'
来替换字符串中的非数字(0-9
)、非小数点(.
)、非负号(-
)字符为空字符串。
例如,如果 string
的值为 '2021年11月1日:23.45'
,这行代码运行后的结果为 '202111123.45'
。
Python 内置的 float()
函数将清理过的字符串转换为浮点数。
例如,如果 string
的值为 '202111123.45'
,这行代码运行后的结果为 202111123.45
。
更新以下,有个小错误
- import re
-
- string = '-2914.013108.005'
- string = re.sub(r'[^0-9.\-]+', '', string)#+ 表示重复匹配一次或多次。
- if '.' in string:
- string = string[:string.index('.')+5]#.index('.') 查找字符串 string 中第一个小数点的位置,然后将其后面的4位数字一并截取下来,组成新的字符串
- print(float(string))
-
- #>-2914.0131
'运行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。