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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:06:01