如何将含混合千位/小数分隔符的Pandas字符串列转为浮点型?
解决混杂格式数字字符串转数值的问题
针对这种混合格式的数字字符串,核心要区分两种场景处理:
- 包含小数点
.的字符串:逗号是千位分隔符,直接移除即可 - 不包含小数点
.的字符串:逗号是小数分隔符,需要替换为小数点
用以下代码可以完整转换且不丢失数据:
import pandas as pd import numpy as np data = { 'NumberString': [ '1,234.56', '789,012.34', '45,678', '9,876.54', '3,210.98', '1,000,000.01', '123.45', '42,000', 'NaN' ] } df = pd.DataFrame(data) # 分规则处理字符串后转数值 df['Number'] = np.where( df['NumberString'].str.contains('\.'), df['NumberString'].str.replace(',', ''), df['NumberString'].str.replace(',', '.') ).pipe(pd.to_numeric, errors='coerce') # 可选:格式化输出为三位小数,匹配预期显示效果 print(df.style.format({'Number': '{:.3f}'}))
结果说明
运行后Number列完全匹配你的预期:
- 带千位分隔符的字符串(如
1,234.56)转为1234.56(格式化后显示为1234.560) - 用逗号做小数分隔的字符串(如
45,678)转为45.678 - 原始
NaN字符串自动转为数值型NaN
内容的提问来源于stack exchange,提问作者euh
相关产品推荐
相关产品推荐

