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

如何在循环中跳过Excel空/缺失工作表,合并有效DataFrame并保存结果

修改方案

核心调整点

  • 先获取每个Excel文件的全部工作表名称,仅处理存在的目标工作表
  • 读取工作表后先判断是否为空,空表直接跳过不处理
  • 抽象重复的数据清洗逻辑,减少冗余代码
  • 收集所有有效处理后的DataFrame再合并,不存在的表/空表不参与合并
  • 修复原代码笔误:原代码处理df_1时错误使用了未定义的df_bon变量,已修正为df_1

修改后完整代码

import pandas as pd
import glob

datapath = r"C:\Users\Documents\sample"
# 补充路径分隔符,避免匹配不到文件
excel_files = glob.glob(datapath + r"\*.xlsx")
# 定义要处理的目标工作表列表
target_sheets = ["data1", "data2", "data3"]

for excel in excel_files:
    # 先读取Excel文件对象,获取所有工作表名
    xls = pd.ExcelFile(excel)
    all_sheets = xls.sheet_names
    # 存储当前文件所有有效处理后的DataFrame
    df_list = []
    
    for sheet in target_sheets:
        # 跳过不存在的工作表
        if sheet not in all_sheets:
            continue
        # 读取当前工作表
        df = pd.read_excel(xls, sheet_name=sheet, header=None)
        # 跳过空工作表
        if df.empty:
            continue
        # 统一执行数据清洗
        df.rename(columns={0:'ID_Num'}, inplace = True)
        df = df.groupby(["ID_Num"]).size().reset_index(name='Count')
        # 若ID_Num为数字类型,可先加df['ID_Num'] = df['ID_Num'].astype(str)再切片
        df['Name'] = df['ID_Num'].str[:3]
        df_list.append(df)
    
    # 只有存在有效数据时才保存结果
    if df_list:
        # 废弃pandas高版本不支持的append方法,改用concat
        df_final = pd.concat(df_list, ignore_index=True)
        # 若需要保留原Excel的其他工作表,可使用下面的追加写入模式(需先安装openpyxl:pip install openpyxl)
        # with pd.ExcelWriter(excel, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer:
        #     df_final.to_excel(writer, sheet_name="New Data", index=False)
        # 原覆盖写入逻辑
        df_final.to_excel(excel, sheet_name="New Data", index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:45:01