10年青少年编程教育经验 | 资深Python专家
前大厂技术总监 | 现编程教育创业者
专注青少年编程教育技能提升

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