引言

日常工作中,经常需要处理多份 Excel 表格:比如合并销售数据、清洗重复的用户信息,最后生成可视化图表。手动操作不仅效率低,还容易出错。这篇文章分享一套 Python 自动化流程,用pandasmatplotlib搞定从数据清洗到可视化的全流程,附完整代码和避坑指南。

一、环境准备

需要安装的库:

pip install pandas openpyxl matplotlib  # openpyxl用于读取xlsx格式

避坑点:如果 Excel 是.xls格式,需额外安装xlrd==1.2.0(高版本不支持 xls)。

二、核心步骤(附代码)
1. 读取并合并多份 Excel 文件

假设文件夹data/下有 3 个销售数据文件(sale1.xlsxsale2.xlsxsale3.xlsx),结构相同(含 “日期”“产品”“销售额” 列)。

import pandas as pd
import os# 读取文件夹下所有Excel
file_dir = "data/"
all_data = []
for file in os.listdir(file_dir):if file.endswith(".xlsx"):df = pd.read_excel(os.path.join(file_dir, file))all_data.append(df)# 合并为一个DataFrame
merged_df = pd.concat(all_data, ignore_index=True)
print(f"合并后共{len(merged_df)}行数据")
2. 清洗重复值

目标:删除 “产品 + 日期” 完全重复的行(避免重复统计)。

# 查看重复值数量
print(f"重复值行数:{merged_df.duplicated(subset=['产品', '日期']).sum()}")# 删除重复值(保留第一行)
cleaned_df = merged_df.drop_duplicates(subset=['产品', '日期'], keep='first')
3. 缺失值处理

如果 “销售额” 列有缺失,用该产品的平均值填充(比直接删除更合理):

# 按“产品”分组,用组内平均值填充缺失值
cleaned_df['销售额'] = cleaned_df.groupby('产品')['销售额'].transform(lambda x: x.fillna(x.mean())
)
4. 数据可视化(生成销量趋势图)

以 “产品 A” 为例,绘制月度销售额折线图:

import matplotlib.pyplot as plt# 设置中文显示(避免乱码)
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]# 筛选产品A的数据,按月份分组求和
product_a = cleaned_df[cleaned_df['产品'] == '产品A']
product_a['月份'] = product_a['日期'].dt.to_period('M')  # 提取月份
monthly_sales = product_a.groupby('月份')['销售额'].sum()# 绘图
monthly_sales.plot(kind='line', figsize=(10, 6))
plt.title('产品A月度销售额趋势')
plt.xlabel('月份')
plt.ylabel('销售额(元)')
plt.grid(alpha=0.3)
plt.savefig('sales_trend.png', dpi=300)  # 保存图片
plt.show()
三、完整代码总结

将上述步骤整合为一个函数,方便复用:

def process_excel(file_dir, target_product):# 1. 读取合并数据(代码同上)# 2. 清洗重复值(代码同上)# 3. 处理缺失值(代码同上)# 4. 可视化(代码同上)return cleaned_df  # 返回处理后的DataFrame# 调用示例
df = process_excel("data/", "产品A")
四、扩展思考
  • 如果数据量超过 10 万行,建议用dask替代pandas,避免内存溢出;
  • 可视化也可以尝试seaborn,图表更美观(如sns.lineplot())。
  • 你在处理 Excel 时遇到过哪些棘手问题?欢迎留言分享你的解决方案~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917780.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917780.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917780.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4.5 点云表达方式——图

(一)定义与原理 图4-5-1 点云图结构

wordpress菜单调用的几种常见形式

在WordPress主题开发里,“菜单”在前端页面中常见的调用/输出形式可以归纳为5种,按出现频率从高到低列给你,并给出最简代码片段,方便直接复制粘贴。 标准菜单位置调用(99%场景) 后台“外观→菜单”里把菜单A指派到菜单位置prima…

linux中pthread_t 的值与top -Hp中线程id值的区别

linux中pthread_t 值与top -Hp中线程id值的区别 #include <stdio.h> #include <pthread.h> #include <thread>void thread_func() {printf("child thread id0x%x\n",pthread_self());while(1){ printf("hello world\n");} }int ma…

Idea集成Jenkins Control插件,在IDEA中触发Jenkins中项目的构建

IDEA可以下一个这个插件 Jenkins Control&#xff0c;直接在idea中触发测试环境项目的部署测试环境API-TOKEN&#xff1a;XXXXXXXXXXXXXXXX&#xff08;在jenkins的首页 - 系统管理 - 管理用户中获取&#xff09;配置号后&#xff0c;测试连接&#xff0c;需要是成功的状态&…

【ARM】CMSIS6 介绍

1、 简介CMSIS是通用微控制器软件接口标准(Common Microcontroller Software Interface Standard ) 的简写。CMSIS 包括API、软件组件、工具及工作流程&#xff0c;主要用于简化软件重用、缩短开发人员学习曲线&#xff0c;加快项目构建和调试&#xff0c;从而使产品更快上市。…

【含文档+PPT+源码】基于SSM的旅游与自然保护平台开发与实现

项目介绍 本课程演示的是一款&#xff1f;&#xff1f;&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该项目附带的源码资料…

QT6 源,十章绘图(2)画刷 QBrush:刷子只涉及填充颜色,线型,填充图片,以及变换矩阵这几个属性,附源代码带注释。

&#xff08;1&#xff09;本类的继承关系如下 &#xff1a;&#xff08;2&#xff09;本类是支持流运算的 &#xff1a;&#xff08;3&#xff09;本类的构造函数与运算符 operator 函数 &#xff1a;关于本类的构造函数&#xff0c;进行以下测试 &#xff1a;只修改画刷的构…

