百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Python 操作 Excel 并进行数据可视化

itomcoil 2025-09-23 20:40 5 浏览

Python 结合 Excel 进行数据可视化,能将静态数据转化为直观图表,是数据分析中非常关键的技能。下面我将通过五个核心方面,带你掌握如何用 Python 操作 Excel 并进行数据可视化。


首先,用一个表格快速了解常用的 Python 库及其主要用途:


库名称主要功能典型应用场景pandas数据读取、清洗、处理和聚合从 Excel 读取数据,进行数据预处理和转换matplotlib基础绘图,支持多种静态图表类型绘制折线图、柱状图、散点图等基础图表seaborn基于 matplotlib,提供更高级、更美观的统计图表和默认样式绘制分布图、分类图、热力图等复杂统计图表openpyxl直接读写和操作 Excel 文件,包括单元格格式、公式、图表等将 pandas 处理后的数据或 matplotlib 生成的图表写入 Excelxlsxwriter创建和操作 Excel 文件,支持更复杂的图表和格式选项生成带有复杂图表和格式的 Excel 报告plotly创建交互式图表,支持缩放、平移、数据点查看等交互操作制作交互式数据分析图表和应用


接下来,我们深入看看这些库的具体应用。


1. 数据读取与预处理


数据可视化的第一步是获取并清理数据。pandas 是这方面的利器。


读取 Excel 数据:使用 pd.read_excel() 函数可以直接读取 Excel 文件,并将其转换为 DataFrame,这是 pandas 中用于数据操作的核心数据结构。


import pandas as pd # 读取 Excel 文件 df = pd.read_excel('data.xlsx', sheet_name='Sheet1') # 可以指定工作表 # 查看数据前几行和基本信息 print(df.head()) print(df.info())


处理缺失值:真实数据常有缺失,pandas 提供了方便的方法处理。


# 删除包含缺失值的行 df_cleaned = df.dropna() # 或用特定值填充缺失值,这里用该列均值填充 df_filled = df.fillna(df.mean())


数据转换:为了后续分析,常需转换数据类型或创建新特征。


# 将字符串日期转换为日期时间类型 df['date_column'] = pd.to_datetime(df['date_column']) # 从日期中提取年份、月份等特征 df['year'] = df['date_column'].dt.year df['month'] = df['date_column'].dt.month


2. 基础与高级静态可视化


matplotlib 是 Python 最基础的绘图库,seaborn 在其基础上提供了更美观的高级接口。


使用 matplotlib 绘制基础图表:


import matplotlib.pyplot as plt # 折线图:展示数据随时间的变化趋势 plt.figure(figsize=(10, 6)) # 设置图片大小 plt.plot(df['date'], df['value'], marker='o', linestyle='-', color='b') # 折线图,带数据点 plt.title('Sales Trend Over Time') # 标题 plt.xlabel('Date') # X轴标签 plt.ylabel('Sales') # Y轴标签 plt.xticks(rotation=45) # 旋转X轴刻度标签以避免重叠 plt.grid(True, alpha=0.3) # 显示网格线,设置透明度 plt.tight_layout() # 自动调整子图参数以填充整个图像区域 plt.savefig('sales_trend.png', dpi=300) # 保存图片,设置分辨率 plt.show() # 显示图片


使用 seaborn 绘制高级统计图表:Seaborn 的 API 通常更简洁,默认样式更美观。


import seaborn as sns # 设置 seaborn 样式 sns.set_style("whitegrid") # 柱状图:比较不同类别的数据 plt.figure(figsize=(10, 6)) sns.barplot(x='category_column', y='value_column', data=df, palette='viridis') # palette设置颜色映射 plt.title('Average Value by Category') plt.xlabel('Category') plt.ylabel('Average Value') plt.xticks(rotation=45) plt.tight_layout() plt.savefig('category_avg_value.png', dpi=300) plt.show() # 箱线图:查看数据分布和离群点 plt.figure(figsize=(10, 6)) sns.boxplot(x='category_column', y='value_column', data=df) plt.title('Distribution of Value by Category') plt.xlabel('Category') plt.ylabel('Value') plt.xticks(rotation=45) plt.tight_layout() plt.savefig('
category_value_boxplot.png', dpi=300) plt.show()


