Python 数据处理进阶(十九)Pandas 与 Excel 的分工:哪些活该留给 Excel

发布时间:2026/10/31 7:03:34

Python 数据处理进阶(十九)Pandas 与 Excel 的分工:哪些活该留给 Excel 写在前面前 18 篇讲了一路 Pandas 有多能干这一篇唱个反调有些活Excel 确实比 Pandas 合适。比如老板要一份「能自己改数、图表跟着变」的表比如财务要按公式核对每一行比如一份文件要在群里传阅、每个人签个字。这些场景硬用 Python 做做出来的东西没人会用。核心判断只有一句话Pandas 负责「算」Excel 负责「给人用」。具体怎么分工这篇用代码把两边的边界走一遍。先确认示例数据在手边importosimportmkdataifnotos.path.exists(data/sales.csv):mkdata.main()print(示例数据就绪,os.path.exists(data/sales.csv))这段会检查第 1 篇生成的data/目录在不在不在就自动补一次已经有数据时只会打印一行示例数据就绪 True不影响后面的结果。一、Excel 的杀手锏公式会自己重算Pandas 算完就是静态值改一个数要重跑全流程Excel 里改一个单元格整张表的公式自动重算。这是它不可替代的地方。下面用 openpyxl 写一个带公式的小表再用 pandas 读回来看看会发生什么。importosimportpandasaspdfromopenpyxlimportWorkbook,load_workbook os.makedirs(output,exist_okTrue)pathoutput/公式演示.xlsxwbWorkbook()wswb.active ws.title报价ws.append([产品,数量,单价,金额])rows[(A-笔记本,3,49.9),(B-鼠标,5,29.9),(D-显示器,2,599.0)]fori,(name,qty,price)inenumerate(rows,start2):ws.append([name,qty,price,fB{i}*C{i}])# 金额写成公式ws.append([合计,None,None,SUM(D2:D4)])wb.save(path)print(已写入公式,path)# pandas 读公式没被 Excel 计算过读到的是空值df_readpd.read_excel(path,sheet_name报价)print(pandas 直接读)print(df_read.to_string(indexFalse))print(----)# data_onlyTrue读缓存的计算结果没有缓存也是空df_cachedpd.read_excel(path,sheet_name报价,engineopenpyxl).fillna((空))print(把 NaN 标出来看)print(df_cached.to_string(indexFalse))已写入公式 output/公式演示.xlsx pandas 直接读 产品 数量 单价 金额 A-笔记本 3.0 49.9 NaN B-鼠标 5.0 29.9 NaN D-显示器 2.0 599.0 NaN 合计 NaN NaN NaN ---- 把 NaN 标出来看 产品 数量 单价 金额 A-笔记本 3.0 49.9 (空) B-鼠标 5.0 29.9 (空) D-显示器 2.0 599.0 (空) 合计 (空) (空) (空)结论很关键openpyxl 写进去的公式文件里没有「计算结果」除非用 Excel 打开过并保存。所以你要做「给别人改的表」→ 写公式让人用 Excel 打开你要做「自己分析的数据」→ 别绕 Excelpandas直接算完再写值你要读别人表里的公式结果 → 用openpyxl.load_workbook(path, data_onlyTrue)前提是那个文件被 Excel 保存过。fromopenpyxlimportload_workbook pathoutput/公式演示.xlsxwbload_workbook(path,data_onlyTrue)# 只读缓存值wswb[报价]print(data_only 读到的 D 列)forrowinws.iter_rows(min_row2,values_onlyTrue):print( ,row)data_only 读到的 D 列 (A-笔记本, 3, 49.9, None) (B-鼠标, 5, 29.9, None) (D-显示器, 2, 599, None) (合计, None, None, None)二、透视表两边各怎么写「按城市和产品算销售额」这个需求Excel 是拖字段Pandas 是pivot_table。下面在 Excel 里写出透视结果再用 Pandas 算一遍对比两者。importpandasaspd dfpd.read_csv(data/sales.csv,encodingutf-8-sig)# Pandas 版透视表行城市列产品值金额求和ptpd.pivot_table(df,index城市,columns产品,values金额,aggfuncsum,fill_value0,marginsTrue,# 加一行/一列合计对应 Excel 的「总计」margins_name总计,).round(2)print(pandas 的 pivot_table)print(pt.to_string())print(----)# 写到 Excel方便对照着看pt.to_excel(output/透视表_pandas版.xlsx,sheet_name透视)print(已导出 output/透视表_pandas版.xlsx)pandas 的 pivot_table 产品 A-笔记本 B-鼠标 C-键盘 D-显示器 总计 城市 上海 0.0 299.0 1246.0 0.0 1545.0 北京 49.9 0.0 178.0 0.0 227.9 广州 0.0 179.4 356.0 0.0 535.4 杭州 349.3 59.8 0.0 2396.0 2805.1 总计 399.2 538.2 1780.0 2396.0 5113.4 ---- 已导出 output/透视表_pandas版.xlsx对照记住三句话Excel 的「行/列/值」pivot_table(index, columns, values)Excel 的「值字段设置求和/计数/平均」aggfuncExcel 的「总计」marginsTrue。pivot_table默认会丢掉缺失分组要保留就加dropnaFalse——这就是为什么表里那个「空城市」在 pandas 版里能看到在手工透视表里常被忽略。三、导出「给人用」的 Excel三个要素既然是交付就不能只写数据。至少做到三点表头清楚、列宽合适、关键列有格式。importosimportpandasaspdfromopenpyxlimportload_workbookfromopenpyxl.stylesimportAlignment,Font,PatternFillfromopenpyxl.utilsimportget_column_letter dfpd.read_csv(data/sales.csv,encodingutf-8-sig)df[金额]df[金额].fillna((df[数量]*df[单价]).round(2))cleandf[df[金额]0].drop_duplicates()os.makedirs(output,exist_okTrue)pathoutput/交付版_销售明细.xlsxwithpd.ExcelWriter(path,engineopenpyxl)aswriter:clean.to_excel(writer,sheet_name明细,indexFalse)clean.groupby(城市,dropnaFalse)[金额].sum().round(2).reset_index().to_excel(writer,sheet_name按城市,indexFalse)bookload_workbook(path)forwsinbook.worksheets:forcellinws[1]:cell.fillPatternFill(solid,fgColor0F766E)cell.fontFont(colorFFFFFF,boldTrue)cell.alignmentAlignment(horizontalcenter)fori,colinenumerate(ws.iter_cols(values_onlyTrue),start1):widthmax(len(str(v))*2forvincol)ws.column_dimensions[get_column_letter(i)].widthmin(max(width4,10),32)ws.freeze_panesA2# 金额列第 7 列加千分位ifws.title明细:forcellinws[G][1:]:cell.number_format#,##0.00book.save(path)print(已导出,path)print(sheet,load_workbook(path).sheetnames)已导出 output/交付版_销售明细.xlsx sheet [明细, 按城市]格式三件套的取舍表头填色让人一眼分清表头列宽避免####冻结首行让滚动时不丢字段名。这三样加上number_format就是「看起来是正规交付物」的最低标准。四、分工表照着选就行需求选 Pandas选 Excel数据量 10 万行以上✅会卡每周重复做同一种汇总✅ 脚本跑手工重做需要保留公式、让人改数✅ 公式自动重算需要图表随数据联动✅多人传阅、要签字审批✅要合并几十个文件✅concat手工粘贴复杂文本清洗✅str系列公式很痛苦一次性临时分析都行✅ 更快交付物要「看起来正式」生成后交 Excel✅图 1按「数据量」和「人工协作需求」画一个象限就能判断该用 Pandas 还是 Excel四象限中间那条线不是硬边界是经验分水岭。一句话总结Pandas 管计算和清洗Excel 管呈现和协作。最好的形态是两者接力——Pandas 算完、格式化成 xlsx、交给 Excel 做最后的图表和分发。常见问题Q1read_excel读公式列全是 NaN。两个原因一是文件从没用 Excel 打开保存过没有缓存值二是你读的是公式本身。想读缓存值load_workbook(path, data_onlyTrue)然后逐行取pandas.read_excel默认读的是公式文本或空值。Q2用 openpyxl 打开文件报BadZipFile。这文件不是真正的 xlsx可能是 CSV 改了后缀或者导出失败了。先file看一眼或pd.read_csv试试。Q3写公式时行列引用总是错位。记住 openpyxl 是 1-based、而且表头占第 1 行数据从第 2 行开始fB{i}*C{i}里的i要用enumerate(..., start2)。小结这一篇的核心不是学新 API而是建立边界感Pandas 算得快、适合批量但结果是静态的Excel 算得慢、但公式会重算、图表会联动、人能直接改。让 Pandas 干它擅长的清洗、汇总、批量让 Excel 干它擅长的呈现、协作、交互中间用to_excel和read_excel交接。下一篇聊一个更硬核的话题交出数据之前怎么用 10 个校验确保它没问题。
延伸阅读

