如何在Pandas中基于另一DataFrame实现查找匹配列?
Pandas Merge出现KeyError及合并逻辑问题
我尝试执行以下代码:
df1 = pd.merge(df1, df2, how="inner", on="UserID")
运行时出现KeyError,同时不确定这种方法是否能得到正确结果,担心它只是简单将第二个DataFrame的数据拼接在第一个旁,而非按UserID匹配对应的Email和Name。
现有df1:
| ObjectID | UserID | Description |
|---|---|---|
| Ajh1 | john123 | Strawberry1 |
| Basd2 | katie456 | Orange1 |
| Chg3 | sarah789 | Pumpkin1 |
| Eas1 | john123 | Strawberry2 |
| Fjd3 | sarah789 | Pumpkin2 |
| Gar2 | katie456 | Orange2 |
| Dfd4 | emilio012 | Melon1 |
| Ddfd5 | emilio012 | Melon2 |
现有df2:
| ObjectID | Name | |
|---|---|---|
| katie456 | katieATkatieDOTcom | Katherine Smith |
| emilio012 | emilioATemilioDOTcom | Emilio Perez |
| john123 | johnATjohnDOTcom | John Muller |
| sara789 | saraATsaraDOTcom | Sara De La Cruz |
期望结果:
| Object ID | User ID | Description | Name | |
|---|---|---|---|---|
| Ajh1 | john123 | Strawberry1 | johnATjohnDOTcom | John Muller |
| Basd2 | katie456 | Orange1 | katieATkatieDOTcom | Katherine Smith |
| Chg3 | sarah789 | Pumpkin1 | saraATsaraDOTcom | Sara De La Cruz |
| Eas1 | john123 | Strawberry2 | johnATjohnDOTcom | John Muller |
| Fjd3 | sarah789 | Pumpkin2 | saraATsaraDOTcom | Sara De La Cruz |
| Gar2 | katie456 | Orange1 | katieATkatieDOTcom | Katherine Smith |
| Dfd4 | emilio012 | Melon1 | emilioATemilioDOTcom | Emilio Perez |
| Ddfd5 | emilio012 | Melon2 | emilioATemilioDOTcom | Emilio Perez |
问题解决与说明
1. KeyError原因
你用on="UserID"合并,但df2中没有UserID列——df2里存储用户ID的列是ObjectID,这是报错的直接原因。
2. 正确合并代码
需要指定左右表的匹配列,同时处理拼写差异(df1的sarah789和df2的sara789少了一个h):
# 先修正df1的UserID拼写 df1["UserID"] = df1["UserID"].replace("sarah789", "sara789") # 按df1.UserID匹配df2.ObjectID,保留df1所有行 df_merged = pd.merge(df1, df2, how="left", left_on="UserID", right_on="ObjectID") # 清理列并调整名称匹配期望结果 df_merged = df_merged.drop(columns="ObjectID_y") df_merged = df_merged.rename(columns={ "ObjectID_x": "Object ID", "UserID": "User ID" })
- 用
how="left"确保df1的所有行都被保留,避免inner合并丢失未匹配的行 - 拼写修正后,
sarah789才能匹配到df2的sara789
3. 合并逻辑说明
Pandas的merge不是简单拼接,它会根据指定的匹配列逐行查找对应值并合并,完全符合你“按UserID查找对应Email和Name”的需求。
内容的提问来源于stack exchange,提问作者Phil Mann
相关产品推荐
相关产品推荐