3. 创建交互式图表


plotly 库可以创建丰富的交互式图表,用户能够缩放、平移、悬停查看数据点具体信息等。


安装与基础交互式图表:


# 安装:pip install plotly import plotly.express as px # 创建一个交互式折线图 fig = px.line(df, x='date_column', y='value_column', title='Interactive Sales Trend Over Time') fig.show() # 在浏览器中显示交互式图表 # 保存为 HTML 文件,交互性得以保留 fig.write_html("
interactive_sales_trend.html")


更复杂的交互式图表:Plotly Express 接口简洁,支持多种复杂图表。


# 交互式散点图:查看两个变量之间的关系,可用颜色、大小表示第三个变量 fig = px.scatter(df, x='x_column', y='y_column', color='category_column', size='size_column', title='Interactive Scatter Plot', hover_data=['additional_info']) # hover_data 设置悬停显示更多数据 fig.show()


4. 将图表集成到 Excel


有时需要将 Python 生成的图表或处理后的数据放回 Excel 中汇报或分享。


使用 openpyxl 将图片插入 Excel:


from openpyxl import load_workbook from openpyxl.drawing.image import Image # 加载已存在的 Excel 工作簿 workbook = load_workbook('your_excel_file.xlsx') sheet = workbook.active # 获取活动工作表 # 加载 matplotlib 或 seaborn 保存的图片 img = Image('sales_trend.png') # 确保图片路径正确 # 将图片添加到工作表的指定位置(例如 'A10' 单元格附近) sheet.add_image(img, 'A10') # 保存工作簿 workbook.save('
excel_file_with_chart.xlsx')


使用 xlsxwriter 创建带有图表的全新 Excel 文件:XlsxWriter 擅长创建新的 Excel 文件并添加格式、图表等。


import xlsxwriter # 创建一个新的 Excel 工作簿 workbook = xlsxwriter.Workbook('
new_report_with_charts.xlsx') worksheet = workbook.add_worksheet('Sales Data') # 添加工作表 # 将数据写入工作表(示例) # 先写入表头 headers = ['Date', 'Sales'] for col_num, header in enumerate(headers): worksheet.write(0, col_num, header) # 然后写入数据(这里需要将你的数据按行写入) # ... 数据写入逻辑 ... # 创建一个图表对象 chart = workbook.add_chart({'type': 'line'}) # 折线图 # 配置图表数据系列 chart.add_series({ 'categories': '=Sales Data!$A$2:$A$10', # X 轴数据范围 'values': '=Sales Data!$B$2:$B$10', # Y 轴数据范围 'name': 'Sales Trend' # 图例名称 }) # 设置图表标题和坐标轴标签 chart.set_title({'name': 'Monthly Sales Data'}) chart.set_x_axis({'name': 'Date'}) chart.set_y_axis({'name': 'Sales'}) # 将图表插入到工作表的指定位置 worksheet.insert_chart('D2', chart) # 图表左上角位于 D2 单元格 # 关闭工作簿并保存文件 workbook.close()


5. 自动化报告与高级应用


Python 的强大之处在于可以自动化整个数据处理和可视化流程。


自动化脚本示例:将数据读取、处理、可视化、保存和集成到 Excel 的步骤整合到一个脚本中。


