如何用Pandas批量读取多Excel文件,跳过Sheet1并提取目标工作表?
问题描述
现有一套处理流程,可将多个包含多工作表、多列的Excel文件转换为嵌套字典。这些Excel文件的特点是:部分工作表在文件中存在与否不一,但所有存在的工作表列结构一致。
当前遇到的问题:需要跳过所有Excel文件中的Sheet1工作表,仅提取文件中实际存在的Sheet2至Sheet8工作表,且提取的每个工作表需保留为Pandas DataFrame。
尝试过的方法及局限:
- 使用
pd.read_excel的sheet_name参数指定["Sheet2", "Sheet3", ..., "Sheet8"]列表,但部分文件不存在部分表时会报错; - 使用
sheet_name=None会读取所有工作表,不符合跳过Sheet1的需求。
原有代码:
#Assigning the path to the folder variable folder = r'specified_path' #Changing the directory to the database directory os.chdir(folder) #Getting the list of files from the assigned path files = os.listdir(folder) #Joining the list of files to the assigned path for archivedlist in files: local_path = os.path.join(folder, archivedlist) print("Joined Path: ", local_path) #Reading the data from the files in the dictionary data structure main_dict = {} def readdataframe(files): df_dict = {} for element in files: df_dict[element] = pd.read_excel(element, sheet_name = ["Sheet2", "Sheet3", "Sheet4", "Sheet5", "Sheet6", "Sheet7", "Sheet8"]) print(df_dict[element].keys) return df_dict print(readdataframe(files))
解决方法
核心思路:先获取每个Excel文件的所有工作表名称,筛选出属于Sheet2至Sheet8范围内的表,再仅读取这些存在的工作表,避免因不存在的表引发错误。
修改后的代码:
import os import pandas as pd # 指定文件夹路径 folder = r'specified_path' # 仅保留文件夹内的Excel文件,排除非Excel文件干扰 files = [f for f in os.listdir(folder) if f.endswith(('.xlsx', '.xls'))] # 定义目标工作表范围(Sheet2至Sheet8) target_sheets = {f"Sheet{i}" for i in range(2, 9)} def readdataframe(files): df_dict = {} for file_name in files: file_path = os.path.join(folder, file_name) # 获取当前Excel文件的所有工作表名称 with pd.ExcelFile(file_path) as xls: all_sheets = xls.sheet_names # 筛选出当前文件中存在的目标工作表 valid_sheets = [sheet for sheet in all_sheets if sheet in target_sheets] # 读取筛选后的工作表,返回嵌套字典(文件名: {工作表名: DataFrame}) df_dict[file_name] = pd.read_excel(file_path, sheet_name=valid_sheets) print(f"文件{file_name}读取的工作表:", list(df_dict[file_name].keys())) return df_dict # 执行读取并输出结果 result_dict = readdataframe(files) print(result_dict)
关键说明:
- 用
pd.ExcelFile预读取工作表名称,避免直接读取时因不存在的表抛出异常; - 用集合存储目标工作表名称,提升筛选匹配的效率;
- 增加Excel文件过滤逻辑,避免处理文件夹内的非Excel文件;
- 直接拼接文件路径,无需切换工作目录,逻辑更安全清晰。
内容的提问来源于stack exchange,提问作者Harsh780
相关产品推荐
相关产品推荐

