如何将多份含多工作表的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,会导致每次循环都重复合并之前的所有数据,最终结果出现大量重复行。
修正思路
- 用字典
sheet_data分别管理Sheet1和Sheet2的数据,键为工作表名,值为对应的数据帧列表,清晰区分不同工作表的数据源。 - 遍历每个Excel文件时,先检查目标工作表是否存在,避免因部分文件缺失工作表导致报错,再读取对应数据添加到字典的对应列表中。
- 所有文件处理完成后,再分别对两个工作表的列表执行
concat操作,得到最终的合并数据帧。
内容的提问来源于stack exchange,提问作者zachip
相关产品推荐
相关产品推荐