import pandas as pd import matplotlib.pyplot as plt from openpyxl import load_workbook from openpyxl.drawing.image import Image import os def generate_automated_report(excel_file_path, output_excel_path): """自动化生成报告并插入图表""" # 1. 读取数据 df = pd.read_excel(excel_file_path) # 2. 数据处理 (示例: 按月份聚合销售数据) df['Date'] = pd.to_datetime(df['Date']) df['Month'] = df['Date'].dt.to_period('M') monthly_sales = df.groupby('Month')['Sales'].sum().reset_index() monthly_sales['Month'] = monthly_sales['Month'].astype(str) # 将Period对象转换为字符串以便绘图 # 3. 创建图表 plt.figure(figsize=(10, 6)) plt.plot(monthly_sales['Month'], monthly_sales['Sales'], marker='o', linestyle='-') plt.title('Monthly Sales Trend') plt.xlabel('Month') plt.ylabel('Total Sales') plt.xticks(rotation=45) plt.tight_layout() chart_image_path = '
monthly_sales_trend_auto.png' plt.savefig(chart_image_path, dpi=300) plt.close() # 关闭图形以释放内存 # 4. 将图表插入到原始的 Excel 文件中 workbook = load_workbook(excel_file_path) sheet = workbook.create_sheet('Monthly Report') # 创建一个新的工作表来放置图表 # 将聚合后的数据写入新工作表 sheet['A1'] = 'Month' sheet['B1'] = 'Total Sales' for idx, row in monthly_sales.iterrows(): sheet.cell(row=idx+2, column=1, value=row['Month']) sheet.cell(row=idx+2, column=2, value=row['Sales']) # 插入图片 img = Image(chart_image_path) sheet.add_image(img, 'D2') # 5. 保存包含图表的新 Excel 文件 workbook.save(output_excel_path) print(f"自动化报告已生成: {output_excel_path}") # 6. (可选) 删除临时的图片文件 # os.remove(chart_image_path) # 使用函数 generate_automated_report('sales_data.xlsx', '
automated_sales_report.xlsx')


定时自动化:利用系统任务计划程序(如 Windows 任务计划程序或 Linux 的 cron)定期运行 Python 脚本,实现报表的自动更新。


Linux/macOS (cron): 使用 crontab -e 编辑定时任务,添加类似 0 9 * * 1 /usr/bin/python3 /path/to/your_script.py 的行,表示每周一上午 9 点运行脚本。


Windows: 使用"任务计划程序"创建基本任务,设置触发器和启动程序为 Python 解释器和脚本路径。


6. 可视化实践建议


图表选择原则:


趋势分析:折线图(时间序列)。


比较分类数据:柱状图、条形图。


构成关系:饼图(部分与整体,注意类别不宜过多)、堆积柱状图。


分布情况:直方图、箱线图、密度图。


变量关系:散点图、气泡图。


多维度对比:雷达图(需谨慎使用,容易误导)。


美化与清晰度:


标题和标签:总是为图表和坐标轴添加清晰易懂的标题和标签。


颜色:选择对比度适中、易于区分的颜色,考虑色盲人群。可使用 matplotlib 的 colormap 或 seaborn 的调色。


图例:当有多条数据系列时,添加图例说明。


避免杂乱:不要在一张图表中塞入过多信息,保持简洁易懂。


希望这些内容能帮助你有效地用 Python 操作 Excel 并进行数据可视化。

相关推荐

《Queendom》宣布冠军!女团MAMAMOO四人激动落泪

网易娱乐11月1日报道据台湾媒体报道,南韩女团竞争回归的生死斗《Queendom》昨(10/31)晚播出大决赛,并以直播方式进行,6组女团、女歌手皆演唱新歌,并加总前三轮的赛前赛、音源成绩与直播现场投...

正确复制、重写别人的代码,不算抄袭

我最近在一篇文章提到,工程师应该怎样避免使用大量的库、包以及其他依赖关系。我建议的另一种方案是,如果你没有达到重用第三方代码的阈值时,那么你就可以自己编写代码。在本文中,我将讨论一个在重用和从头开始编...

HTML DOM tr 对象_html event对象

