职场效率神器:Python自动化办公,轻松搞定Excel中那些让人头秃的统计(实战案例)

56 阅读6分钟

大家好呀,我是你们的花姐~(转着咖啡杯,享受一下瘫坐工位的惬意时光)今天要聊个超真实的故事——上周五,快下班的时候,小美满脸愁容地抓住了我的袖子,眼睛红得像刚看完《长月烬明》的大结局:“花姐,老板让我每天统计各区销冠,我都快累成‘数据苦工’了!”😂 看着她那屏幕上密密麻麻的Excel表格,手动刷着VLOOKUP公式,简直就是现代版的《清明上河图》啊!今天就让Python帮她解救这一切!


一、手动统计的七宗罪(小美的血泪史)

  1. 数据分组地狱:每天要切换30+次筛选条件(大区×产品型号)
  2. 排名修罗场:每次都要手动标红TOP3,手抖标错就要重头再来
  3. 格式强迫症:合并单元格、调整边框、改字体颜色...美工看了都沉默
  4. 邮件焦虑症:每天09:05准时被老板钉钉:"报表呢?"(血压飙升预警💢)

二、Python自动化四步曲(带薪摸鱼指南)

先来看这个让运营小美崩溃的销售数据表(为了保护当事人,已做脱敏处理):

image.png 老板要求:按【大区+产品型号】每天统计销售额TOP3的业务员,并生成汇总报表。用Excel操作的话...👇 传统做法: 1️⃣ 先插入数据透视表 2️⃣ 手动拖拽字段到行/列 3️⃣ 设置值字段为销售额求和 4️⃣ 添加筛选条件 5️⃣ 复制结果到新表... (后面的花姐已经编不下去了 🐢)

而用Python,只需要一杯咖啡的时间!☕ 上代码!

🪓 第1步:装备你的Python武器库

# 先安装必备库(装过的老铁可以跳过)
pip install openpyxl pandas

💡 花姐小贴士:记得用虚拟环境哦!不然库多了会打架的~

python -m venv excel_env
source excel_env/bin/activate  # Linux/Mac
excel_env\Scripts\activate.bat  # Windows

🎯 第2步:读取数据 - 让Excel自己爬进代码里

import pandas as pd

# 用pandas轻松读取Excel数据,无需担心中文表头
df = pd.read_excel('2024销售数据.xlsx', engine='openpyxl') 

print(df.head(3))  # 先偷看前3行

输出结果如下

     销售日期  大区  业务员      产品型号   销售额         联系电话
0  2024-03-23  华北  刘坤*  PROD-006  2179  145****2056
1  2024-09-11  华西  涂军*  PROD-020  6915  136****8452
2  2024-11-11  华南  侯桂*  PROD-010  3300  132****7906
  • 花姐小贴士💡:遇到编码报错时加个encoding='utf-8'保平安

🌀 第3步:分组统计 - 像整理衣柜一样整理数据

我们需要统计每个大区、每个产品型号的销售额TOP 3业务员。为此,我们可以按以下步骤操作:

  1. 按大区和产品型号分组:将数据按照“大区”和“产品型号”分组,计算每组的总销售额。
  2. 按销售额排序:每个大区+产品型号的组合中,按销售额降序排序,选出前3名。
  3. 生成报告:将结果整理成适合发给老板的报告。
# 按大区和产品型号分组,计算每个组合的销售总额
grouped = df.groupby(['大区', '产品型号', '业务员']).agg({'销售额': 'sum'}).reset_index()
print(grouped.head(10)) # 打印下前10条数据

输出结果

   大区      产品型号  业务员    销售额
0  华东  PROD-001  何桂*   2450
1  华东  PROD-001  侯婷*   8311
2  华东  PROD-001  侯桂*   4273
3  华东  PROD-001  傅玉*   7516
4  华东  PROD-001  刁秀*   1517
5  华东  PROD-001  刘刚*   8889
6  华东  PROD-001  刘颖*   9597
7  华东  PROD-001  周桂*   5331
8  华东  PROD-001  周红*  17523
9  华东  PROD-001  国玉*    625

我通过Excel手动统计了下华东大区、产品PROD-001中周红*的销售数据,17523和Python计算的一致,说明到目前程序的计算是正确的。

image.png

接下来给分组数据做个排序,找出TOP3的销冠

# 按销售额降序排序,选出每组的前3名
top_3_sales = grouped.sort_values(['大区', '产品型号', '销售额'], ascending=[True, True, False])

# 给数据增加一个排名的列
top_3_sales['排名'] = top_3_sales.groupby(['大区', '产品型号']).cumcount() + 1

# 过滤出排名前3的销售员
top_3_sales_filtered = top_3_sales[top_3_sales['排名'] <= 3]

# 打印前几行看看结果
print(top_3_sales_filtered.head(10))

输出结果

     大区      产品型号  业务员    销售额  排名
48   华东  PROD-001  陈秀*  22082   1
8    华东  PROD-001  周红*  17523   2
19   华东  PROD-001  李坤*  14305   3
82   华东  PROD-002  裴金*  22534   1
57   华东  PROD-002  刁秀*  14183   2
92   华东  PROD-002  韩飞*  14079   3
105  华东  PROD-003  张坤*  20987   1
95   华东  PROD-003  侯婷*  16379   2
106  华东  PROD-003  张璐*  14250   3
140  华东  PROD-004  侯婷*  25611   1

这次我们用excel的透视表对上面的数据做个验证,在华东地区、PROD-001产品的销冠和上面用Python的统计结果是一致的。

image.png

📄 第四步:优雅输出报表

# 将结果保存到新的Excel文件
from openpyxl.styles import NamedStyle, Font, PatternFill
def save_to_excel(data, output_file):
    # 用openpyxl引擎写入(避免格式丢失)
    writer = pd.ExcelWriter(output_file, engine='openpyxl')
    
    # 先存数据
    data.to_excel(writer, sheet_name='汇总报表', index=False)
    
    # 再玩点花样:设置表头样式
    worksheet = writer.sheets['汇总报表']
    
    # 设置标题行背景色(老板最爱的商务蓝 💼)
    header_style = NamedStyle(name="header_style", 
                            fill=PatternFill(start_color="4F81BD", fill_type="solid"),
                            font=Font(color="FFFFFF", bold=True))
    
    for cell in worksheet[1]:
        cell.style = header_style
    
    # 自动调整列宽(强迫症福音)
    for column in worksheet.columns:
        max_length = max(len(str(cell.value)) for cell in column)
        worksheet.column_dimensions[column[0].column_letter].width = max_length + 5
    
    writer.close()
    print("报告生成完毕")

# 保存我们的战果 🏆
save_to_excel(top_3_sales_filtered, '销售排行榜.xlsx')

来看看销售排行榜最后的生成结果吧

image.png

三、避坑指南(血与泪的经验)

  1. 时间格式陷阱:用pd.to_datetime()统一日期格式,避免出现"2023/7/1"和"2023-07-01"的混战
  2. 分组暗礁groupby之后一定要reset_index(),否则索引会变成俄罗斯套娃

四、摸鱼后记

昨天路过小美工位,发现她显示器上赫然打开着《长相思》最新集,而电脑右下角的Outlook正在优雅地自动发送当日报告。她神秘兮兮地递给我一杯奶茶:"花姐,我现在每天能摸鱼2小时,这是 '摸鱼许可证' 工本费~"

所以啊,与其抱怨工作重复,不如让Python成为你的赛博奴隶(老板看不见我老板看不见我)。最后送大家一句花姐座右铭:"代码写得好,摸鱼摸到老!" 🎉