为何pandas.read_excel()会跳过Excel工作表的前两行?
问题描述
我在Excel工作表中有特定格式的数据,想用pandas.read_excel将其读取为DataFrame,但该函数自动跳过了工作表的前两行。手动调整Excel表格位置后,函数能生成预期的DataFrame,请问该如何解决这个问题?
使用的代码
import pandas as pd import tkinter as Tk from tkinter.filedialog import askopenfilename from tabulate import tabulate print("选择目标源文件:") Tk.Tk().withdraw() path1 = askopenfilename() # 目标文件的路径 source_workbook = pd.read_excel(path1, header=1, engine='openpyxl') print(tabulate(source_workbook, headers='firstrow'))
现象说明
- 执行上述代码后,读取结果自动跳过了工作表的前两行
- 手动调整Excel表格的位置后,能够得到符合预期的DataFrame
解决方法
出现这种问题,大多是因为原Excel的前两行存在隐藏行、合并单元格格式异常,或是pandas自动识别空行/无效行时出现误判,可通过以下几种方式处理:
精准控制读取范围
不要仅依赖header参数,改用skiprows和usecols明确指定读取的行和列:# 若表头在第2行(索引从0开始),读取从第3行开始的数据 source_workbook = pd.read_excel(path1, header=1, skiprows=None, engine='openpyxl') # 若前两行都是有效内容不想跳过,先不设置表头,后续手动指定 source_workbook = pd.read_excel(path1, header=None, engine='openpyxl') # 手动设置表头示例 source_workbook.columns = ["列名1", "列名2", "列名3", ...]清理Excel格式问题
- 检查并取消前两行的隐藏设置
- 拆分前两行中存在的跨多行合并单元格
- 确认前两行的单元格没有特殊格式(比如白色字体导致看似为空但实际有内容)
强制读取单元格内容
用converters参数强制转换单元格内容,避免pandas误判为空行:# 示例:强制将前10列转换为字符串类型,根据实际列数调整 source_workbook = pd.read_excel(path1, header=1, engine='openpyxl', converters={col: str for col in range(10)})锁定有效列范围
如果Excel存在大量空列导致识别错误,指定需要读取的列:# 示例:读取A到E列 source_workbook = pd.read_excel(path1, header=1, engine='openpyxl', usecols="A:E")
内容的提问来源于stack exchange,提问作者Farouk
相关产品推荐
相关产品推荐

