如何在循环中跳过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
相关产品推荐
相关产品推荐