更多相关文章

2026/10/31 7:03:34

什么是企业战略解码?

很多企业不缺战略。 年度经营会上,管理层对增长、市场拓展、利润提升都有明确规划。但到了部门层面,各自忙着完成自己的指标;到了员工层面,又变成了日常事务。 最终,企业有战略,部门有目标,员…

2026/10/31 7:03:34

简历高频基础问题

模块分层和容器预热是做了什么,数据怎么测得模块分层是只把首屏视口内的组件打入主bundle,其余需要滚动才进入视口的组件通过defineAsyncComponent 动态import导入生成独立chunk,滚动到区域再加载,提高首屏加载速度容器预热主要是…

2026/10/31 8:08:41

开源机器人集群:多机协同的通信、编队控制与真机落地

简介:KKSwarm 是一套面向机器人集群研究与教学的开源协作系统,由易科机器人实验室与阿木实验室联合打造,聚焦多机协同中的通信、编队、导航与任务分配等核心问题,适合高校实验室、ROS 开发者及集群算法学习者作为可复现的工程底座…

2026/10/31 8:08:41

企业级PHP智能客服系统架构与AI实现详解

1. 项目概述:企业级PHP智能客服系统的核心价值这套企业级PHP智能客服系统源码,本质上是一个面向中大型企业的AI服务中台解决方案。我在实际部署过程中发现,它完美解决了传统客服系统面临的三个核心痛点:首先是技术自主可控问题&am…

