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

如何删除CSV中首列值存在于另一CSV首列的行?解决pandas KeyError问题

问题原因与解决方案

报错原因

你运行代码报KeyError: 'drop_key'的核心原因是两张表除连接键Genus外,存在FAGR、MOCA、MUBR等多个重名列,合并时列名冲突导致标记列drop_key没有被正确合并到结果中;也有可能是你在给df2添加drop_key后,后续操作意外覆盖了df2变量,导致标记列丢失。

更简洁的解决方案(推荐,适合学习索引逻辑)

不需要用merge关联,直接用pandas的isin方法筛选即可,代码逻辑更清晰易懂:

# 提取表2中所有需要剔除的Genus唯一值
to_drop = df2['Genus'].unique()
# 筛选表1中Genus不在剔除列表中的行
result_df = df1[~df1['Genus'].isin(to_drop)]

其中~是pandas中的逻辑取反符号,刚好匹配你「保留不在表2首列中的行」的需求,运行后得到的result_df就是符合要求的结果。

原有代码的修复方案

如果你想沿用merge的逻辑,只需要合并时仅保留表2的连接键和标记列,避免重名列干扰即可:

df1 = generagrouped_df
# 仅保留需要的列做合并标记,避免重名冲突
df2_mark = df2[['Genus']].copy()
df2_mark['drop_key'] = 'DROP'
output = pd.merge(
    left = df1,
    right = df2_mark,
    how = 'left',
    on = 'Genus'
)
# 筛选未匹配到标记的行,同时删除多余的标记列
result_df = output[output['drop_key'].isna()].drop(columns=['drop_key'])

如果还有问题,可以在merge后执行print(output.columns.tolist())查看合并后的所有列名,确认标记列是否存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:39:03