Python3中DataFrame的CIPCODE列小数前后补零格式化问题
解决DataFrame中CIPCODE列的格式化问题
方法一:使用字符串格式化函数(推荐)
直接利用Python的字符串格式化语法,一次性满足两个格式要求:
# 先确保列是数值类型(若之前转成字符串,先转回float) data['CIPCODE'] = data['CIPCODE'].astype(float) # 格式化:整数部分补零至2位,小数部分补零至4位 data['CIPCODE'] = data['CIPCODE'].apply(lambda x: "{:07.4f}".format(x))
- 格式说明:
{:07.4f}中,07表示总长度含小数点共7位,不足时在开头补零;.4f表示强制保留4位小数,位数不足补零。 - 效果示例:1.2 →
'01.2000',60.123 →'60.1230',5.6789 →'05.6789'
方法二:拆分整数与小数部分分别处理
如果需要更精细的控制逻辑,可以拆分两部分单独格式化后拼接:
# 转换为数值类型 data['CIPCODE'] = data['CIPCODE'].astype(float) # 提取整数部分并格式化为2位 integer_part = data['CIPCODE'].astype(int).apply(lambda x: f"{x:02d}") # 提取小数部分并格式化为4位(处理精度误差) decimal_part = (data['CIPCODE'] - data['CIPCODE'].astype(int)).round(4) * 10000 decimal_part = decimal_part.astype(int).apply(lambda x: f"{x:04d}") # 拼接最终结果 data['CIPCODE'] = integer_part + "." + decimal_part
原有代码无效的原因
你使用的str.zfill(7)仅会在字符串开头补零到总长度7位,但不会处理小数部分的位数:
- 例如原数值1.2转成字符串是
'1.2',zfill(7)会得到'0001.2',既不符合整数部分2位的要求,也没补全小数部分到4位。
内容的提问来源于stack exchange,提问作者analyst92
相关产品推荐
相关产品推荐

