当前位置: 首页 > 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() 是首选方法。

相关文章:

  • 中国交通建设集团网站服装营销方式和手段
  • 响应式外贸网站建设海外seo推广公司
  • 唐山app开发日照网站优化公司
  • 连云港做网站制作网站优化网
  • 做网站的相关协议网站建设黄页
  • 网站建设多少钱个人宣传推广渠道有哪些
  • 飞往大厂梦之算法提升-day08
  • libevent(1)之基础概述
  • 网站公安网安备案查询API集成指南
  • 元宇宙时代实物建模新趋势:动态纹理映射与实时渲染方案
  • 【驱动设计的硬件基础】PCI和PCI-E
  • TongWeb替换tomcat
  • 【机器学习深度学习】多层神经网络的构成
  • MySQL深分页性能瓶颈:问题分析与解决方案
  • Linux SPI核心驱动spidev.c深度解析
  • svn域名更换,批量修改项目svn地址(linux)
  • FineBI(二)- 数据导入
  • AI时代工具:AIGC导航——AI工具集合
  • day041-web集群架构搭建
  • 阿里最新开源:Mnn3dAvatar 3D数字人框架, 无需联网,本地部署可离线运行,支持多模态实时交互
  • Docker 报错“x509: certificate signed by unknown authority”的排查与解决实录
  • CentOS下安装JDK17
  • CentOS 7 编译安装Nginx 1.27.5完整指南及负载均衡配置
  • Luckysheet Excel xlsx 导入导出互相转换
  • RSS解析并转换为JSON的API集成指南
  • 关键领域软件工厂的安全中枢如何全面升级供应链检测能力