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

使用pd.merge合并DataFrame持续触发KeyError问题求助

解决pd.merge时的KeyError问题

以下是几个必查的排查步骤,按顺序来大概率能解决问题:

  • 先实打实确认列名真的存在
    别光凭记忆看列名,直接打印两个DataFrame的所有列:

    print("df_results的列:", df_results.columns.tolist())
    print("df_constructors的列:", df_constructors.columns.tolist())
    

    重点看有没有拼写错误(比如大小写差异ConstructorID vs constructorId、下划线少打多打),或者列名带隐藏空格(比如'constructorId ')。如果有空格,先清理列名:

    df_results.columns = df_results.columns.str.strip()
    df_constructors.columns = df_constructors.columns.str.strip()
    
  • 检查列名的类型是否匹配你的调用
    比如如果列名是整数类型(比如列名是1而不是字符串'1'),你用on='1'就会报错。可以用list(df.columns)看列名的实际类型,或者直接用变量引用列名(如果是数字列名的话)。

  • 确认DataFrame没被误操作修改
    回溯之前的代码,有没有不小心删掉目标列(比如df_results = df_results.drop('constructorId', axis=1)),或者重新赋值覆盖了原DataFrame。如果有,重新加载原始数据再试。

  • 别死磕on参数,改用left_on和right_on
    如果两个表的关联列名不一样,直接明确指定两边的列:

    mrg1 = pd.merge(df_results, df_constructors, left_on='results_constructor_id', right_on='constructors_id')
    

    确保left_on对应df_results里的列,right_on对应df_constructors里的列。

  • 排查是不是把索引当成了列
    如果constructorId是DataFrame的索引而不是普通列,先把索引转成列再合并:

    df_results = df_results.reset_index(names='constructorId')
    df_constructors = df_constructors.reset_index(names='constructorId')
    

    或者直接用索引合并:

    mrg1 = pd.merge(df_results, df_constructors, left_index=True, right_index=True)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:05:47