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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:00:17