Pandas循环处理Excel多工作表报KeyError: 'ENDING'如何解决?
问题原因
- 你代码中
sheet_name='Sheets'错误添加了引号,实际传入的是字符串'Sheets'而非你提前定义的工作表列表变量Sheets,pandas会尝试查找名为Sheets的工作表,找不到就会报错。 - 即便去掉引号直接传入
sheet_name=Sheets,pd.read_excel返回的是键为工作表名、值为对应DataFrame的字典,不是单个数据表,直接对字典执行df['ENDING']筛选操作必然抛出KeyError。
实现代码
以下方案通过循环逐表执行你已经验证过的处理逻辑,最终合并所有结果导出:
import numpy as np import pandas as pd FileLoc = r'C:\T.xlsx' Sheets = ['Alex','Elvin','Gerwin','Jeff','Joshua'] res_list = [] # 存储每个工作表的处理结果 for sheet in Sheets: # 读取单个工作表 df = pd.read_excel(FileLoc, sheet_name=sheet, skiprows=6) # 沿用你验证过的处理逻辑 df = df[df['ENDING'] != 0] df = df.head(30).T df = df[~df.index.isin(['Unnamed: 2','Unnamed: 3','Unnamed: 4','ENDING' ,3])] df.index.rename('STORE', inplace=True) df['index'] = df.index df2 = df.melt(id_vars=['index', 2 ,0, 1] ,value_name='SKU' ) df2 = df2[df2['variable']!= 3] df2['SKU2'] = np.where(df2['SKU'].astype(str).fillna('0').str.contains('ALF|NOB|MET'),df2.SKU, None) df2['SKU2'] = df2['SKU2'].ffill() df2 = df2[~df2[0].isnull()] df2 = df2[df2['SKU'] != 0] df2[1] = pd.to_datetime(df2[1]).dt.date # 可选:新增一列标记数据所属工作表,方便后续区分 # df2['所属人员'] = sheet res_list.append(df2) # 合并所有工作表的处理结果 final_df = pd.concat(res_list, ignore_index=True) # 导出为单个Excel文件 final_df.to_excel(r'C:\合并结果.xlsx', index=False)
如果需要兼容个别结构异常的工作表,可以在循环内添加异常捕获逻辑:
for sheet in Sheets: try: # 上述处理逻辑 except Exception as e: print(f"处理工作表{sheet}时出错:{e}") continue
内容的提问来源于stack exchange,提问作者Trunks
相关产品推荐
相关产品推荐