安科瑞智慧能源管理系统在啤酒厂5MW分布式光伏防逆流控制实践

项目信息 光伏装机1MW&#xff0c;3个并网点&#xff0c;低压接 入配电系统。 要求自发自用、余电不上网。解决方案 通过防逆流保护装置&#xff0c;做到刚性控制&#xff0c; 实现并网柜快速切断&#xff1b;通过防逆流管理系统&#xff0c;做到柔性调节&#xff0c; 实现光伏…

VUE-第二季-02

3.Vue组件化 3.1 什么是组件 (1) 传统方式开发的应用 一个网页通常包括三部分&#xff1a;结构&#xff08;HTML&#xff09;、样式&#xff08;CSS&#xff09;、交互&#xff08;JavaScript&#xff09; 传统应用存在的问题&#xff1a; ① 关系纵横交织&#xff0c;复杂…

【OpenGL】LearnOpenGL学习笔记02 - 绘制三角形、矩形

上接: https://blog.csdn.net/weixin_44506615/article/details/149861824 完整代码&#xff1a;https://gitee.com/Duo1J/learn-open-gl 一、渲染管线 在开始之前&#xff0c;我们先简单了解一下图形渲染管线 在渲染3D物体时&#xff0c;我们常用到的一种几何结构为网格模型…

Mysql的事务是什么?

简单来说&#xff0c;MySQL 实现事务的核心就像是给你的数据库操作加了一套“保险和存档”机制。它确保了你的操作要么全部成功&#xff0c;要么全部失败&#xff0c;并且在面对多人同时操作、系统突然崩溃等情况时&#xff0c;数据依然可靠、准确。 为什么需要事务呢&#xff…

测试开发:Python+Django实现接口测试工具

【测试开发天花板】DjangoVuePyTest打造企业级自动化平台&#xff5c;能写进简历的硬核项目最近被几个公司实习生整自闭了&#xff0c;没有基础&#xff0c;想学自动化又不知道怎么去学&#xff0c;没有方向没有头绪&#xff0c;说白了其实就是学习过程中没有成就感&#xff0c…

TFS-2022《A Novel Data-Driven Approach to Autonomous Fuzzy Clustering》

核心思想 这篇论文的核心思想是提出一种全新的、数据驱动的自主模糊聚类&#xff08;Autonomous Fuzzy Clustering, AFC&#xff09;算法。其核心创新在于&#xff0c;它巧妙地结合了模糊聚类的灵活性和基于中位数&#xff08;medoids&#xff09;聚类的可解释性&#xff0c;并…

ELK是什么

ELK 是一个广受欢迎的开源技术栈&#xff0c;用于实时采集、处理、存储、搜索、分析和可视化海量的日志数据&#xff08;log&#xff09;和机器生成的数据&#xff08;machine data&#xff09;&#xff0c;尤其是在 IT 系统监控、应用故障排查、安全分析和业务智能等领域应用广…

[硬件电路-123]:模拟电路 - 信号处理电路 - 常见的高速运放芯片、典型电路、电路实施注意事项

一、高速运放常见芯片型号及特性高速运放&#xff08;高速运算放大器&#xff09;通常指带宽&#xff08;GBW&#xff09;超过10MHz、压摆率&#xff08;SR&#xff09;高于10V/μs的器件&#xff0c;适用于视频处理、通信系统、高速数据采集等场景。以下是典型芯片及其特性&am…

关于解决WinRiver项目动态XmlElement的序列化与反序列化的问题

关于解决WinRiver项目动态XmlElement的序列化与反序列化的问题 一、WinRiver项目流量汇总XML内容 1.1、索引可变,索引下 XmlElement 元素内容固定 1.2、如何将对象 BottomTrack 的动态内容序列化为 XML ? 1.3、如何将 XML 动态内容反序列化为对象 BottomTrack ? 二、XML 动态…

【力扣 Hot100】 刷题日记

D3 128.最长连续序列 错解 class Solution {public int longestConsecutive(int[] nums) {Arrays.sort(nums);int maxCnt 0;int cnt 0;for (int i 0; i < nums.length - 1; i) {if(nums[i] ! nums[i 1] - 1){//如果不连续&#xff0c;取cnt与maxCnt较大值&#xff0c…

飞算JavaAI编程插件:以AI之力赋能Java开发,让编码效率再升级

你是否希望自己敲代码的时候总有一位大佬在你背后帮你保驾护航。想象一下&#xff0c;当你对着Java编辑器敲代码时&#xff0c;身后站了位“隐形大神”——你刚敲出for&#xff0c;它就预判到你要遍历集合&#xff0c;自动补全带泛型的循环逻辑&#xff1b;你手滑把equals写成&…

机器学习通关秘籍|Day 03:决策树、随机森林与线性回归

目录 一、决策树 1、概念 2、基于信息增益的决策树的建立 &#xff08;1&#xff09;信息熵 &#xff08;2&#xff09;信息增益 &#xff08;3&#xff09;信息增益决策树建立步骤 3、基于基尼指数的决策树的建立 4、API 二、随机森林 1、算法原理 2、API 三、线性…

C++进阶—C++的类型转换

第一章&#xff1a;C语言中的类型转换在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或者返回值类型与接收返回值类型不一致时&#xff0c;就需要发生类型转化&#xff0c;C语言中总共有两种形式的类型转换&#xff1a…