Python写入CSV文件浮点数出现千位分隔符问题排查解决
问题原因
- 问题和Python的csv写入逻辑无关:Python内置
csv模块写入浮点数时,会直接输出浮点数的原生字符串表示,不会自动添加千位分隔符。用纯文本编辑器(记事本、VS Code等)打开生成的CSV文件就能验证,文件内存储的数值是正常格式,不存在分隔符错位。 - 异常来自Excel的默认解析逻辑:如果你的系统区域设置默认将
.定义为千位分隔符、,定义为小数点(常见于欧洲部分区域的默认配置),双击直接打开CSV时,Excel会自动套用该区域规则,把原数值里的小数点识别成千位分隔符,最终出现1500.0显示为15.000的错误。
解决方法
方案1:通过Excel导入功能手动指定解析规则(不修改原CSV文件)
不要直接双击打开CSV,按导入流程操作即可正常识别:
- 新建空白Excel工作簿
- 点击顶部「数据」选项卡,选择「自文本/自CSV」,选中目标CSV文件
- 在弹出的导入配置窗口中,将区域设置修改为「中文(中国)」或「英语(美国)」,确认小数点分隔符为
.、千位分隔符为,后点击加载,数值即可正常显示。
方案2:写入CSV时格式化数值为固定格式字符串
如果需要双击CSV就能直接在Excel中正常打开,可以在写入环节将浮点数格式化为固定小数位的字符串,规避Excel的错误自动解析,参考代码如下:
import csv import numpy as np arr = np.random.rand(10, 10) # 生成10x10的随机数数组 arr = arr * 1000000 # 将数值放大100万倍 arr_list = arr.tolist() # 转换为嵌套列表 # 写入CSV时统一格式化浮点数,可按需调整保留的小数位数 with open("arr_list.csv", "w", encoding="UTF8", newline="") as f: writer = csv.writer(f) for row in arr_list: formatted_row = [f"{num:.1f}" for num in row] writer.writerow(formatted_row)
方案3:修改系统全局区域设置
如果需要频繁处理小数点为.的CSV文件,可以直接修改系统默认区域格式:
- Windows系统:打开「设置-时间和语言-语言和区域-管理语言设置-更改系统区域设置」,将格式调整为「中文(简体,中国)」,重启后Excel就会默认以
.作为小数点解析文件。
内容的提问来源于stack exchange,提问作者Tim Kerremans
相关产品推荐
相关产品推荐

