Pandas解决字符串转float报错 转换百万级DataFrame列为浮点型
报错原因
抛出ValueError: could not convert string to float: '1.598.248'的根本原因是:待转换列的字符串中.是千分位分隔符,不是小数点。直接调用类型转换时,Pandas会将字符串中的.识别为小数点位,包含多个.的字符串不符合浮点数格式规则,自然转换失败。
从给出的样例可以看出,原始字符串是用.做千位分隔的百万级数值,转换后需要在去掉分隔符的数值基础上做10倍缩放,才能得到预期结果。
实现方法
方法1:针对已读入DataFrame的列做转换
先移除字符串中所有作为千分位的.,转成float类型后乘以10做单位换算即可,代码如下:
import pandas as pd # 构造测试样例数据 df = pd.DataFrame({ 'target_col': ['1.598.248', '1.323.373', '1.628.781', '1.551.707', '1.790.930', '1.877.985', '1.484.103'] }) # 执行转换逻辑 df['target_col'] = df['target_col'].str.replace('.', '', regex=False).astype(float) * 10
转换后输出结果和预期完全一致:
0 15982480.0 1 13233730.0 2 16287810.0 3 15517070.0 4 17909300.0 5 18779850.0 6 14841030.0 Name: target_col, dtype: float64
方法2:读文件时直接解析(推荐)
如果数据是从csv等结构化文件读入的,可以在读取阶段直接指定千分位分隔符,读入时就自动解析为数值类型,省去后续单独处理列的步骤:
# 读取文件时指定千分位分隔符为.,自动解析数值 df = pd.read_csv('your_data_path.csv', thousands='.') # 按单位要求做10倍缩放即可 df['target_col'] = df['target_col'] * 10
注意事项
- 字符串替换时加
regex=False是为了将.当做普通字符处理,避免被识别为正则通配符,提升处理效率 - 如果列中存在空值、异常非法值,可以搭配
pd.to_numeric(df['target_col'], errors='coerce')做转换,自动将非法值转为空值,避免整体转换报错
内容的提问来源于stack exchange,提问作者Shaima Hameed
相关产品推荐
相关产品推荐

