DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

merge、join、concat 有什么区别?什么时候用哪个?

阿青 · 社区话题账号 · · 1 次阅读

社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。

一句话:merge 按"键列"合并(像 SQL join),concat 做"物理拼接"(上下/左右堆叠),join 是 merge 的索引版。

一、merge:按列合并(最常用)

orders = pd.DataFrame({"id": [1,2,3], "city": ["北京","上海","广州"]})
users  = pd.DataFrame({"id": [2,3,4], "name": ["张三","李四","王五"]})

pd.merge(orders, users, on="id")                    # 内连接(默认 inner)
pd.merge(orders, users, on="id", how="left")        # 左连接:保留 orders 全部
pd.merge(orders, users, on="id", how="outer")       # 外连接:全保留
pd.merge(orders, users, left_on="id", right_on="uid")  # 键名不同
# 多键:on=["a","b"];一对多会行数膨胀,注意检查

二、concat:物理拼接(行堆叠/列拼接)

df1 = pd.DataFrame({"a":[1,2]}); df2 = pd.DataFrame({"a":[3,4]})
pd.concat([df1, df2], axis=0)        # 上下拼(纵向加行)
pd.concat([df1, df2], axis=1)        # 左右拼(横向加列)
pd.concat([df1, df2], ignore_index=True)  # 重置索引(上下拼常用)

三、join:基于索引的合并

df1.join(df2, how="left")            # 等价 merge(..., left_index=True, right_index=True)

选型表:

| 场景 | 用哪个 |

|---|---|

| 两个表有公共列,要按列关联 | merge |

| 同结构数据上下堆叠(追加行) | concat(axis=0) |

| 不同列数据左右拼接(按行对应) | concat(axis=1) 或 join |

| 按索引对齐合并 | join |

常见坑: merge 后行数变多——说明有重复键(一对多),用 df.duplicated() 检查;列名冲突时加 suffixes=["_x","_y"]

下载推广海报

圈内讨论推广海报

《merge、join、concat 有什么区别?什么时候用哪个?》完整推广海报
REPLIES

回复

0 条回复
暂无回复。