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
相关产品推荐
相关产品推荐

