pandas 库 merge 函数使用说明及其示例

🔗 pd.merge 是做什么的?

简单说,pd.merge 就是数据界的“连连看”
它能把两张表格(DataFrame),按照共同的列(或索引)拼成一张大表,就像一个会自动对齐的超级胶水 🤝。
在数据处理中,我们经常会有“根据一个关键字段,把分散在不同表里的信息合并到一起”的需求——这恰好就是 merge 的拿手好戏。

# 选取 df_1 中需要合并的列
cols_to_merge = ["条码", "装框", "有贴膜", "外观",]
df_1_subset = df_1[cols_to_merge]

# 左连接,将信息并入 df_2
df_2 = pd.merge(df_2, df_1_subset , on="条码", how="left") 

参考上述内容,给出 pd.merge 的函数用法说明(参数解释使用表格呈现),并给出一个示例,其中要求以教程语气,可适当添加Emoji

正文下述内容由以上DeepSeek 2026-05-08生成

👋 嗨,今天我们来深入认识一下 pandas 里超级实用的 pd.merge 函数!它就像 Excel 中的 VLOOKUP,但更灵活~

你的这段代码:

cols_to_merge = ["条码", "装框", "有贴膜", "外观"]
df_1_subset = df_1[cols_to_merge]
df_2 = pd.merge(df_2, df_1_subset, on="条码", how="left")

其实就是在做 左连接,把 df_1_subset 里的额外信息,按照 "条码" 这一列,补充到 df_2 里。
下面我们就来系统学习 pd.merge 的完整用法吧 📚

🔗 pd.merge 函数用法说明

基本函数签名:

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'),
         copy=True, indicator=False, validate=None)

常用参数详解 📋

参数 类型 说明 常用值 / 示例
left DataFrame 左表,合并后保留的基础表 df_2
right DataFrame 右表,提供额外信息的表 df_1_subset
how str 连接方式 ⭐ 'left' (左连接,保留左表所有行) 'right' (右连接) 'inner' (内连接,只保留匹配行) 'outer' (外连接,两表并集) 'cross' (笛卡尔积)
on str 或 list 用于连接的 列名,该列必须在左右表中 同时存在 "条码"["条码", "批次"]
left_on str 或 list 左表用于连接的列,当左右键名不同时使用 "条码_id"
right_on str 或 list 右表用于连接的列 "条码"
left_index bool 是否用左表的 行索引 作为连接键 True / False (默认)
right_index bool 是否用右表的行索引作为连接键 True / False (默认)
suffixes tuple 当左右表有重名列(非连接键)时,自动添加的后缀 ('_x', '_y') 默认,可改为 ('_左', '_右')
indicator bool 或 str 添加一列 _merge,显示每行数据来源(仅左、仅右、两者都有) True'来源' 自定义列名
validate str 验证数据合并是否有重复(报错用) 'one_to_one', 'one_to_many', 'many_to_one', 'many_to_many'

🧪 实战教程:左连接补全信息

想象一下,我们有两张表格 📊

  • df_2:产品清单,有“条码”、“产品名”和“价格”
  • df_1:质检档案,记录了“条码”、“装框”、“有贴膜”、“外观”

需求是把质检信息合并到产品清单里,所有产品都要保留,找不到质检数据的暂时空着。这就是 左连接(how='left' 的经典场景!

1️⃣ 创建示例数据

import pandas as pd

# 质检表 df_1
df_1 = pd.DataFrame(
    {
        "条码": ["A001", "A002", "A003"],
        "装框": ["是", "否", "是"],
        "有贴膜": ["是", "否", "是"],
        "外观": ["完好", "轻微划痕", "完好"],
    }
)

# 产品表 df_2(注意 A004 在质检表中没有记录)
df_2 = pd.DataFrame(
    {
        "条码": ["A001", "A002", "A004"],
        "产品名": ["手机壳", "屏幕膜", "充电线"],
        "价格": [29.9, 15.0, 39.0],
    }
)

此时查看两张表:

🔹 df_2 (左表)
   条码  产品名   价格
0  A001  手机壳  29.9
1  A002  屏幕膜  15.0
2  A004  充电线  39.0

🔸 df_1 (右表)
   条码 装框 有贴膜   外观
0  A001   是    是   完好
1  A002   否    否  轻微划痕
2  A003   是    是   完好

2️⃣ 挑选需要的列,准备右表

cols_to_merge = ["条码", "装框", "有贴膜", "外观"]
df_1_subset = df_1[cols_to_merge]

📌 这里的 df_1_subset 就是我们准备 贴到 左表上的“信息贴纸”。

3️⃣ 执行左连接 ✨

df_2 = pd.merge(df_2, df_1_subset, on="条码", how="left")

4️⃣ 查看合并结果 🎉

print(df_2)
   条码  产品名   价格  装框  有贴膜   外观
0  A001  手机壳  29.9   是    是    完好
1  A002  屏幕膜  15.0   否    否  轻微划痕
2  A004  充电线  39.0  NaN   NaN   NaN

🎯 完美!

  • A001A002 的质检信息成功补入 ✅
  • A004 虽然质检表里没有,但因为用了 how='left',所以左表行保留,对应右表列为 NaN
  • A003 只在右表中存在,左连接不会把它加进来(这保护了左表的完整性)

⚠️ 几个贴心小提示

  • 如果左右表除了 "条码" 外还有 重名列(比如都有“备注”),合并后会自动加上后缀 _x_y,你可以用 suffixes=('_产品','_质检') 让它更易读 😉
  • 想看清哪些行成功匹配?加上 indicator=True,会多出一列 _merge,帮你标记 left_onlyright_onlyboth 🔍
  • 连接键列名不一样?别急,用 left_on + right_on 组合就好,例如
    pd.merge(df_2, df_1, left_on="产品条码", right_on="条码", how="left")