tr对象tr对象代表了HTML表格的行。HTML文档中出现一个<tr>标签,就会创建一个tr对象。tr对象集合W3C:W3C标签。集合描述W3Ccells返回...

JS 打造动态表格_js如何动态改变表格内容

后台列表页最常见的需求:点击表头排序+一键全选。本文用原生js代码实现零依赖方案,涵盖DOM查询、排序算法、事件代理三大核心技能。效果速览一、核心思路事件入口:为每个<th>绑...

连肝7个晚上,总结了66条计算机网络的知识点

作者|哪吒来源|程序员小灰(ID:chengxuyuanxiaohui)计算机网络知识是面试常考的内容,在实际工作中经常涉及。最近,我总结了66条计算机网络相关的知识点。1、比较http0....

Vue 中 强制组件重新渲染的正确方法

作者:MichaelThiessen译者:前端小智来源:hackernoon有时候,依赖Vue响应方式来更新数据是不够的,相反,我们需要手动重新渲染组件来更新数据。或者,我们可能只想抛开当前的...

为什么100个前端只有1人能说清?浏览器重排/重绘深度解析

面试现场的"致命拷问""你的项目里做过哪些性能优化?能具体讲讲重排和重绘的区别吗?"作为面试官,我在秋招季连续面试过100多位前端候选人,这句提问几乎成了必考题。但令...

HTML DOM 介绍_dom4j html

HTMLDOM(文档对象模型)是一种基于文档的编程接口,它是HTML和XML文档的编程接口。它可以让开发人员通过JavaScript或其他脚本语言来访问和操作HTML和XML文档...

JavaScript 事件——“事件流和事件处理程序”的注意要点

事件流事件流描述的是从页面中接收事件的顺序。IE的事件流是事件冒泡流,而NetscapeCommunicator的事件流是事件捕获流。事件冒泡即事件开始时由最具体的元素接收,然后逐级向上传播到较为不...

探秘 Web 水印技术_水印制作网页

作者:fransli,腾讯PCG前端开发工程师Web水印技术在信息安全和版权保护等领域有着广泛的应用,对防止信息泄露或知识产品被侵犯有重要意义。水印根据可见性可分为可见水印和不可见水印(盲水印)...

国外顶流网红为流量拍摄性侵女学生?仅被封杀三月,回归仍爆火

曾经的油管之王,顶流网红DavidDobrik复出了。一切似乎都跟他因和成员灌酒性侵女学生被骂到退网之前一样:住在950万美元的豪宅,开着20万美元的阿斯顿马丁,每条视频都有数百万观看...人们仿佛...

JavaScript 内存泄漏排查方法_js内存泄漏及解决方法

一、概述本文主要介绍了如何通过Devtools的Memory内存工具排查JavaScript内存泄漏问题。先介绍了一些相关概念,说明了Memory内存工具的使用方式,然后介绍了堆快照的...

外贸独立站,网站优化的具体内容_外贸独立站,网站优化的具体内容有哪些

Wordpress网站优化,是通过优化代码、数据库、缓存、CSS/JS等内容,提升网站加载速度、交互性和稳定性。网站加载速度,是Google搜索引擎的第一权重,也是SEO优化的前提。1.优化渲染阻塞。...

这8个CSS工具可以提升编程速度_css用什么编译器

下面为大家推荐的这8个CSS工具,有提供函数的,有提供类的,有提取代码的,还有收集CSS的统计数据的……请花费两分钟的时间看完这篇文章,或许你会找到意外的惊喜,并且为你的编程之路打开了一扇新的大门。1...

vue的理解-vue源码 历史 简介 核心特性 和jquery区别 和 react对比

一、从历史说起Web是WorldWideWeb的简称,中文译为万维网我们可以将它规划成如下的几个时代来进行理解石器时代文明时代工业革命时代百花齐放时代石器时代石器时代指的就是我们的静态网页,可以欣...