Pandas如何将object类型列转换为decimal(3,9)格式数值
pandas object类型定长字符串转decimal(3,9)实现方案
你的WEGING列是固定12位长度的字符串,转换规则为前3位为整数部分、后9位为小数部分,以下是可直接运行的实现方式:
方案1:转换为高精度Decimal类型(推荐,符合decimal(3,9)精度要求)
使用Python标准库Decimal做类型转换,完全避免浮点数精度损失,适合后续数值计算场景:
from decimal import Decimal # 固定位置插入小数点后转Decimal类型 df['WEGING'] = df['WEGING'].apply(lambda s: Decimal(f"{s[:3]}.{s[3:]}"))
方案2:转换为固定格式字符串(匹配给出的展示样例)
如果仅需要得到001.191833837这种带前导零的展示效果,不需要做数值运算,可以直接做字符串切片拼接:
df['WEGING'] = df['WEGING'].str[:3] + '.' + df['WEGING'].str[3:]
校验处理结果
执行以下代码查看前5行,和预期结果完全一致:
print(df['WEGING'].head())
输出:
0 001.191833837 1 001.083340239 2 000.716901420 3 001.191833837 4 001.191833837 Name: WEGING, dtype: object
注意事项
- 处理前建议先校验字段长度,避免脏数据导致转换错误:执行
df['WEGING'].str.len().value_counts(),确认所有值长度均为12位再执行转换。 - 禁止直接使用
float类型做转换,浮点数存储9位小数会出现精度丢失问题,例如001.191833837转float后可能出现1.191833836999999的误差。
内容的提问来源于stack exchange,提问作者ABBOV
相关产品推荐
相关产品推荐

