read_excel读取指定sheet有三种方式:sheet_name=0按索引读首表最稳定;sheet_name="summary"按名精确匹配,大小写敏感;sheet_name=none返回含所有sheet的dict。

read_excel 读取指定 sheet 的三种方式
直接用 sheet_name 参数就能定位工作表,但不同写法行为差异很大,容易读错数据。
-
sheet_name=0:读取第一个工作表(索引从 0 开始),最稳定,适合工作表顺序固定且不关心名字的场景 -
sheet_name="Summary":按名称精确匹配,大小写敏感;如果 Excel 里实际叫"summary"或"Summary "(带空格),会报ValueError: Worksheet named 'Summary' not found -
sheet_name=None:返回dict,key 是所有 sheet 名,value 是对应 DataFrame;适合需要动态检查或遍历多个表的情况
读取时跳过标题行或空行的常见处理
Excel 表头常不在第 1 行,或者前几行是说明文字,read_excel 默认把第 0 行当列名,结果列名变成 Unnamed: 0 或乱码。
- 用
skiprows=2跳过前两行,再配合header=0(默认)让第 3 行成为列名 - 如果表头在第 5 行(即索引为 4),直接写
header=4,不用加skiprows - 遇到中间有空行导致数据被截断,加
keep_default_na=False防止 pandas 把空单元格识别成NaN并误判为结束
中文列名乱码或列名含空格的应对方法
不是编码问题,而是 Excel 自身存储格式和 pandas 解析逻辑导致的——尤其用 WPS 或旧版 Excel 保存的文件。
- 先用
pd.ExcelFile(file_path).sheet_names确认真实 sheet 名,避免拼写误差 - 读入后检查
df.columns,若出现'销售 部'(多空格)或'\xa0销售额'(NBSP 字符),用df.columns = df.columns.str.strip().str.replace('\xa0', ' ')清理 - 列名含空格又想用点号访问(如
df.销售金额)?不行。必须用方括号:df["销售金额"],或者提前重命名:df.rename(columns={"销售金额": "sales_amount"}, inplace=True)
性能与内存:大 Excel 文件只读一个 sheet 的关键设置
哪怕你只想要第 3 个 sheet,read_excel 默认仍会解析整个文件结构(包括所有 sheet 的元信息),10MB 以上文件可能卡顿甚至 OOM。
- 加
engine="openpyxl"(xlsx)或engine="xlrd"(xls,注意 xlrd>=2.0 不再支持 xlsx)可提升兼容性,但不解决解析开销 - 真正省资源的做法是:先用
pd.ExcelFile打开,再用parse()按需读取单个 sheet:with pd.ExcelFile("data.xlsx") as xls: df = xls.parse("Report", skiprows=1, header=0) - 如果文件含大量公式或图表,考虑用
data_only=True(仅 openpyxl 支持),避免读到公式字符串而非计算结果
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











