You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:59:39