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

如何遍历Excel多工作表提取数据并生成指定格式Pandas DataFrame

解决方案

现有代码问题排查

你的核心错误有两点:

  1. openpyxl的行、列索引均从1开始计数,你写的min_row=0、min_col=0属于非法参数,会直接报错
  2. 你只是把值打印输出,没有整理成统一结构的结构化数据,自然无法转成DataFrame

方案1:使用Pandas直接处理(更简便)

针对复合表头的Excel,Pandas支持直接读取多重索引表头,代码更简洁:

import pandas as pd

# 定义单个工作表的处理函数
def process_sheet(sheet_name):
    # header=[0,1]指定前两行作为复合列索引,index_col=0指定第一列作为行索引
    df = pd.read_excel("df.xlsx", sheet_name=sheet_name, header=[0,1], index_col=0)
    df = df.T # 转置表,把季度/年从列维度转成行维度
    df = df.reset_index() # 把索引转成普通列
    df.columns = ["year", "quarter", "ID", "ID2", "name"] # 重命名列
    return df

# 分别处理两个工作表后合并
df_sheet1 = process_sheet("Sheet1")
df_sheet2 = process_sheet("Sheet2")
final_df = pd.concat([df_sheet1, df_sheet2], ignore_index=True)
# 筛选q1的数据,不需要筛选的话删除此行即可保留所有季度数据
final_df = final_df[final_df["quarter"] == "q1"].reset_index(drop=True)

print(final_df)

方案2:基于openpyxl的修改方案

如果你需要用openpyxl原生处理,修改代码如下:

import openpyxl
import pandas as pd

wb = openpyxl.load_workbook("df.xlsx")
sheets = [wb.worksheets[0], wb.worksheets[1]]
data_list = []

for ws in sheets:
    # 读取表头值
    year = ws[1][1].value # 第一行第二列是q1对应的年份
    quarter = ws[2][1].value # 第二行第二列是q1标识
    # 读取指标值
    id_val = ws[3][1].value
    id2_val = ws[4][1].value
    name_val = ws[5][1].value
    # 组装成字典存入列表
    data_list.append({
        "quarter": quarter,
        "year": year,
        "ID": id_val,
        "ID2": id2_val,
        "name": name_val
    })

# 直接转DataFrame
final_df = pd.DataFrame(data_list)
print(final_df)

内容的提问来源于stack exchange,提问作者Lynn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 13:36:05