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

Pandas合并文件夹中多Excel指定工作表问题求助

解决Pandas合并多Excel文件指定工作表仅处理最后一个文件的问题

问题原因

你的代码仅能处理最后一个文件,核心问题是数据存储的作用域错误:每次遍历单个Excel文件时,你都重新初始化dfs = [],并且用当前文件的结果覆盖output,导致最终只保留最后一个文件的处理结果。

解决方案

将全局数据收集列表放在外层循环之外,让所有文件的有效工作表数据都追加到同一个列表中,最后一次性合并所有数据。同时优化逻辑,先获取每个Excel文件的实际工作表名,只处理存在的目标表,避免不必要的异常捕获。

修改后代码

from pathlib import Path
import pandas as pd

# 目标工作表名称
TARGET_SHEETS = ['총','하노이', '호치민', '박닌', '빈증', '동나이', '비엔화', '다낭', '타이응웬',
                 '하이퐁', '호안끼엠', '스타레이크', '하남', '빈푹', '푸미흥', '껀터', '사이공']
folder = Path(r'D:\Test\New folder')

# 全局数据收集列表,存放所有符合条件的工作表数据
all_dfs = []

for file in folder.glob('*xlsx'):
    # 获取当前Excel文件的所有工作表名
    excel_file = pd.ExcelFile(file)
    available_sheets = excel_file.sheet_names
    # 筛选当前文件中存在的目标工作表
    valid_sheets = [sheet for sheet in TARGET_SHEETS if sheet in available_sheets]
    
    for sheet in valid_sheets:
        df = excel_file.parse(sheet)
        # 提取基础日期和分支信息
        base_date = df.iloc[0, 10]
        branch = df.iloc[1, 12]
        # 重置列名并清理数据
        df.columns = df.iloc[2]
        df = df[3:]
        # 删除空列
        df = df.loc[:, df.columns.notnull()]
        # 合并前后部分数据
        df_2 = df.iloc[:, 0:4]
        df_3 = df.iloc[:, 4:]
        df = pd.concat([df_2, df_3], axis=0, ignore_index=True)
        # 添加日期和分支列
        df['Base Date'] = pd.to_datetime(base_date, format='%d-%m-%Y').dt.strftime('%Y%m%d').astype(int)
        df['Branch'] = branch
        # 将当前工作表数据追加到全局列表
        all_dfs.append(df)

# 合并所有数据
final_output = pd.concat(all_dfs, axis=0, ignore_index=True)
print(final_output)
# 可选:保存合并结果到Excel
# final_output.to_excel('合并结果.xlsx', index=False)

关键修改点

  • 在外层定义all_dfs全局列表,收集所有文件的有效工作表数据,避免每次循环被重置
  • 使用pd.ExcelFile先获取文件的所有工作表名,筛选出存在的目标表,替代try-except,逻辑更清晰高效
  • 最后一次性合并所有收集到的数据,得到完整的跨文件合并结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 14:25:25