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

KeyError报错排查:Excel数据的Pandas行拆分需求实现

问题排查与数据处理实现

一、报错信息

出现KeyError: 'What is Included',具体报错栈:

"C:\Users\manoj\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\core\indexes\base.py",line 3797,in get_loc raise KeyError(key) from err

二、数据与需求说明

  • 处理对象:Excel工作簿里的「Missing Data Removed」工作表,最终输出要和「Original Sheet」效果一致
  • 核心需求:针对T列「What is Included」,按单元格内href链接的数量拆分对应行——有N个href就生成N条相同的原数据行,同时保留所有高亮的必要信息

三、报错原因

  1. 未指定目标工作表:原代码用pd.read_excel()默认读取第一个工作表,但「Missing Data Removed」不一定是首工作表,读错表后自然找不到目标列
  2. 列名可能不匹配:需确认目标工作表中T列的表头是否严格为「What is Included」,有没有前后空格、大小写差异等问题

四、修正后的完整代码

import pandas as pd
from bs4 import BeautifulSoup

def extract_href_count(html):
    # 处理空单元格,避免解析报错
    if pd.isna(html):
        return 1
    soup = BeautifulSoup(str(html), 'html.parser')
    # 没有href时默认保留1行
    return len(soup.find_all('a', href=True)) or 1

def process_data(input_file, output_file):
    # 明确读取目标工作表
    df = pd.read_excel(input_file, sheet_name="Missing Data Removed")
    
    target_col = "What is Included"
    # 提前检查列是否存在
    if target_col not in df.columns:
        raise ValueError(f"工作表里找不到列:{target_col},请检查列名拼写")
    
    # 收集所有拆分后的行
    expanded_rows = []
    for _, row in df.iterrows():
        href_num = extract_href_count(row[target_col])
        # 按href数量重复当前行
        expanded_rows.extend([row.to_dict() for _ in range(href_num)])
    
    # 生成新的DataFrame并保存
    pd.DataFrame(expanded_rows).to_excel(output_file, index=False)

process_data('F:/Sample Data.xlsx', 'F:/Output.xlsx')

五、关键修正说明

  • 指定工作表:通过sheet_name参数精准读取目标表,彻底避免读错表的问题
  • 空值防护:增加空单元格判断,防止BeautifulSoup解析空内容时抛出异常
  • 高效拆分:用列表批量收集所有行再生成DataFrame,比原代码逐行追加的方式性能更优,数据量大时差异明显
  • 列校验:提前检查目标列是否存在,给出明确的错误提示,方便快速排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:43:00