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
🎯 完美!
A001、A002的质检信息成功补入 ✅A004虽然质检表里没有,但因为用了how='left',所以左表行保留,对应右表列为NaNA003只在右表中存在,左连接不会把它加进来(这保护了左表的完整性)
⚠️ 几个贴心小提示
- 如果左右表除了
"条码"外还有 重名列(比如都有“备注”),合并后会自动加上后缀_x和_y,你可以用suffixes=('_产品','_质检')让它更易读 😉 - 想看清哪些行成功匹配?加上
indicator=True,会多出一列_merge,帮你标记left_only、right_only、both🔍 - 连接键列名不一样?别急,用
left_on+right_on组合就好,例如
pd.merge(df_2, df_1, left_on="产品条码", right_on="条码", how="left")