2026/10/31 8:08:41

羽毛球俱乐部数字化转型:智能硬件与数据分析实践

1. 项目概述:羽毛球俱乐部的科技化转型实践 在宁夏吴忠市,一家名为"码上羽毛球"的俱乐部正通过"专业教练智能科技"的创新模式改写传统体育培训的运营方式。作为深耕体育产业十余年的从业者,我实地探访后发现,…

2026/10/31 8:08:41

ORI实时语音输入法:Windows开源语音转文字工具原理与配置指南

1. 从“打字”到“说话”:ORI 想解决的到底是什么问题 如果你每天在 Windows 上敲字超过两个小时,大概率经历过这几种崩溃瞬间:会议纪要记到一半手指跟不上语速、写代码注释时中英文切换到手抽筋、给客户回长消息时脑子里想好了三句话结果打完…

2026/10/31 8:03:40

Redis核心数据结构与高性能应用实践

1. Redis数据库概述 Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,常被用作数据库、缓存和消息中间件。它由Salvatore Sanfilippo于2009年开发,凭借其出色的性能和灵活的数据结构支持,迅…

2026/10/30 20:55:10

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/30 20:55:10

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/30 20:55:09

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/31 0:02:41

猫狗目标检测数据集:VOC/COCO/YOLO三格式一体化实战包

简介:本资源是一套面向计算机视觉初学者与YOLO目标检测实践者的猫狗图像数据集及配套开发工具包,专为快速上手目标检测模型训练而设计。资源包含1000张真实场景高清猫狗图片,标注质量高,同时提供VOC(XML)、…

2026/10/31 0:02:41

HDU2017多校标程复现:算法竞赛工程化真题沙盒

简介:本资源为2017年HDU多校联合训练第一场官方配套资料,面向ACM程序设计竞赛备赛学生、算法爱好者及高校编程集训队成员,旨在提供权威解题参考与完整测试验证环境。压缩包共40个文件,含15份C标程(覆盖全部赛题&#x…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