news 2026/4/16 12:56:05

Python实战拒绝加班!5分钟搞定Excel数据合并与可视化分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python实战拒绝加班!5分钟搞定Excel数据合并与可视化分析

摘要:还在手动复制粘贴合并几十个Excel表格?还在为每天重复的日报、周报头秃?本文将带你通过一个真实的Python实战案例,利用PandasMatplotlib库,实现多文件自动读取、数据清洗、合并汇总以及生成可视化报表。让代码帮你工作,按时下班!


🔍 实战背景

作为一名“打工人”,我们经常会遇到这样的场景:

  1. 每个月都要从各个部门收集销售数据(例如sales_jan.xlsx,sales_feb.xlsx...)。

  2. 需要手动将这些表格合并到一个总表中。

  3. 根据总表数据,计算每个产品的销售总额。

  4. 画出柱状图,贴到PPT里汇报。

如果只有两三个文件还好,但如果有几十个文件,或者每天都要做一次,手动处理不仅效率低,还容易出错。今天,我们就用不到50行Python代码彻底解决这个问题。


🛠️ 环境准备

在开始之前,请确保你的Python环境中安装了以下核心库。如果没有安装,请在终端(Terminal/CMD)执行以下命令:

pip install pandas matplotlib openpyxl
  • Pandas: Python数据分析的神器,处理表格数据的首选。

  • Matplotlib: 最经典的绘图库,用于生成可视化图表。

  • Openpyxl: Pandas读取/写入Excel文件即需要依赖的引擎。


💻 代码实战步骤

我们将整个流程分为三个模块:数据构造(模拟环境)数据合并与清洗数据可视化

1. 模拟数据(如果你已有数据可跳过)

为了演示方便,我们先写一段脚本,在当前目录下生成3个模拟的月度销售Excel文件。

import pandas as pd import random # 创建模拟数据的函数 def create_dummy_data(): products = ['键盘', '鼠标', '显示器', '显卡', '硬盘'] months = ['1月', '2月', '3月'] for month in months: data = { '产品名称': [random.choice(products) for _ in range(20)], '销售数量': [random.randint(1, 10) for _ in range(20)], '单价': [random.randint(100, 3000) for _ in range(20)], '月份': [month] * 20 } df = pd.DataFrame(data) # 计算销售额 df['销售额'] = df['销售数量'] * df['单价'] # 保存为Excel file_name = f'销售数据_{month}.xlsx' df.to_excel(file_name, index=False) print(f"✅ 已生成模拟文件: {file_name}") if __name__ == '__main__': create_dummy_data()

2. 核心逻辑:批量合并与分析

这是本文的重头戏。我们将使用glob模块查找文件,用pandas进行合并。

import pandas as pd import glob import os import matplotlib.pyplot as plt # 设置matplotlib支持中文显示(根据系统不同可能需要调整字体) plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 def process_sales_data(): # 1. 获取所有销售数据文件 # 假设文件都以 "销售数据_" 开头 file_list = glob.glob('销售数据_*.xlsx') if not file_list: print("❌ 未找到相关Excel文件,请检查路径。") return print(f"📂 发现 {len(file_list)} 个文件,准备合并...") # 2. 循环读取并合并 all_data = [] for file in file_list: try: df = pd.read_excel(file) all_data.append(df) except Exception as e: print(f"⚠️ 读取 {file} 失败: {e}") # 使用 concat 合并所有 DataFrame merged_df = pd.concat(all_data, ignore_index=True) print(f"📊 合并完成!总数据行数: {len(merged_df)}") # 3. 数据分析:按产品汇总销售额 # group by '产品名称', sum '销售额' summary = merged_df.groupby('产品名称')['销售额'].sum().sort_values(ascending=False) print("\n--- 销售排行榜 (Top 5) ---") print(summary.head()) return summary, merged_df # 执行处理 summary_data, raw_data = process_sales_data()

