如何用Python读取Excel单工作表中的多个表格?iloc使用遇问题
解决Excel单工作表多表格读取的问题
Hey there! Let's tackle your problem step by step.
首先,你遇到的iloc没拿到预期数据的问题,大概率是硬编码的行列范围不准确——毕竟iloc[2:12,0:6]是固定死了从第3行到第12行(pandas索引从0开始)、前6列的范围,如果First_Table的实际位置和这个范围不匹配,自然拿不到正确数据。而且这种硬编码方式非常脆弱,一旦Excel里的表格位置变动(比如加了一行说明、调整了空行),你的代码就直接失效了。
更高效优雅的解决思路:动态定位表格位置
与其硬编码行列,不如通过表格的特征标识(比如表头文字、空行分隔)来动态确定起始和结束位置,这样代码更健壮。下面给你两种常用的实现方式:
方法1:通过表头关键词定位(最常用)
如果你的First_Table和Second_Table有明确的表头标识(比如某一行的第一列写着"First_Table"),可以先找到这个标识的位置,再读取对应的数据:
import pandas as pd # 先读取整个工作表,不指定表头(避免自动识别错误) xls = pd.ExcelFile('path_to_xls_file') full_sheet = pd.read_excel(xls, "sheet_1", header=None) # 1. 找到First_Table表头所在的行号 # 假设表头第一列是"First_Table",根据实际情况修改关键词 first_table_header_row = full_sheet[full_sheet[0] == "First_Table"].index[0] # 2. 找到Second_Table表头的位置,作为First_Table的结束边界 second_table_header_row = full_sheet[full_sheet[0] == "Second_Table"].index[0] # 3. 读取First_Table:从表头下一行开始,到Second_Table表头的前一行结束 df1 = pd.read_excel( xls, "sheet_1", header=first_table_header_row + 1, # 表头下一行作为数据的列名行 nrows=second_table_header_row - first_table_header_row - 1 # 计算数据行数 ) # 同理读取Second_Table df2 = pd.read_excel( xls, "sheet_1", header=second_table_header_row + 1, # 如果Second_Table是工作表最后一个表格,可以不用nrows,或者找后续的空行作为边界 )
方法2:通过空行分隔定位
如果表格之间用空行分隔,没有明确的表头关键词,可以先过滤掉全空的行,再分割表格:
import pandas as pd xls = pd.ExcelFile('path_to_xls_file') full_sheet = pd.read_excel(xls, "sheet_1", header=None) # 去掉全空的行,重置索引 cleaned = full_sheet.dropna(how="all").reset_index(drop=True) # 假设First_Table的第一行是表头,从索引0开始,直到下一个空行前结束 # 找First_Table的结束位置(第一个空行的索引) first_table_end = cleaned[cleaned[0].isna()].index[0] if any(cleaned[0].isna()) else len(cleaned) # 读取First_Table,用第一行作为列名 df1 = cleaned.loc[1:first_table_end-1, :].rename(columns=cleaned.loc[0, :]) # 读取Second_Table df2 = cleaned.loc[first_table_end+1:, :].rename(columns=cleaned.loc[first_table_end, :])
小提示
- 如果表格的列数固定,也可以结合
usecols参数指定读取的列范围(比如usecols="A:F"),比用索引更直观。 - 如果Excel里的表格格式很规范,也可以尝试用
pd.read_excel的skiprows参数,但动态定位始终是最可靠的方案。
内容的提问来源于stack exchange,提问作者Ori Netanel Ben-Zaken
相关产品推荐
相关产品推荐

