使用pd.merge合并DataFrame持续触发KeyError问题求助
解决pd.merge时的KeyError问题
以下是几个必查的排查步骤,按顺序来大概率能解决问题:
先实打实确认列名真的存在
别光凭记忆看列名,直接打印两个DataFrame的所有列:print("df_results的列:", df_results.columns.tolist()) print("df_constructors的列:", df_constructors.columns.tolist())重点看有没有拼写错误(比如大小写差异
ConstructorIDvsconstructorId、下划线少打多打),或者列名带隐藏空格(比如'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
相关产品推荐
相关产品推荐

