Pandas merge合并DataFrame触发KeyError:'Address'报错如何解决
报错根因
KeyError: 'Address'的触发原因非常明确:你传入merge方法的右表根本没有Address列。
- 你写的
df2['email']是从DataFrame中抽取单列的操作,返回结果是仅包含email字段的一维Series,你之前重命名得到的Address列完全没有被传入merge逻辑 - pandas做表关联时,要求
on参数指定的关联键必须在左右两个表中同时存在,右表找不到对应列时就会直接抛出KeyError,和df1的列结构、字段数据类型没有任何关系。
修复方法
方案1:保留原有重命名逻辑
合并时右表必须同时包含关联键和待匹配字段,不要只传入单列:
df2.rename(columns = {'Add.':'Address'}, inplace = True) # 右表选取关联键+待匹配字段两个列 df1 = df1.merge(df2[['Address', 'email']], how="left", on = "Address")
方案2:省略重命名步骤
不需要提前修改df2的列名,直接通过left_on、right_on分别指定两个表的关联字段即可,合并后删除冗余列:
df1 = df1.merge( df2[['Add.', 'email']], how="left", left_on="Address", right_on="Add." ) # 删除重复的地址列 df1.drop(columns=['Add.'], inplace=True)
匹配逻辑提示
普通merge默认做严格等值匹配,只有两个表的地址字符串完全一致时才能关联成功。从你给出的样例数据看:
- df1中
1111、1233两个地址可以正常匹配到对应email - df1中
3456和df2中345689、345699仅前缀相似、值不完全相等,无法通过普通merge关联,如果需要做前缀/包含类的模糊匹配,需要单独编写字符串匹配逻辑。
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

