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

如何将多份含多工作表的Excel中同名工作表合并为对应DataFrame

修正后的代码及说明

修正后的完整代码

import pandas as pd
import glob

path = r'C:\Users\zachip_\OneDrive\Documents'

# 获取指定路径下所有Excel文件的路径
files = glob.glob(path + '\*.xlsx*')

# 为目标工作表初始化对应的空列表,用于存储各文件中同工作表的数据
sheet_data = {'Sheet1': [], 'Sheet2': []}

for file_path in files:
    # 读取当前Excel文件
    excel_file = pd.ExcelFile(file_path)
    # 遍历需要合并的工作表名称
    for target_sheet in sheet_data.keys():
        # 检查当前文件是否包含该工作表,避免缺失工作表报错
        if target_sheet in excel_file.sheet_names:
            # 读取工作表数据并添加到对应列表
            df = pd.read_excel(excel_file, sheet_name=target_sheet)
            sheet_data[target_sheet].append(df)

# 分别合并两个工作表的所有数据
df1 = pd.concat(sheet_data['Sheet1'], axis=0, ignore_index=True)
df2 = pd.concat(sheet_data['Sheet2'], axis=0, ignore_index=True)

原代码的核心问题

  • 循环逻辑错误:while i<=enumerate(file.sheet_names)的条件完全不成立,enumerate返回的是索引与元素的元组,无法和整数i做大小比较,会直接触发类型错误。
  • 数据存储未区分工作表:仅用一个dfs列表存储所有工作表数据,无法区分Sheet1和Sheet2的内容,最终合并结果会是两个工作表数据的混合。
  • 合并时机错误:在每个文件的循环内就执行pd.concat,会导致每次循环都重复合并之前的所有数据,最终结果出现大量重复行。

修正思路

  1. 用字典sheet_data分别管理Sheet1和Sheet2的数据,键为工作表名,值为对应的数据帧列表,清晰区分不同工作表的数据源。
  2. 遍历每个Excel文件时,先检查目标工作表是否存在,避免因部分文件缺失工作表导致报错,再读取对应数据添加到字典的对应列表中。
  3. 所有文件处理完成后,再分别对两个工作表的列表执行concat操作,得到最终的合并数据帧。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:17:06