新手进阶Python:Excel批量处理+数据可视化入门,一键生成专业图表
大家好!我是CSDN的Python新手博主~ 前面六篇分享了文件整理、记账、OCR、PDF/Word批量处理等办公自动化工具,很多小伙伴反馈“日常要处理大量Excel数据,筛选统计太耗时,还不会做可视化图表”。今天就带来超落地的新手实战项目——Excel批量处理+数据可视化工具!
这个工具能一键搞定“批量读取多个Excel、筛选清洗数据、自动生成柱状图/折线图/饼图”,还能把图表保存到本地或插入Excel中。全程用2个基础第三方库实现,代码逻辑简单,新手复制就能运行,学会后不管是做报表、写总结,都能快速出专业图表,效率翻倍~
一、本次学习目标
-
掌握Excel处理核心库(openpyxl)的进阶用法(批量读取、数据筛选);
-
学会基础数据可视化库(matplotlib)的入门使用,生成常见图表;
-
理解“数据读取-清洗-可视化”的完整流程;
-
实现菜单式交互,支持批量处理与图表生成,不用修改代码。
二、前期准备:安装依赖库
本次核心依赖2个库,都是新手友好型,安装步骤超简单,打开命令行(Win+R输cmd/Mac终端),用清华源安装即可:
处理Excel(读取、写入、插入图表)
pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple
数据可视化(生成柱状图、折线图等)
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
注意:openpyxl 支持 Excel 2007及以上版本(.xlsx格式),如果是 .xls 旧格式,需先另存为 .xlsx;matplotlib 默认不支持中文,后续代码会加入中文显示配置,避免乱码!
三、实战:实现Excel批量处理+数据可视化工具
- 核心需求
-
批量读取:读取指定文件夹内所有Excel文件的指定sheet数据;
-
数据筛选:按条件筛选数据(如“销售额>1000”“部门=技术部”),生成新Excel;
-
图表生成:基于Excel数据自动生成柱状图、折线图、饼图,支持保存为图片或插入原Excel;
-
批量统计:统计多个Excel的汇总数据(如各部门总销售额),生成汇总表。
- 完整代码(可直接复制运行)
import os
import matplotlib.pyplot as plt
from openpyxl import load_workbook, Workbook
from openpyxl.drawing.image import Image
配置matplotlib中文显示(避免乱码)
plt.rcParams[‘font.sans-serif’] = [‘SimHei’] # 用黑体显示中文
plt.rcParams[‘axes.unicode_minus’] = False # 正常显示负号
def batch_read_excel(input_folder, sheet_name=“Sheet1”):
“”“批量读取文件夹内所有Excel的指定sheet数据,返回汇总数据”“”
excel_files = [f for f in os.listdir(input_folder) if f.lower().endswith(‘.xlsx’)]
if not excel_files:
print(“❌ 目标文件夹内无xlsx格式文件!”)
return []
all_data = []
try:
for excel_file in excel_files:
file_path = os.path.join(input_folder, excel_file)
wb = load_workbook(file_path)
# 检查sheet是否存在,不存在则用第一个sheet
if sheet_name not in wb.sheetnames:
sheet_name = wb.sheetnames[0]
print(f"⚠️ {excel_file} 无{sheet_name},自动使用第一个sheet:{sheet_name}")
ws = wb[sheet_name]
# 读取数据(第一行为表头,从第二行开始读数据)
headers = [cell.value for cell in ws[1]] # 表头
data = []
for row in ws.iter_rows(min_row=2, values_only=True):
if row[0] is not None: # 跳过空行
data.append(dict(zip(headers, row)))
all_data.extend(data)
print(f"✅ 已读取:{excel_file},共{len(data)}条数据")
print(f"\n📊 批量读取完成!总计{len(all_data)}条数据")
return all_data
except Exception as e:
print(f"❌ 读取失败:{str(e)}")
return []
def filter_excel_data(data, filter_key, filter_condition, filter_value, output_excel):
“”“按条件筛选数据,生成新Excel(如:销售额>1000、部门=技术部)”“”
if not data:
print(“❌ 无待筛选数据!”)
return
# 筛选逻辑
filtered_data = []
for item in data:
# 确保筛选字段存在
if filter_key not in item:
print(f"❌ 数据中无{filter_key}字段!")
return
item_value = item[filter_key]
# 处理数值类型转换(避免字符串比较)
try:
item_value = float(item_value)
filter_value = float(filter_value)
except:
pass # 非数值类型直接字符串比较
# 按条件筛选
if filter_condition == ">":
if item_value > filter_value:
filtered_data.append(item)
elif filter_condition == "<":
if item_value < filter_value:
filtered_data.append(item)
elif filter_condition == "==":
if item_value == filter_value:
filtered_data.append(item)
else:
print("❌ 不支持的筛选条件!仅支持 > < =(输入==)")
return
if not filtered_data:
print("❌ 无符合条件的数据!")
return
# 生成筛选后的Excel
wb = Workbook()
ws = wb.active
ws.title = "筛选结果"
# 写入表头
headers = list(data[0].keys())
for col, header in enumerate(headers, 1):
ws.cell(row=1, column=col, value=header)
# 写入数据
for row, item in enumerate(filtered_data, 2):
for col, key in enumerate(headers, 1):
ws.cell(row=row, column=col, value=item[key])
wb.save(output_excel)
print(f"\n🎉 筛选完成!符合条件共{len(filtered_data)}条数据,已保存至:{output_excel}")
def generate_chart(data, chart_type, x_key, y_key, output_path):
“”“生成图表(柱状图/折线图/饼图),保存为图片”“”
if not data:
print(“❌ 无待可视化数据!”)
return
# 提取x和y轴数据
x_data = [item.get(x_key, "") for item in data]
y_data = [item.get(y_key, 0) for item in data]
# 过滤空数据
x_data, y_data = zip(*[(x, y) for x, y in zip(x_data, y_data) if x and y])
if not x_data:
print("❌ 无有效数据用于生成图表!")
return
# 创建图表
plt.figure(figsize=(10, 6)) # 图表大小
if chart_type == "柱状图":
plt.bar(x_data, y_data, color='#3498db')
elif chart_type == "折线图":
plt.plot(x_data, y_data, marker='o', color='#e74c3c', linewidth=2)
elif chart_type == "饼图":
# 饼图需要标签和百分比
plt.pie(y_data, labels=x_data, autopct='%1.1f%%', colors=['#3498db', '#e74c3c', '#2ecc71', '#f39c12'])
plt.axis('equal') # 保证饼图是正圆形
else:
print("❌ 不支持的图表类型!仅支持 柱状图 折线图 饼图")
return
# 图表标题和坐标轴标签
plt.title(f"{y_key}按{x_key}分布", fontsize=14)
if chart_type != "饼图":
plt.xlabel(x_key, fontsize=12)
plt.ylabel(y_key, fontsize=12)
plt.xticks(rotation=45) # x轴标签旋转45度,避免重叠
plt.tight_layout() # 自动调整布局,防止标签被截断
# 保存图表
plt.savefig(output_path, dpi=300)
plt.close()
print(f"\n🎉 图表生成完成!已保存至:{output_path}")
def main():
“”“主菜单:交互选择功能”“”
print(“===== Python Excel批量处理+数据可视化工具 =====”)
print(“1. 批量读取多个Excel数据”)
print(“2. 按条件筛选数据并生成新Excel”)
print(“3. 生成柱状图/折线图/饼图(保存为图片)”)
print(“4. 退出工具”)
all_data = [] # 存储批量读取的所有数据
while True:
choice = input("\n请输入操作编号(1-4):")
if choice == "1":
input_folder = input("请输入Excel文件夹路径(如:C:\\Users\\张三\\Desktop\\Excel数据):")
sheet_name = input("请输入要读取的sheet名称(默认Sheet1):") or "Sheet1"
all_data = batch_read_excel(input_folder, sheet_name)
elif choice == "2":
if not all_data:
print("⚠️ 请先执行【1. 批量读取多个Excel数据】!")
continue
filter_key = input("请输入筛选字段(如:销售额、部门):")
filter_condition = input("请输入筛选条件(> / < / ==):")
filter_value = input(f"请输入筛选值(如:1000、技术部):")
output_excel = input("请输入筛选结果保存文件名(如:筛选结果.xlsx):")
filter_excel_data(all_data, filter_key, filter_condition, filter_value, output_excel)
elif choice == "3":
if not all_data:
print("⚠️ 请先执行【1. 批量读取多个Excel数据】!")
continue
chart_type = input("请输入图表类型(柱状图/折线图/饼图):")
x_key = input("请输入x轴字段(如:部门、月份):")
y_key = input("请输入y轴字段(如:销售额、人数):")
output_path = input("请输入图表保存路径(如:C:\\Users\\张三\\Desktop\\销售额图表.png):")
generate_chart(all_data, chart_type, x_key, y_key, output_path)
elif choice == "4":
print("感谢使用,再见!")
break
else:
print("❌ 输入错误,请选择1-4之间的编号!")
if name == “main”:
main()
- 关键代码拆解(新手必看)
(1)核心库作用
-openpyxl:Excel处理核心库,支持批量读取多个Excel、筛选数据、生成新Excel,还能插入图片(后续扩展用);
-
matplotlib:Python最常用的可视化库,入门简单,支持多种图表类型,生成的图表可直接保存为图片;
-
os:处理文件路径、遍历文件夹,和之前工具用法一致,新手可直接复用知识。
(2)批量读取Excel逻辑
-
用 os.listdir() 筛选文件夹内所有 .xlsx 文件,避免处理非Excel文件;
-
用 load_workbook() 打开Excel,ws.iter_rows(min_row=2, values_only=True)从第二行开始读取数据(跳过表头);
-
用字典(dict(zip(headers, row)))存储每条数据,键是表头、值是数据,后续筛选/可视化更方便。
(3)数据筛选逻辑
-
支持 “>”“<”“” 三种常用筛选条件,覆盖大部分办公场景(如“销售额>1000”“部门技术部”);
-
加入数值类型转换(float()),避免“字符串格式的数字”无法比较(如“1000”和1000);
-
筛选后自动生成新Excel,表头和原数据一致,不用手动整理格式。
(4)数据可视化逻辑
-
先配置中文显示(plt.rcParams),这是matplotlib新手最容易踩的坑,提前配置好避免乱码;
-
提取x轴和y轴数据后,过滤空值(避免图表显示异常);
-
不同图表类型用不同函数:plt.bar()(柱状图)、plt.plot()(折线图)、plt.pie()(饼图),参数简单易懂;
-
设置图表标题、坐标轴标签,旋转x轴标签(rotation=45),避免文字重叠,让图表更专业。
四、运行效果演示
- 批量读取Excel+生成柱状图
===== Python Excel批量处理+数据可视化工具 =====
- 批量读取多个Excel数据
- 按条件筛选数据并生成新Excel
- 生成柱状图/折线图/饼图(保存为图片)
- 退出工具
请输入操作编号(1-4):1
请输入Excel文件夹路径:C:\Users\张三\Desktop\月度销售额
请输入要读取的sheet名称(默认Sheet1):
✅ 已读取:1月销售额.xlsx,共5条数据
✅ 已读取:2月销售额.xlsx,共5条数据
📊 批量读取完成!总计10条数据
请输入操作编号(1-4):3
请输入图表类型(柱状图/折线图/饼图):柱状图
请输入x轴字段(如:部门、月份):部门
请输入y轴字段(如:销售额、人数):销售额
请输入图表保存路径:C:\Users\张三\Desktop\部门销售额柱状图.png
🎉 图表生成完成!已保存至:C:\Users\张三\Desktop\部门销售额柱状图.png
打开保存的图片,会看到清晰的柱状图,每个部门的销售额对比一目了然,比Excel手动做图更快捷!
- 筛选数据
请输入操作编号(1-4):2
请输入筛选字段(如:销售额、部门):销售额
请输入筛选条件(> / < / ==):>
请输入筛选值(如:1000、技术部):1500
请输入筛选结果保存文件名(如:筛选结果.xlsx):销售额大于1500.xlsx
🎉 筛选完成!符合条件共3条数据,已保存至:销售额大于1500.xlsx
五、新手避坑小贴士
-
Excel格式问题:仅支持 .xlsx 格式,.xls 旧格式需用WPS/Excel另存为 .xlsx;如果Excel中有合并单元格,会导致读取数据错乱,新手建议先取消合并单元格再处理。
-
matplotlib中文乱码:代码中已加入中文配置(SimHei是黑体),如果仍乱码,可能是系统缺少黑体,可百度“matplotlib中文乱码解决”,下载黑体字体放到指定目录。
-
数据类型问题:筛选数值字段(如销售额)时,确保Excel中该列是“数字格式”,如果是文本格式,可能导致筛选失败,可在Excel中选中列→设置单元格格式→数字。
-
路径问题:Windows路径用 r"路径" 或把反斜杠改成正斜杠(如 “C:/Users/张三/Desktop”);路径中不要有空格、emoji或特殊符号。
-
图表显示问题:如果x轴标签太多导致重叠,可调整 rotation 参数(如 rotation=60),或增大 figsize(如 figsize=(12,6))。
六、功能扩展(新手进阶方向)
学会核心功能后,可尝试这些进阶扩展,让工具更实用:
-
图表插入Excel:用 openpyxl 的 Image() 函数,把生成的图表直接插入Excel指定位置,不用单独保存图片;
-
多图表组合:在同一张图中显示柱状图+折线图(如销售额柱状图+增长率折线图);
-
Excel批量合并:把多个Excel的相同sheet合并为一个汇总Excel,自动去重;
-
自动发送报表:把筛选后的数据和生成的图表,通过邮件自动发送给指定人(结合之前学的邮件发送工具);
-
交互式图表:用 pyecharts 库替换 matplotlib,生成可点击、可缩放的交互式图表(网页格式)。
七、总结与后续规划
这篇文章通过“Excel批量处理+数据可视化工具”,带大家掌握了办公自动化的核心技能——Excel数据处理与图表生成。新手学习Python的关键就是“带着需求学”,把工具用到实际工作中,比如用它做月度销售报表、学生成绩统计,既能节省时间,又能加深对知识点的理解。
接下来的系列文章,我会聚焦“工具整合”与“GUI可视化”:
-
办公自动化大整合:把Excel、Word、PDF、邮件发送工具整合为一个“全能办公助手”;
-
Python GUI实战:用 tkinter 给工具加可视化界面(点击按钮选择文件、生成图表),彻底告别命令行;
-
定时自动化:设置定时任务,每天自动处理Excel数据、生成报表并发送给领导。
如果这篇文章对你有帮助,欢迎点赞收藏+关注,也可以在评论区分享你的使用问题(比如“图表中文乱码”“筛选数据失败”),我会逐一解答~ 新手不用怕出错,多尝试、多调试代码,慢慢就能熟练掌握这些实用技能!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)