📑 查看全课大纲(第 11 / 101 节)
- 1.数据分析基本概念
- 2.学习数据分析的一般路线
- 3.数据分析的流程
- 4.数据类型
- 5.环境部署(1)
- 6.环境部署(2)
- 7.课程介绍
- 8.TXT文件操作
- 9.JSON文件操作
- 10.CSV文件操作
- 11.Excel文件操作
- 12.数据库及SQL常用语法
- 13.数据库基本操作
- 14.数据库多表连接
- 15.实战:欧洲职业足球数据库分析
- 16.爬虫简介
- 17.URL管理模块
- 18.网页下载模块
- 19.网页解析模块(1)
- 20.网页解析模块(2)
- 21.Scrapy简介
- 22.Scrapy使用步骤(1)
- 23.Scrapy使用步骤(2)
- 24.Scrapy使用步骤(3)
- 25.Scrapy使用步骤(4)
- 26.实战:获取国内城市空气质量指数数据
- 27.NumPy和SciPy介绍
- 28.多维数组
- 29.多维数组操作
- 30.NumPy的常用方法
- 31.向量化介绍
- 32.向量化及通用函数
- 33.实战:2016美国大选分析
- 34.数据结构-Series
- 35.数据结构-DataFrame
- 36.数据结构-Index
- 37.Series的索引操作
- 38.DataFrame的索引操作
- 39.索引操作总结
- 40.运算与对齐
- 41.函数应用操作(1) -- map
- 42.函数应用操作 (2) -- apply applymap
- 43.文件读写操作
- 44.排序操作
- 45.数据清洗--处理缺失数据
- 46.数据清洗--处理重复数据
- 47.数据清洗--替换数据
- 48.常用统计方法(1) -- describe quantile
- 49.常用统计方法(2) -- sum mean median count
- 50.常用统计方法(3) -- max min idxmax idxmin
- 51.常用统计方法(4) -- mad var std cumsum
- 52.实战:全球食品数据分析
- 53.层级索引
- 54.分组与聚合介绍
- 55.分组操作(1) -- GroupBy对象及常用聚合操作
- 56.分组操作(2) -- 自定义分组及聚合操作
- 57.透视表介绍
- 58.透视表操作
- 59.数据规整(1) -- 数据合并concat
- 60.数据规整(2) -- 数据连接merge
- 61.数据重构(3) -- 数据重构stack unstack
- 62.实战:互联网电影资料库分析
- 63.探索性数据分析EDA介绍
- 64.EDA的目的
- 65.EDA常用工具
- 66.Matplotlib绘图基本介绍
- 67.Matplotlib画布
- 68.散点图和柱状图的绘制
- 69.直方图的绘制
- 70.矩阵绘图
- 71.子图的使用
- 72.Matplotlib颜色、标记、线型
- 73.Matplotlib坐标刻度、标签、图例、标题
- 74.Seaborn介绍
- 75.数据集分布可视化(1) -- 单变量分布、双变量分布
- 76.数据集分布可视化(2) -- 变量关系可视化
- 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
- 78.交互式数据可视化工具Bokeh介绍
- 79.Bokeh绘制散点图、柱状图、盒子图、弦图
- 80.Bokeh绘制常用图形元素
- 81.D绘图 -- mplot3d
- 82.D曲线可视化
- 83.D散点图可视化
- 84.D柱状图可视化
- 85.Pandas绘图
- 86.实战:Lending Club借贷数据探索性分析及可视化
- 87.机器学习介绍及应用场景
- 88.机器学习建模介绍 (1) -- 分类
- 89.机器学习建模介绍 (2) -- 回归
- 90.机器学习建模介绍 (3) -- 聚类
- 91.机器学习分类
- 92.机器学习工具scikit-learn
- 93.使用scikit-learn的流程
- 94.数据集准备及划分
- 95.模型选择
- 96.数据预处理及特征工程
- 97.过拟合与欠拟合
- 98.模型调参介绍
- 99.模型调参方法
- 100.模型测试及评价
- 101.实战:通过移动设备行为数据预测性别和年龄
Excel文件操作
约 9 分钟
Python 电子表格处理:Excel 多工作表读写与 ExcelWriter 实战
小象实战讲义 · Python数据分析实战
在企业日常运营、财务核算与跨部门协同中,Microsoft Excel(.xlsx / .xls)是应用最广泛的电子表格载体。与纯文本的 CSV 不同,Excel 不仅能承载数据本身,还集成了多工作表(Sheet)、富文本样式、单元格合并以及可视化图表等复杂特性。作为数据分析师,我们既需要从业务部门发来的复杂多 Sheet 表格中快速提取干净数据,也需要将分析结论格式化输出为多标签页的专业 Excel 报表。本节将带你掌握使用 Pandas 高效读写 Excel 文件的完整实战技能。
💡 核心导读
- Excel vs CSV 深度对比:明确纯数据流与富格式工作簿的适用边界。
pd.read_excel()核心参数:精通sheet_name的多种取值技巧(按索引、按名称、批量读取多 Sheet 与全量加载)。- 单工作表与多工作表导出:掌握
df.to_excel()与上下文管理器pd.ExcelWriter的多 Sheet 写入规范。 - 底层引擎与依赖管理:理解
openpyxl(处理.xlsx)与xlrd(处理旧版.xls)的角色。 - 多部门月度考核报表实战:通过 Python 代码实现多 Sheet 数据的拆分计算与聚合大表自动生成。
1. Excel vs CSV:数据分析师的视角
很多初学者容易混淆 Excel 与 CSV 的关系。虽然它们都可以用 Excel 软件打开,但底层机制存在根本差异:
┌─────────────────────────────────────────────────────────────┐
│ Excel vs CSV 核心对比 │
├───────────────────────────────┬─────────────────────────────┤
│ CSV 格式 (.csv) │ Excel 格式 (.xlsx) │
├───────────────────────────────┼─────────────────────────────┤
│ • 纯文本、逗号分隔 │ • 复杂的二进制/XML压缩包 │
│ • 仅支持单个二维表格 │ • 支持一个工作簿内包含多个 Sheet │
│ • 不包含任何颜色、边框与样式 │ • 支持图表、单元格格式与公式 │
│ • 读写极快、内存占用极低 │ • 读写需解析 XML,开销较大 │
│ • 数据分析与建模首选格式 │ • 业务汇报与跨部门交付首选格式│
└───────────────────────────────┴─────────────────────────────┘数据分析准则:在数据分析处理过程中,我们只关心纯粹的数据内容,而不关心单元格的字体颜色或边框样式。因此,读取 Excel 时通常直接将各个 Sheet 解析为纯净的 Pandas
DataFrame。
2. Pandas 读取 Excel:精通 sheet_name 参数
Pandas 提供了顶层函数 pd.read_excel(),其最为核心的控制参数是 sheet_name:
sheet_name 参数取值 | 行为说明 | 返回对象类型 |
|---|---|---|
0(默认值) | 读取工作簿中的第一个工作表 | DataFrame |
'销售明细' | 根据指定的字符串名称读取对应工作表 | DataFrame |
[0, '汇总表'] | 指定列表,同时读取第 1 个与名为“汇总表”的 Sheet | dict(键为 Sheet 名,值为对应 DataFrame) |
None | 全量加载:一次性读取该 Excel 中的所有工作表 | dict(包含全部 Sheet 的字典) |
3. 导出多工作表:pd.ExcelWriter 标准范式
如果只是导出单个表格,直接调用 df.to_excel("out.xlsx", sheet_name="数据", index=False) 即可。但如果需要将多个不同的分析结果(如“概要汇总”与“明细列表”)保存在同一个 Excel 文件的不同 Sheet 中,必须使用 pd.ExcelWriter:
# 多 Sheet 写入标准范式(推荐使用 with 上下文管理器)
with pd.ExcelWriter("monthly_report.xlsx", engine="openpyxl") as writer:
summary_df.to_excel(writer, sheet_name="总体汇总", index=False)
detail_df.to_excel(writer, sheet_name="详细清单", index=False)
# 离开 with 块时,ExcelWriter 会自动保存并关闭文件4. Python 代码实战:多部门月度考核报表的合并与多 Sheet 导出
下面我们编写一段 Python 代码,演示如何使用 openpyxl 引擎创建包含多个部门独立 Sheet 的 Excel 文件,并演示全量加载、跨 Sheet 数据汇总与二次多标签页报表生成。
# 示例 1:创建并导出包含多个部门独立 Sheet 的 Excel 原始文件
import pandas as pd
import os
excel_file_path = "company_performance.xlsx"
# 构造技术部与市场部两个部门的数据
tech_team = pd.DataFrame({
"emp_id": [101, 102, 103],
"name": ["张伟", "李磊", "陈晨"],
"kpi_score": [95.0, 88.5, 91.0],
"project_count": [4, 3, 5]
})
marketing_team = pd.DataFrame({
"emp_id": [201, 202, 203],
"name": ["王芳", "赵敏", "刘强"],
"kpi_score": [89.0, 93.5, 86.0],
"project_count": [6, 8, 5]
})
# 使用 pd.ExcelWriter 写入多个工作表
with pd.ExcelWriter(excel_file_path, engine="openpyxl") as writer:
tech_team.to_excel(writer, sheet_name="技术部", index=False)
marketing_team.to_excel(writer, sheet_name="市场部", index=False)
print(f"✅ 成功创建多 Sheet 考核表格: {excel_file_path}")接下来,我们使用 sheet_name=None 一次性读取全部工作表,执行全公司绩效汇总分析,并将结果写入新的多 Sheet 报表:
# 示例 2:使用 sheet_name=None 全量读取所有 Sheet 并做合并汇总
# 1. 一次性加载所有工作表 (返回字典)
all_sheets_dict = pd.read_excel(excel_file_path, sheet_name=None)
print(f"\n=== 检测到 Excel 中包含 {len(all_sheets_dict)} 个工作表: {list(all_sheets_dict.keys())} ===")
# 2. 遍历各部门 Sheet 并合并为全公司总表
combined_list = []
summary_rows = []
for dept_name, df_dept in all_sheets_dict.items():
# 增加部门标识列
df_dept["department"] = dept_name
combined_list.append(df_dept)
# 计算该部门汇总指标
summary_rows.append({
"部门名称": dept_name,
"总人数": len(df_dept),
"平均KPI得分": round(df_dept["kpi_score"].mean(), 2),
"总完成项目数": df_dept["project_count"].sum()
})
company_all_df = pd.concat(combined_list, ignore_index=True)
department_summary_df = pd.DataFrame(summary_rows)
print("\n=== 全公司员工合并大表 ===")
print(company_all_df[["department", "emp_id", "name", "kpi_score", "project_count"]])
print("\n=== 各部门综合指标对比表 ===")
print(department_summary_df)
# 3. 将汇总结果与明细结果保存至最终的交付报表
final_report_path = "final_kpi_summary_report.xlsx"
with pd.ExcelWriter(final_report_path, engine="openpyxl") as writer:
department_summary_df.to_excel(writer, sheet_name="部门总览", index=False)
company_all_df.to_excel(writer, sheet_name="全员明细", index=False)
print(f"\n✅ 最终分析报表已输出至: {final_report_path}")
# 清理测试文件
for p in [excel_file_path, final_report_path]:
if os.path.exists(p):
os.remove(p)📝 动手练一练
问答题:如果一个企业财务 Excel 文件中包含了名为
2026年1月、2026年2月、2026年3月… 的 12 个工作表,如果想要用最简洁的代码一次性将这 12 个月份的数据全部读取出来,应该如何设置pd.read_excel()的sheet_name参数?读取后的数据结构是什么?👉 点击查看参考答案
参考答案: 设置参数
sheet_name=None即可一次性读取所有工作表。 此时函数会返回一个 Python 字典(dict),字典的键(Key)为各个月份的 Sheet 名称(如'2026年1月'),字典的值(Value)为对应工作表解析出的 PandasDataFrame。编程练习:假设你有以下城市空气质量的两个数据字典:
bj_data = {"月份": ["1月", "2月"], "AQI": [85, 62]}和sh_data = {"月份": ["1月", "2月"], "AQI": [45, 52]}。请编写 Python 代码,使用pd.ExcelWriter将这两个数据集分别写入名为air_quality.xlsx文件的北京和上海两个独立工作表中。👉 点击查看参考答案
参考答案:
import pandas as pd import os df_bj = pd.DataFrame({"月份": ["1月", "2月"], "AQI": [85, 62]}) df_sh = pd.DataFrame({"月份": ["1月", "2月"], "AQI": [45, 52]}) out_file = "air_quality.xlsx" with pd.ExcelWriter(out_file, engine="openpyxl") as writer: df_bj.to_excel(writer, sheet_name="北京", index=False) df_sh.to_excel(writer, sheet_name="上海", index=False) print("✅ 成功输出包含北京与上海工作表的 Excel 文件!") if os.path.exists(out_file): os.remove(out_file)
本章小结
在本节中,我们系统掌握了 Excel 多工作表的高效处理方案:
- 深刻理解 Excel 富格式工作簿与 CSV 纯数据流的设计取向与应用场景;
- 熟练掌握
pd.read_excel()的sheet_name参数实现单表、多表或全量 Sheet 提取; - 掌握
pd.ExcelWriter配合with语法导出专业的多 Sheet 分析报表。
📋 行动清单
- 确保本地 Python 环境已安装
openpyxl(pip install openpyxl)。 - 尝试用 Pandas 读取手头一个包含多个工作表的业务 Excel 文件,并尝试合并各个 Sheet。
—— 小象教研组
- 本节课件:Excel文件操作(PDF · 277KB)下载
- 全套课件打包(第1-5章)(ZIP · 12.8MB)下载
- 全套课件打包(第6-8章)(ZIP · 15MB)下载
- 实战数据集:AppleStore 应用商城分析(ZIP · 329KB)下载
- 实战数据集:女性服装电商分析(ZIP · 2.8MB)下载
- Python 数据分析环境搭建指南(PDF · 2MB)下载
- Scrapy 安装教程(PDF · 12.7MB)下载
- 附加实战项目:AppleStore 应用商城数据分析(ZIP · 0.3MB · ipynb + CSV 数据)下载
- 附加实战项目:银行电话营销数据分析(ZIP · 0.4MB · ipynb + CSV 数据)下载
- 附加实战项目:女性服装电商评论数据分析(ZIP · 2.7MB · ipynb + CSV 数据)下载
- 附加实战项目:美国化学学会杂志数据分析(ZIP · 34.2MB · ipynb + SQLite 数据库)下载
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加课程顾问,免费获取网盘下载链接
微信扫码添加顾问