把DataFrame往Excel一导,结果领导打开直接炸了:金额变成科学计数法、日期变成一串数字、手机号前面1没了、百分比小数点跑了8位、千分位逗号全消失、列宽窄得像牙签……明明代码里写得好好的,一到Excel就变“鬼”。今天我们就把pd导出Excel为什么永远格式混乱、以及导出引擎到底该怎么配才一劳永逸、领导打开直接说“好看”,一次性彻底讲透。
一、pd导出Excel为什么格式混乱
这几个坑99%的翻车都中:
1、默认用默认引擎(openpyxl/xlsxwriter)不设任何格式
pandas直接把所有数字当float扔进去,Excel一看到1.111111111就自动变1.11E+11,手机号13100001234秒变1.31E+10;
2、日期被当成普通数字导出
pandas的datetime64[ns]导出后Excel当成普通数值,2025-01-01直接变成45623,用户还以为是密码;
3、百分比、千分位、货币符号全丢
0.0532本来想显示5.32%,导出后变成0.0532;1234567想显示1,234,567,导出后变成1234567;
4、列宽自动收缩,中文全变成
Excel默认列宽12个字符,中文占2个,一堆“运营部促销活动”直接显示一堆井号;
5、多个sheet导出时样式互相污染
同一个ExcelWriter对象重复用,第一个sheet设置了列宽,第二个sheet莫名其妙继承过去,或者直接报“worksheet already exists”。
二、pd导出引擎应怎样配置
下面这套配置直接抄走,保你导出一次领导夸一年:
1、万能配置模板(推荐直接封装成函数)
2、openpyxl版(需要保留原有格式、修改已有文件时用)
3、大表导出(>10万行)用这个最稳
三、pd导出Excel永不混乱终极铁律
一次好看不等于永远好看,彻底根治靠这五把锁:
1、公司内部彻底禁to_excel(excel_writer=...)不带参数
所有导出必须走上面封装好的to_excel_safe函数,谁敢手写直接扣绩效;
2、手机号、身份证号永远先转str再导出
3、所有金额字段在源头就存“分”
数据库、CSV里存整数分,导出时再/100,永别浮点误差;
4、模板化导出:先做好Excel母版,再用openpyxl写数据
美工把标题、边框、颜色、条件格式全做好,代码只负责把数字填进去,永不出错;
5、导出前必做“领导视角预览”
自己先打开Excel看一遍:有没有科学计数法?日期对不对?列宽够不够?不够立刻改代码。
总结
pd导出Excel为什么格式混乱pd导出引擎应怎样配置,说白了就是“默认引擎太懒、格式全靠Excel自己猜”这一个原因。只要我们坚决用xlsxwriter+万能配置模板、手机号转str、金额存分、模板化导出、导出前自己先看一眼这五板斧,导出来的Excel就能从“领导看了想骂人”彻底变成“领导直接拿去给董事会用”,再也不用半夜被叫起来“改个格式”。