一周学会Pandas2 Python数据处理与分析-Pandas2数据合并与对比-pd.merge():数据库风格合并

锋哥原创的Pandas2 Python数据处理与分析 视频教程:

2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili

pd.merge():数据库风格合并

**核心功能 **:基于列值(类似 SQL JOIN)合并数据,支持多种连接方式。 适用场景:关联不同数据表的公共字段(如用户 ID、订单号)。

语法:

复制代码
pd.merge(
    left,                 # 左侧 DataFrame
    right,                # 右侧 DataFrame
    how='inner',          # 合并方式:'inner', 'outer', 'left', 'right'
    on=None,              # 用于合并的列名(需在两个 DataFrame 中存在)
    left_on=None,         # 左侧 DataFrame 中作为键的列
    right_on=None,        # 右侧 DataFrame 中作为键的列
    left_index=False,     # 是否用左侧索引作为合并键
    right_index=False,    # 是否用右侧索引作为合并键
    suffixes=('_x', '_y') # 列名冲突时的后缀
)

参数详解

  • left/right: 左表和右表(必填)。

  • on: 连接的列名(若未指定,自动查找同名列)。

  • how : 连接方式,可选 inner(默认)、leftrightouter

  • suffixes : 列名冲突时的后缀(默认 ('_x', '_y'))。

  • validate : 验证合并关系,如 'one_to_one''one_to_many'

常用场景示例

1,基本合并(基于共同列)
复制代码
import pandas as pd

df1 = pd.DataFrame({
    'id': [1, 2, 3],
    'name': ['Alice', 'Bob', 'Charlie']
})

df2 = pd.DataFrame({
    'id': [2, 3, 4],
    'age': [25, 30, 28]
})

# 按 'id' 列合并(默认 inner join)
result = pd.merge(df1, df2, on='id')
2,指定合并方式(how 参数)

左连接(保留左侧所有行)

复制代码
result = pd.merge(df1, df2, on='id', how='left')

输出(左侧 id=1 的 age 为 NaN):

外连接(保留所有行)

复制代码
result = pd.merge(df1, df2, on='id', how='outer')

输出(id=1 和 id=4 的缺失值填充 NaN):

3,合并键列名不同(left_on 和 right_on)
复制代码
df3 = pd.DataFrame({
    'user_id': [2, 3, 4],
    'score': [90, 85, 88]
})

# 合并 df1 的 'id' 和 df3 的 'user_id'
result = pd.merge(df1, df3, left_on='id', right_on='user_id')
4,处理列名冲突(suffixes 参数)

当两个 DataFrame 有相同列名(非合并键)时,自动添加后缀:

复制代码
df4 = pd.DataFrame({
    'id': [2, 3],
    'name': ['Bob', 'Charlie'],
    'department': ['HR', 'Tech']
})

result = pd.merge(df1, df4, on='id', suffixes=('_old', '_new'))

输出(name 列被区分为 name_oldname_new):

5,多键合并

指定多个列作为合并键:

复制代码
df5 = pd.DataFrame({
    'id': [1, 2, 2],
    'year': [2022, 2023, 2023],
    'sales': [100, 200, 150]
})

df6 = pd.DataFrame({
    'id': [1, 2, 2],
    'year': [2022, 2023, 2023],
    'profit': [20, 40, 30]
})

result = pd.merge(df5, df6, on=['id', 'year'])

输出(按 idyear 共同匹配):

相关推荐
copyer_xyf5 小时前
Neo4j:给 RAG 补上关系检索
python·agent
Feynman’s boom5 小时前
PDF解析复盘
数据库·人工智能·算法·pdf解析
whcyhhh6 小时前
CTF‑MISC 隐写术完整学习笔记|图片隐写全题型 + 工具 + 实战例题
python·网络安全·ctf·misc·信息隐藏
码视野6 小时前
多宠 RFID 颈圈识别与湿粮半导体制冷保鲜分餐喂食器解决方案(软硬件一体化)
大数据·人工智能·python
未若君雅裁6 小时前
让模型按契约返回数据,LangChain 结构化输出实战
python·langchain
学习中.........7 小时前
Transformer 训练资源估算:以 CS336 GPT-2 XL 配置为例
人工智能·python·算法·机器学习·自然语言处理
程序员小八77712 小时前
MySQL 事务:一文把 ACID、隔离级别、MVCC、锁全串起来
数据库·mysql
lzhdim13 小时前
提高 SQL 语句执行速度的方法
java·开发语言·数据库·sql·oracle
小陈的进阶之路13 小时前
Claude Code辅助测试:导入篇skills
python·自动化
ltl13 小时前
ClickHouse Distributed 引擎与分布式查询路由
数据库