news 2026/10/8 8:22:32

10-Pandas导出Excel

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
10-Pandas导出Excel

数据分析完了总得有个产出——给老板看、给自己留档、做报告,都需要一份规整的报表。这一篇教你把分析结果导出成专业的 Excel 文件,把前面学的读取、清洗、分组、筛选全部串起来,最后落地到一份漂漂亮亮的报表上。


先补上CSV这课

前面用过to_csv():

df.to_csv('结果.csv',index=False,encoding='utf-8-sig')

CSV 纯文本、兼容性无敌,但没有格式、不能分 Sheet、不能做透视表。自己存数据、给程序读够用;要给人看、做报告、交老板,还是 Excel 专业。


最基础的导出,一行代码

importpandasaspd df.to_excel('销售报表.xlsx',index=False)

前提是先装openpyxl(Pandas 底层靠它写 Excel):

pipinstallopenpyxl

index=False一定要加——不加的话导出的第一列是 0、1、2、3……的索引,老板看了会问你这列啥意思。


一个Excel放多张表

一份报表往往不止一张表(总览、明细、趋势),用pd.ExcelWriter:

importpandasaspd df_overview=pd.DataFrame({'类别':['电子产品','服装','食品'],'销售额':[12500,8900,6700],'订单数':[156,230,310]})df_monthly=pd.DataFrame({'月份':['1月','2月','3月'],'销售额':[28100,31200,29800]})withpd.ExcelWriter('销售报表.xlsx',engine='openpyxl')aswriter:df_overview.to_excel(writer,sheet_name='总览',index=False)df_monthly.to_excel(writer,sheet_name='月度趋势',index=False)

用with把写入包起来,每个 DataFrame 指定一个sheet_name。with 会自动保存关闭,不用手动writer.save()。


让报表看起来像那么回事

表头加个颜色、列宽调一下、金额加货币符号,瞬间就专业了。用openpyxl来做。

表头加粗加背景色

fromopenpyxlimportload_workbookfromopenpyxl.stylesimportFont,PatternFill,Alignment wb=load_workbook('销售报表.xlsx')ws=wb['总览']header_font=Font(bold=True,color='FFFFFF')header_fill=PatternFill(start_color='4472C4',end_color='4472C4',fill_type='solid')center=Alignment(horizontal='center',vertical='center')forcellinws[1]:# 遍历第一行表头cell.font=header_font cell.fill=header_fill cell.alignment=center wb.save('销售报表.xlsx')

调整列宽

ws.column_dimensions['A'].width=15ws.column_dimensions['B'].width=20

想自动适配内容宽度,就遍历每列找出最长内容,按长度算个宽度(最长内容 + 2 再乘 1.2)。

数字格式:金额加货币符号

forrowinrange(2,ws.max_row+1):ws.cell(row=row,column=2).number_format='¥#,##0.00'

¥#,##0.00= 人民币符号 + 千分位 + 两位小数,数字一下就"财务报表"起来了。


透视表:一行代码生成汇总报表

做分析最常用的交叉汇总——按类别看每个月的销售情况,pivot_table专门干这个:

