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条相同的原数据行,同时保留所有高亮的必要信息
三、报错原因
- 未指定目标工作表:原代码用
pd.read_excel()默认读取第一个工作表,但「Missing Data Removed」不一定是首工作表,读错表后自然找不到目标列 - 列名可能不匹配:需确认目标工作表中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
相关产品推荐
相关产品推荐

