这个错误提示表明在将字符串转换为浮点数时出现了错误,因为字符串-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
推荐链接
发表评论