如何将pandas中含多个点的字符串列转换为浮点型数据
解决方案
根因说明
你遇到的多小数点无法转换问题,本质是数值采用了欧洲地区计数格式:用.作为千位分隔符,,作为小数点。你之前直接将逗号替换为点的操作会导致原本的千位分隔点和替换后的小数点同时存在,无法直接转浮点。
转换方案
方案1:适配欧洲数值格式(保留小数位)
如果你的数值存在小数位,使用该方案,自动区分千位分隔点和小数点,同时捕获转换错误返回空值方便后续过滤无效数据:
import pandas as pd import numpy as np def make_float(num): # 基础字符处理:去空格、全角负号转半角 num = str(num).strip().replace(' ','').replace("−", "-") # 存在逗号时:逗号是小数点,先删除所有千位分隔点,再替换逗号为小数点 if ',' in num: num = num.replace('.', '').replace(',', '.') # 仅存在多个点时:最后一个点为小数点,删除前面所有千位分隔点 else: dot_count = num.count('.') if dot_count > 1: parts = num.split('.') num = ''.join(parts[:-1]) + '.' + parts[-1] # 转换失败返回空值 try: return float(num) except ValueError: return np.nan # 应用转换 data['total_time'] = data['total_time'].apply(make_float) # 过滤转换失败的无效数据行,不需要过滤可删除此行 data = data.dropna(subset=['total_time'])
方案2:数值均为整数,仅误加千位分隔点
如果确认你的total_time列所有数值都是整数,只是被误加了千位分隔点,直接删除所有点再转换即可,代码更简洁:
import pandas as pd import numpy as np def make_float(num): num = str(num).strip().replace(' ','').replace("−", "-").replace('.', '') try: return float(num) except ValueError: return np.nan data['total_time'] = data['total_time'].apply(make_float) data = data.dropna(subset=['total_time'])
效果验证
你报错的示例值-19.833.333.333.333.300用方案1转换后为-19833333333333.3,可正常转为浮点型,无报错。
内容的提问来源于stack exchange,提问作者user3459293
相关产品推荐
相关产品推荐

