news 2026/8/4 2:25:07

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/8/3 20:26:43

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://gitcod…

作者头像 李华
网站建设 2026/8/3 16:38:53

5分钟学会PPTTimer:让你的演讲告别超时尴尬

5分钟学会PPTTimer:让你的演讲告别超时尴尬 【免费下载链接】ppttimer 一个简易的 PPT 计时器 项目地址: https://gitcode.com/gh_mirrors/pp/ppttimer 还在为演讲超时而烦恼吗?每次演示都像在和时间赛跑?别担心,这款开源的…

作者头像 李华
网站建设 2026/8/1 19:28:46

工业现场通信模块开发中的Keil安装常见问题解析

工业现场通信模块开发中,Keil安装踩坑实录:从崩溃到调试全链路避雷指南 在工业自动化项目里,我们常常需要为传感器、PLC或智能仪表开发通信模块。这类任务的核心是 稳定可靠的固件 ,而实现这一点的前提,往往不是代码…

作者头像 李华
网站建设 2026/8/2 21:57:04

WarcraftHelper:3步解决魔兽争霸III卡顿闪退的终极方案

还在为魔兽争霸III在新系统上频繁闪退、画面卡顿、地图加载失败而苦恼?WarcraftHelper正是你需要的解决方案!这款开源工具专为经典魔兽版本设计,支持从1.20e到1.27b等多个主流版本,彻底解决老玩家遇到的各种兼容性问题。 【免费下…

作者头像 李华
网站建设 2026/8/2 9:39:21

QTabWidget在Qt6中的变化:一文说清迁移要点

QTabWidget 在 Qt6 中的演进:从迁移陷阱到高效定制你有没有遇到过这样的情况?项目决定升级到 Qt6,信心满满地把代码编译一遍,结果界面一跑起来——标签页样式全乱了,点击无响应,甚至某些信号莫名其妙多触发…

作者头像 李华
网站建设 2026/8/3 21:36:29

终于有人把 Claude Skills 的概念给我讲明白了!

大家好,我是悟鸣!最近 Claude 的 Skills 很火,听到很多朋友对其进行讨论。但是,存在很多争议。本文用相对通俗易懂的语言讲解一下 Skills是什么,和Rule、MCP 有什么区别,最核心的优势,安装和使用…

作者头像 李华