importpandasaspd data={'日期':['2026-01-05','2026-01-12','2026-01-20','2026-02-03','2026-02-15','2026-01-08','2026-01-22','2026-02-10','2026-02-25','2026-03-05'],'类别':['电子产品','服装','食品','电子产品','服装','食品','电子产品','服装','食品','电子产品'],'金额':[2999,299,89.5,3599,459,128.8,1899,369,156.2,4299]}df=pd.DataFrame(data)df['月份']=pd.to_datetime(df['日期']).dt.month.astype(str)+'月'pivot=pd.pivot_table(df,values='金额',# 用什么值汇总index='类别',# 行columns='月份',# 列aggfunc='sum',# 聚合方式fill_value=0# 空值填0)print(pivot)

然后导出:pivot.to_excel('销售透视表.xlsx'),就是一份专业的交叉报表。

aggfunc还能用'mean''count''max';想同时看多个指标,传列表aggfunc=['sum','mean','count']。


按类别分别生成文件

给每个类别各出一份报表,用循环:

importos df=pd.DataFrame({'类别':['电子产品','服装','食品','电子产品','服装','食品'],'商品':['手机','T恤','零食','平板','裤子','饮料'],'金额':[2999,129,39.9,1999,259,5.5]})os.makedirs('分类报表',exist_ok=True)forcategory,groupindf.groupby('类别'):filename=f'分类报表/{category}销售明细.xlsx'group.to_excel(filename,index=False)

有多少个类别就生成多少个文件,全自动。想加格式美化?把 openpyxl 代码塞循环里就行。


真实运行效果

把上面的透视表、多 Sheet 导出和批量导出代码实际跑一遍,终端输出长这样:

截图依次展示了 pivot_table 按类别交叉汇总的结果、一个 Excel 里三个 Sheet 的回读确认,以及按类别批量生成的三个明细文件。


格式怎么选?一张表说清楚

格式优点缺点适用场景
CSV兼容性最好、文件小无格式、单表数据交换、给程序读
Excel多Sheet、带格式文件稍大、需Excel给人看、做报告
JSON结构化、程序易读人看不懂API交互、前后端传输
Pickle保留Pandas类型二进制、人读不了Python内部快速存取

简单记:给人看 → Excel;给程序读 → CSV 或 JSON;自己临时存中间结果 → Pickle。


这10篇下来,你能搞定什么

Python数据实战系列前10篇串一遍:

数据采集部分(5篇):requests入门、BeautifulSoup提取、表格抓取、CSV保存、爬虫工程化。

Pandas分析部分(5篇):读取CSV、数据清洗、分组统计、筛选归类、结果导出。

10篇学完,完整的数据分析流程你已经跑通:读取数据 → 清洗处理 → 分组分析 → 筛选挖掘 → 导出报表。从拿到一份原始数据,到产出一份能交差的报表,这条路自己走通了。接下来还会更新数据可视化——折线图看趋势、柱状图比高低、饼图看占比,把数字变成图表,说服力翻倍。


几个常见的坑

1. 导出的Excel是空的?大概率忘了保存。优先用with语句;手动创建的 ExcelWriter 记得writer.save()和writer.close()。

2. 中文文件名乱码?老版本环境偶发,尽量用英文文件名,或确保 Python 是 UTF-8 环境。

3. 报 PermissionError 文件被占用?十有八九是你把 Excel 开着,先关掉再跑代码。

4. 数字导出来是文本格式(左上角小三角)?df.dtypes看是不是 object 类型,先转数值:

df['金额']=pd.to_numeric(df['金额'],errors='coerce')

梅雅达编程工作室 · Python数据实战系列第10篇
分析做得再好,最后能交出去的那份报表,才算真的落地。到这儿,从采集到分析这条路你已经自己走通了一遍。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 8:17:56

购房的术语大全的庖丁解牛

总纲:购房,是人生账本里规模最大、周期最长的一次人生置换。拿出大额金钱资产、未来数十年的时间心力,换取居住使用权、不动产资产;同时背负长期刚性负债。它不只是一次商品买卖,会直接改写人生账本收支、改变35岁窗口…

作者头像 李华
网站建设 2026/10/8 8:16:05

ponytail技能插件详解:从配置到实战,打造智能助手定制工作流

最近收到好几条留言都在问同一个东西:ponytail。有人以为是个发型教程,有人以为是个浏览器插件,还有人在评论区吵说这名字根本不像是技术工具。实际上在AI助手圈子里,ponytail是一个近期讨论度突然涨起来的技能插件,简…

作者头像 李华
网站建设 2026/10/8 8:13:33

telegram - SKILL

name: telegram description: Integracao completa com Telegram Bot API. Setup com BotFather, mensagens, webhooks, inline keyboards, grupos, canais. Boilerplates Node.js e Python. risk: critical source: community date_added: ‘2026-03-06’ author: renat tags:…

作者头像 李华