news 2026/9/25 23:22:28

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

作者头像

张小明

前端开发工程师

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

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


🔍 实战背景

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

  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/9/25 15:25:47

4G 内存专属!Ubuntu22.04+Windows 200G 硬盘双系统分区表(含 swap + 全功能详解)

一、分区前提说明 200G 为 Ubuntu 独立空闲空间(需先在 Windows 中压缩磁盘释放),双系统共存需保障 Windows 分区不被触碰;4G 内存适配 8GB swap 分区(虚拟内存最优值),分区顺序直接影响启动稳定性,建议按表格顺序创建分区。 二、Ubuntu22.04 详细分区表(直观清晰,…

作者头像 李华
网站建设 2026/9/26 7:38:21

MouseTester鼠标性能测试终极指南:新手快速上手

MouseTester鼠标性能测试终极指南:新手快速上手 【免费下载链接】MouseTester 项目地址: https://gitcode.com/gh_mirrors/mo/MouseTester MouseTester鼠标性能测试工具是一款专业的硬件检测软件,通过精准的数据采集和可视化分析,帮助…

作者头像 李华
网站建设 2026/9/26 10:54:21

WarcraftHelper:魔兽争霸III优化插件终极配置指南

WarcraftHelper:魔兽争霸III优化插件终极配置指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典版魔兽争霸III在现代系统上的…

作者头像 李华
网站建设 2026/9/26 4:40:37

国产数据库DM8从入门到实操:全流程学习心得

目录​ 🌟 前言:为什么选择 DM 数据库?​ 🛠️ 核心实操一:DM8 数据库安装与环境配置(附避坑)​ ⚙️ 核心实操二:实例创建与参数优化​ 📦 核心实操三:备…

作者头像 李华
网站建设 2026/9/25 12:51:05

智能演讲时间管家:你的终极解决方案

智能演讲时间管家:你的终极解决方案 【免费下载链接】ppttimer 一个简易的 PPT 计时器 项目地址: https://gitcode.com/gh_mirrors/pp/ppttimer 还在为演讲超时而烦恼吗?每次站上讲台,是不是总在担心时间把控?现在&#xf…

作者头像 李华
网站建设 2026/9/26 7:00:31

3步搞定城通网盘下载限制:免费直连地址获取完整指南

3步搞定城通网盘下载限制:免费直连地址获取完整指南 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘的下载限制而烦恼吗?ctfileGet这个开源项目能够帮你快速获取城…

作者头像 李华