如何将DataFrame首行起数据追加到另一DataFrame第11行并修复KeyError
报错根因
- 触发
KeyError: None of [Index(...)] are in the [columns]是因为你要筛选的NAZIV ARTIKLA、EAN CODE列,在antonio_trade或Dobavljaci中不存在,通常是列名带隐藏前后空格、拼写/大小写不匹配导致,另外你写列选择代码时在"EAN CODE"后多写了一个多余逗号,也可能触发解析异常。 - 原有代码逻辑不符合需求:
DataFrame.append()是直接把两个表做首尾纵向拼接,无法指定插入位置,且该方法在Pandas 2.0及以上版本已经弃用,不建议使用。 - 需求中“把第一个DataFrame首行开始的数据,合并到另一个DataFrame第11行起始位置”属于按位置插入拼接,不能用普通追加逻辑实现。
解决方法
第一步:修复列名报错
先执行代码打印两个DataFrame的真实列名,对照修正拼写,统一清理列名前后的隐藏空格,从根源解决KeyError:
# 打印两个表的全部列名,确认目标列实际写法 print(antonio_trade.columns.tolist()) print(Dobavljaci.columns.tolist()) # 批量清理所有列名的前后空格,避免空格导致的匹配失败 antonio_trade.columns = antonio_trade.columns.str.strip() Dobavljaci.columns = Dobavljaci.columns.str.strip()
第二步:按位置拼接实现需求
Pandas默认位置索引从0开始计数,把要插入数据的目标表拆成指定位置前、指定位置后两部分,按「目标表插入位置前的内容 + 待插入的第一个表数据 + 目标表插入位置后的剩余内容」的顺序拼接,就能实现指定位置插入合并的效果。
完整实现代码:
import pandas as pd # 提取两个表需要的目标列,确保列名和上一步打印的结果完全一致 trade_data = antonio_trade[["NAZIV ARTIKLA", "EAN CODE"]] target_data = Dobavljaci[["NAZIV ARTIKLA", "EAN CODE"]] # 按位置切分目标表,iloc是按行号位置切分,不受自定义索引影响 # 行号从1开始计数、要从第11行开始插入新数据时,切分位置传10,即取前10行保留 part_before = target_data.iloc[:10, :] part_after = target_data.iloc[10:, :] # 按顺序拼接三部分,重置索引避免索引重复 Antonio_trade_merge = pd.concat([part_before, trade_data, part_after], ignore_index=True)
提示:如果需要保留原表前11行、从第12行开始插入新数据,把切分位置的数值改成11即可,根据实际需求调整切分参数。
内容的提问来源于stack exchange,提问作者Adi Šehić
相关产品推荐
相关产品推荐

