【从零开始学excel办公自动化】第十五课:Excel透视表太慢?Pandas 3行代码搞定,效率提升100倍
- 2026-11-12 05:30:27
10年青少年编程教育经验 | 资深Python专家
前大厂技术总监 | 现编程教育创业者
专注青少年编程教育技能提升

大家好,我是浩浩学编程的方老师,这是excel办公自动化系列的第15课。
前面方老师带大家学习了:安装python和pandas以及番外篇1安装开发工具vscode。
前面学了【从零开始学excel办公自动化】第七课:如何在5秒内将一个excel里面的20个员工工作表里的考核数据合并到一个工作表里的操作,大家可以去回顾一下。
ps:后台回复:“excel课程”获取到目前为止课程的测试文件(失效的话,在留言区留言
)。
今日技能
📱 如何通过pandas的透视图方式来解决大数据的多维度分析
大家试想一下这样的场景:
面对几万甚至几十万行的销售数据,领导要求下班前给分析结果,但是Excel卡到怀疑人生,透视表拖来拖去,电脑风扇狂转,但温度却降不下来,最后还没保存就崩溃了...
所以,方老师建议大家别再用Excel折磨自己了!
今天方老师这一招,彻底解决这个问题。是什么呢?
就是Pandas的pivot_table(透视表),没错,excel也有这个,大家应该都不陌生。
通过它,3行代码就能搞定复杂的数据分析,效率直接提升100倍。
一、为什么要用Pandas透视表?
先看一个真实场景
假设你有一份销售数据,包含:日期、销售员、产品类别、销售额。
领导让你下班前给出结果:每个销售员每个季度的销售额汇总
如果用Excel来操作,那流程差不多是这样的:
先插入辅助列提取季度 选中数据,插入透视表 把销售员拖到行,季度拖到列,销售额拖到值 数据量大时,每拖一下都要等几秒甚至几十秒
Pandas的做法:
import pandas as pd# 读取数据df = pd.read_excel('sales_data.xlsx')# 提取季度df['季度'] = df['日期'].dt.quarter# 一行代码生成透视表result = df.pivot_table(values='销售额',index='销售员',columns='季度',aggfunc='sum',fill_value=0)
搞定!就这3行代码。
二、pivot_table核心参数详解
记住这5个参数,走遍天下都不怕:
df.pivot_table(values=['销售额', '数量'],# 要统计的列等index='销售员',# 行分类,比如地区等columns='季度',# 列分类、月份等aggfunc='sum',# 统计方式:比如mean、count等fill_value=0# 空值填充)
实战案例1:单维度销售分析
统计每个地区每个产品类别的平均销售额
# 统计每个地区每个产品类别的平均销售额result = df.pivot_table(values='销售额',index='地区',columns='产品类别',aggfunc='mean',fill_value=0)
实战案例2:多层索引分析、
按销售员和季度双层分组,统计销售额和订单数
其中销售额用sum(求和),订单数用count(计数)
# 按销售员和季度双层分组,统计销售额和订单数result = df.pivot_table(values=['销售额', '订单数'],index=['销售员', '季度'],aggfunc={'销售额': 'sum','订单数': 'count'})
实战案例3:添加总计行/列
使用 margins参数来添加按列总计
# 添加行列总计result = df.pivot_table(values='销售额',index='销售员',columns='季度',aggfunc='sum',margins=True,# 添加总计margins_name='总计')
三、初学者最容易踩的5个坑
坑1:数据类型不对
❌ 错误:销售额列是字符串类型,无法求和
✅ 解决:先做类型转换
# 先转换数据类型df['销售额'] = df['销售额'].astype(float)
坑2:忘记处理空值
❌ 错误:透视表中出现NaN,影响后续计算
✅ 解决:用fill_value参数填充空值
# 用fill_value参数填充空值result = df.pivot_table(..., fill_value=0)
坑3:重复数据导致统计错误
❌ 错误:同一笔订单被重复计算
✅ 解决:先去重
# 先去重df = df.drop_duplicates()# 或者用aggfunc='mean'等避免重复累加
坑4:索引太多导致表格太宽
❌ 错误:把日期作为columns,结果表格可能会有365列
✅ 解决:
# 先对日期进行分组df['月份'] = df['日期'].dt.to_period('M')# 再用月份作为columnsresult = df.pivot_table(...,columns='月份')
坑5:混淆pivot和pivot_table
❌ 错误:用pivot做复杂汇总,结果报错
✅ 记住区别:
pivot():只是重塑数据,不能做聚合pivot_table():可以做聚合统计(sum、mean等)
做数据分析用pivot_table就对了!
四、3个办公场景实战
场景1:月度销售报表一行代码生成月度销售报表
# 生成月度销售报表report = df.pivot_table(values='销售额',index='销售员',columns=df['日期'].dt.month,aggfunc='sum',fill_value=0)# 导出到Excelreport.to_excel('月度销售报表.xlsx')
场景2:库存周转分析
统计每个仓库每个产品的库存周转情况
# 统计每个仓库每个产品的库存周转情况inventory_analysis = df.pivot_table(values=['入库量', '出库量', '库存量'],index=['仓库', '产品名称'],aggfunc='sum',fill_value=0)# 计算周转率inventory_analysis['周转率'] = (inventory_analysis['出库量']/ inventory_analysis['库存量'])
场景3:员工业绩排名
# 统计员工业绩并排序performance = df.pivot_table(values='销售额',index='销售员',aggfunc='sum').sort_values('销售额',ascending=False)# 添加排名performance['排名'] = range(1,len(performance) + 1)
五、效率对比:Excel vs Pandas
以10万行数据为例:
结论:数据量超过10万行,Pandas完胜。
写在最后
学会pandas的pivot_table,你就掌握了数据分析的尖端武器。
记住下面这三个参数:
values放数字类型字段 —— 要统计的数值列 index放分类型字段 —— 想按什么维度看 - aggfunc定规则 —— 求和(sum)、平均(mean)还是计数(count)
好了,这个透视图函数功能就介绍到这里。
🎉 同学们,看到这里,你学会了吗!
方老师说: 🚀 现在屏幕前的你已经比90%的同龄人领先一步了!
接下来可以:
介绍一下pandas相关数据分析中常用统计指标(下期教程教!)
⚠️ 遇到问题?评论区甩截图,方老师尽量在24小时内回复!
如果这篇文章对你有帮助,记得点个「推荐」,转发给还在用Excel加班的同事!