3. 数据可视化:一键生成报表图

有了处理好的summary_data,我们可以直接画图并保存。

def visualize_data(data): # 创建画布 plt.figure(figsize=(10, 6)) # 绘制柱状图 # data.index 是产品名称, data.values 是销售总额 bars = plt.bar(data.index, data.values, color='skyblue', edgecolor='blue') # 添加标题和标签 plt.title('第一季度各产品销售总额统计', fontsize=16) plt.xlabel('产品名称', fontsize=12) plt.ylabel('销售额 (元)', fontsize=12) # 在柱状图上方添加具体数值标签 for bar in bars: height = bar.get_height() plt.text(bar.get_x() + bar.get_width() / 2, height, f'{int(height)}', ha='center', va='bottom') plt.grid(axis='y', linestyle='--', alpha=0.7) # 保存图片 plt.savefig('销售分析报表.png') print("📈 图表已保存为 '销售分析报表.png'") # 显示图表 plt.show() # 调用绘图函数 if summary_data is not None: visualize_data(summary_data)

🚀 进阶技巧:如何让代码更强?

虽然上面的代码已经能解决大问题,但在实际工作中,你还可以尝试以下优化:

  1. 异常处理:如果在读取Excel时遇到格式错误的文件,使用try-except跳过,防止程序崩溃(代码中已包含基础演示)。

  2. 自动发送邮件:结合 Python 的smtplib库,生成报表后直接自动发送邮件给老板。

  3. 定时任务:如果是每天固定的日报,可以使用 Windows 的“任务计划程序”或 Linux 的Crontab,让脚本每天早上9点自动运行。


📝 总结

通过这个案例,我们不仅复习了 Pandas 的读取 (read_excel)、合并 (concat) 和分组聚合 (groupby) 操作,还实践了 Matplotlib 的绘图功能。

**Python 的魅力在于:一次编写,无限次复用。**哪怕你今天只节省了10分钟,一年下来也是几十个小时的自由时间!

如果你对代码有任何疑问,或者想了解如何将结果导出为精美的 HTML 报表,欢迎在评论区留言交流!👇

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

5分钟精通音乐格式转换:ncmdumpGUI完全使用手册

5分钟精通音乐格式转换:ncmdumpGUI完全使用手册 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 还在为网易云音乐下载的NCM加密文件无法在其他设备…

作者头像 李华
网站建设 2026/4/15 13:10:02

三步掌握AMD Ryzen终极性能:新手友好的完整调试指南

三步掌握AMD Ryzen终极性能:新手友好的完整调试指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitc…

作者头像 李华
网站建设 2026/4/16 10:43:49

硬件学习笔记--93 静电防护方案(电阻、磁珠、电感、TVS等)

1、电阻、磁珠、电感对静电防护的机理及对比:面对ESD这种 “纳秒级高压快脉冲” ,不同元件的响应机制决定了它们防护能力的本质差异。元件对ESD的主要作用机理优点缺点与关键风险典型应用位置电阻限流、分压 (IV/R)。通过阻碍电流,降低到达后…

作者头像 李华
网站建设 2026/4/16 10:37:39

AMD Ryzen性能调优利器:SMUDebugTool完全指南

AMD Ryzen性能调优利器:SMUDebugTool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.co…

作者头像 李华
网站建设 2026/4/16 11:12:02

Linux系统编程(IPC进程间通信)

IPC进程间通信(interprocess communicate)为什么需要ipc ,进程空间都是独立。但是进程和进程之间有数据共享或交换的需求。种类1、古老的通信方式无名管道 有名管道 信号2、IPC对象通信( system v BSD suse fedora kernel.org&…

作者头像 李华
网站建设 2026/4/16 12:17:07

小程序springboot办公用品租赁管理系统_30566fh1

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 同行可拿货,招校园代理 小程序springboot办公用品租赁管理系统_30566fh1 …

作者头像 李华