当前位置: 首页 > news >正文

【Pandas】pandas DataFrame merge

Pandas2.2 DataFrame

Combining comparing joining merging

方法描述
DataFrame.assign(**kwargs)用于向 DataFrame 添加新列或替换现有列的方法
DataFrame.compare(other[, align_axis, …])用于比较两个 DataFrame 的差异的方法
DataFrame.join(other[, on, how, lsuffix, …])用于**将两个 DataFrame 按列合并(默认按行索引对齐)**的方法
DataFrame.merge(right[, how, on, left_on, …])用于**基于一个或多个键将两个 DataFrame 进行数据库风格的合并(join)**的方法

pandas.DataFrame.merge()

pandas.DataFrame.merge() 是 Pandas 中用于**基于一个或多个键将两个 DataFrame 进行数据库风格的合并(join)**的方法。它类似于 SQL 中的 JOIN 操作,支持多种连接方式(如 inner, left, right, outer),并可以指定左右 DataFrame 的连接键。


📌 方法签名
DataFrame.merge(right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=False,suffixes=('_x', '_y'),copy=None,indicator=False,validate=None
)

🔧 参数说明:
参数说明
right要合并的另一个 DataFrame
how合并方式,默认 'inner',可选 'left', 'right', 'outer'
on用于连接的列名(在两个 DataFrame 中都存在)
left_on左边 DataFrame 的连接键(列名或索引)
right_on右边 DataFrame 的连接键(列名或索引)
left_index是否使用左边的索引作为连接键
right_index是否使用右边的索引作为连接键
sort是否根据连接键对结果排序,默认 False
suffixes对重复列名添加后缀,默认为 ('_x', '_y')
copy是否复制数据,默认 True,一般不需修改
indicator是否添加 _merge 列显示来源,默认 False
validate验证连接类型,如 'one_to_one', 'one_to_many'

✅ 返回值
  • 返回一个新的 DataFrame,包含两个 DataFrame 根据指定键合并后的数据。

🧪 示例代码及结果
示例 1:内连接(how='inner'
import pandas as pddf1 = pd.DataFrame({'key': ['K0', 'K1', 'K2'],'A': ['A0', 'A1', 'A2']
})df2 = pd.DataFrame({'key': ['K0', 'K1', 'K3'],'B': ['B0', 'B1', 'B3']
})# 内连接
result = df1.merge(df2, on='key')
print(result)
输出:
  key   A   B
0  K0  A0  B0
1  K1  A1  B1

示例 2:左连接(how='left'
result = df1.merge(df2, on='key', how='left')
print(result)
输出:
  key   A    B
0  K0  A0   B0
1  K1  A1   B1
2  K2  A2  NaN

示例 3:右连接(how='right'
result = df1.merge(df2, on='key', how='right')
print(result)
输出:
  key    A   B
0  K0   A0  B0
1  K1   A1  B1
2  K3  NaN  B3

示例 4:外连接(how='outer'
result = df1.merge(df2, on='key', how='outer')
print(result)
输出:
  key    A    B
0  K0   A0   B0
1  K1   A1   B1
2  K2   A2  NaN
3  K3  NaN   B3

示例 5:使用不同列名连接(left_on, right_on
df1 = pd.DataFrame({'id': [1, 2, 3],'name': ['Alice', 'Bob', 'Charlie']
})df2 = pd.DataFrame({'user_id': [1, 2, 4],'score': [90, 85, 70]
})result = df1.merge(df2, left_on='id', right_on='user_id')
print(result)
输出:
   id     name  user_id  score
0   1    Alice        1     90
1   2      Bob        2     85

示例 6:使用索引连接(left_index=True, right_index=True
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2']}, index=['K0', 'K1', 'K2'])
df2 = pd.DataFrame({'B': ['B0', 'B1', 'B3']}, index=['K0', 'K1', 'K3'])result = df1.merge(df2, left_index=True, right_index=True)
print(result)
输出:
     A   B
K0  A0  B0
K1  A1  B1

示例 7:处理列名冲突(suffixes
df1 = pd.DataFrame({'key': ['K0', 'K1'], 'value': [1, 2]})
df2 = pd.DataFrame({'key': ['K0', 'K1'], 'value': [3, 4]})result = df1.merge(df2, on='key', suffixes=('_left', '_right'))
print(result)
输出:
  key  value_left  value_right
0  K0           1            3
1  K1           2            4

示例 8:添加来源信息(indicator=True
result = df1.merge(df2, on='key', how='outer', indicator=True)
print(result)
输出:
  key  value_left  value_right     _merge
0  K0         1.0          3.0       both
1  K1         2.0          4.0       both

🧠 应用场景
场景说明
多表关联分析类似 SQL 的 JOIN 操作,进行数据融合
特征拼接在机器学习中合并特征与标签
补全缺失数据使用另一个 DataFrame 补充当前数据中的缺失字段
数据清洗去重、合并、标准化等操作前的数据准备
时间序列对齐按时间戳合并多个指标

⚠️ 注意事项
  • merge() 默认是 inner join
  • 若未指定 on,会自动选择两个 DataFrame 中同名列作为连接键;
  • 若列名冲突,必须指定 suffixes
  • merge() 不支持一次合并多个 DataFrame;
  • 性能上比 join() 更适合基于列的复杂连接。

✅ 对比 join() vs merge()
特性join()merge()
默认连接方式基于索引基于列
更适合添加额外列复杂的 SQL 式连接
支持多个 DataFrame❌(只能两表)
支持 on=
支持 suffixes✅(lsuffix, rsuffix✅(suffixes=('_x','_y')
更简洁

你可以根据是否需要基于列进行复杂连接来选择使用 merge()join()。如果你需要执行类似 SQL 的 JOIN 操作,merge() 是首选方法。

http://www.lqws.cn/news/505621.html

相关文章:

  • 鸿蒙开发 一 (八)、自定义绘制
  • 3DSwiper 好看的走马灯轮播图
  • Meson介绍及编译Glib库
  • 顺序表整理和单项链表01 day20
  • 对人工智能的厌倦感是真实存在的,而且它给品牌带来的损失远不止是参与度的下降
  • 【sklearn】K-means、密度聚类、层次聚类、GMM、谱聚类
  • Flutter 学习 之 mixin
  • CFDEM 介绍和使用指南
  • CUDA12.1+高版本pytorch复现Mtrans环境
  • FastMCP+python简单测试
  • 全面掌握 Nginx的功能和使用方法
  • Ingress-Nginx简介和配置样例
  • 最方便的应用构建——利用云原生快速搭建本地deepseek知识仓库
  • 程序猿成长之路之数据挖掘篇——聚类算法介绍
  • uniapp实现远程图片下载到手机相册功能
  • redis的安装及操作
  • 支持向量机(SVM):原理、实现与应用
  • Python核心库Pandas详解:数据处理与分析利器
  • 传输层协议TCP
  • 随机森林详解:原理、优势与应用实践
  • 【apache-maven3.9安装与配置】
  • C++ string类的操作
  • Python与Web3.py库交互实践
  • ref() 与 reactive()
  • Android中Navigation使用介绍
  • 跟着AI学习C#之项目实践Day5
  • 从0开始学习R语言--Day31--概率图模型
  • Blaster - Multiplayer P162-PXX
  • 系统性能优化-4 磁盘
  • 【Bluedroid】蓝牙启动之 bta_dm_enable 流程梳理 源码解析