如何将Python DataFrame中的十进制数转换为指定10位格式?
解决方案
核心思路
把原数字放大10^8倍(相当于去掉小数点并保留8位小数),再格式化为10位带前导零的字符串,确保最终结果是2位整数部分+8位小数部分的无小数点格式。
直接实现代码
如果不需要封装函数,可直接对DataFrame列做向量式操作(效率更高):
# 处理PU Parte列,替换"原列名1"为你实际的列名 base['PU Parte'] = (base['原列名1'].round(8) * 10**8).astype(int).astype(str).str.zfill(10) # 处理PU ContraParte列,替换"原列名2"为你实际的列名 base['PU ContraParte'] = (base['原列名2'].round(8) * 10**8).astype(int).astype(str).str.zfill(10)
整合到calculator_pu函数
如果要把逻辑封装到你已有的calculator_pu函数中,可这样写:
def calculator_pu(df, source_col, target_col): # 四舍五入到8位小数避免精度误差,再转换为目标格式 df[target_col] = (df[source_col].round(8) * 10**8).astype(int).astype(str).str.zfill(10) return df # 调用函数处理两列 base = calculator_pu(base, '原列名1', 'PU Parte') base = calculator_pu(base, '原列名2', 'PU ContraParte')
步骤说明
.round(8):确保小数部分最多保留8位,解决浮点数精度导致的多余位数问题*10**8:将原数字放大100000000倍,把小数点后8位移到整数位(比如1.02234583变为102234583).astype(int):转换为整数,彻底去除小数部分.astype(str):转为字符串类型,方便后续补零.str.zfill(10):用前导零填充至10位长度,自动补全整数部分的前导零(比如102234583变为0102234583)
测试验证
- 原数值
1.02234583→ 处理后得到0102234583 - 原数值
0.98232131→ 处理后得到0098232131 - 原整数
5→ 处理后得到0500000000(符合2位整数+8位小数的格式要求)
内容的提问来源于stack exchange,提问作者pedrosjo
相关产品推荐
相关产品推荐

