ValueError: could not convert string to float: ‘-2914.013108.005‘

文章讲述了在遇到字符串转换为浮点数时因含有非法字符(如多个小数点)导致的错误,提出了使用Python的re.sub()函数结合正则表达式清理字符串的方法。通过创建str_to_float函数,对含有非数字字符的字符串进行处理,确保能成功转换为浮点数。对于数据集中个别错误的数据,添加条件语句以处理异常情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值