前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Pandas DataFrame 数据合并、连接

Pandas DataFrame 数据合并、连接

作者头像
马哥Python
发布于 2019-06-27 09:00:45
发布于 2019-06-27 09:00:45
3.5K00
代码可运行
举报
文章被收录于专栏:快乐学Python快乐学Python
运行总次数:0
代码可运行

merge 通过键拼接列 pandas提供了一个类似于关系数据库的连接(join)操作的方法merage,可以根据一个或多个键将不同DataFrame中的行连接起来 语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
merge(left, right, how='inner', on=None, left_on=None, right_on=None,
      left_index=False, right_index=False, sort=True,
      suffixes=('_x', '_y'), copy=True, indicator=False)

用于通过一个或多个键将两个数据集的行连接起来,类似于 SQL 中的 JOIN。

该函数的典型应用场景是:针对同一个主键存在两张包含不同字段的表,现在我们想把他们整合到一张表里。在此典型情况下,结果集的行数并没有增加,列数则为两个元数据的列数和减去连接键的数量。

on=None 用于显示指定列名(键名),如果该列在两个对象上的列名不同,则可以通过 left_on=None, right_on=None 来分别指定。或者想直接使用行索引作为连接键的话,就将 left_index=False, right_index=False 设为 True。 how='inner' 参数指的是当左右两个对象中存在不重合的键时,取结果的方式:inner 代表交集;outer 代表并集;left 和 right 分别为取一边。 suffixes=('_x','_y') 指的是当左右对象中存在除连接键外的同名列时,结果集中的区分方式,可以各加一个小尾巴。 对于多对多连接,结果采用的是行的笛卡尔积。 参数说明: left与right:两个不同的DataFrame how:指的是合并(连接)的方式有inner(内连接),left(左外连接),right(右外连接),outer(全外连接);默认为inner on : 指的是用于连接的列索引名称。必须存在右右两个DataFrame对象中,如果没有指定且其他参数也未指定则以两个DataFrame的列名交集做为连接键 left_on:左则DataFrame中用作连接键的列名;这个参数中左右列名不相同,但代表的含义相同时非常有用。 right_on:右则DataFrame中用作 连接键的列名 left_index:使用左则DataFrame中的行索引做为连接键 right_index:使用右则DataFrame中的行索引做为连接键 sort:默认为True,将合并的数据进行排序。在大多数情况下设置为False可以提高性能 suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为('_x','_y') copy:默认为True,总是将数据复制到数据结构中;大多数情况下设置为False可以提高性能 indicator:在 0.17.0中还增加了一个显示合并数据中来源情况;如只来自己于左边(left_only)、两者(both)

merge一些特性示例: 1.默认以重叠的列名当做连接键。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [16]: df1=DataFrame({'key':['a','b','b'],'data1':range(3)})

In [17]: df2=DataFrame({'key':['a','b','c'],'data2':range(3)})

In [18]: pd.merge(df1,df2)   #没有指定连接键,默认用重叠列名,没有指定连接方式
Out[18]: 
   data1 key  data2
0      0   a      0
1      1   b      1
2      2   b      1

2.默认做inner连接(取key的交集),连接方式还有(left,right,outer),制定连接方式加参数:how=''

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [19]: pd.merge(df2,df1)
Out[19]: 
   data2 key  data1
0      0   a      0
1      1   b      1
2      1   b      2                   #默认内连接,可以看见c没有连接上。

In [20]: pd.merge(df2,df1,how='left')    #通过how,指定连接方式
Out[20]: 
   data2 key  data1
0      0   a      0
1      1   b      1
2      1   b      2
3      2   c    NaN

3.多键连接时将连接键组成列表传入,例:pd.merge(df1,df2,on=['key1','key2']

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [23]: right=DataFrame({'key1':['foo','foo','bar','bar'],
    ...:     'key2':['one','one','one','two'],
    ...:     'lval':[4,5,6,7]})

In [24]: left=DataFrame({'key1':['foo','foo','bar'],
    ...:     'key2':['one','two','one'],
    ...:     'lval':[1,2,3]})

In [25]: right=DataFrame({'key1':['foo','foo','bar','bar'],
    ...:     'key2':['one','one','one','two'],
    ...:     'lval':[4,5,6,7]})

In [26]: pd.merge(left,right,on=['key1','key2'],how='outer')  #传出数组
Out[26]: 
  key1 key2  lval_x  lval_y
0  foo  one       1       4
1  foo  one       1       5
2  foo  two       2     NaN
3  bar  one       3       6
4  bar  two     NaN       7

4.如果两个对象的列名不同,可以分别指定,例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pd.merge(df1,df2,left_on='lkey',right_on='rkey')

 

In [31]: df3=DataFrame({'key3':['foo','foo','bar','bar'], #将上面的right的key 改了名字
    ...:     'key4':['one','one','one','two'],
    ...:     'lval':[4,5,6,7]})

In [32]: pd.merge(left,df3,left_on='key1',right_on='key3')  #键名不同的连接
Out[32]:  
  key1 key2  lval_x key3 key4  lval_y
0  foo  one       1  foo  one       4
1  foo  one       1  foo  one       5
2  foo  two       2  foo  one       4
3  foo  two       2  foo  one       5
4  bar  one       3  bar  one       6
5  bar  one       3  bar  two       7

5.以索引当做连接键,使用参数left_index=true,right_index=True (最好使用join)

join 拼接列,主要用于索引上的合并

join方法提供了一个简便的方法用于将两个DataFrame中的不同的列索引合并成为一个DataFrame

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
join(self, other, on=None, how='left', lsuffix='', rsuffix='',sort=False):

其中参数的意义与merge方法基本相同,只是join方法默认为左外连接how=left

1.默认按索引合并,可以合并相同或相似的索引,不管他们有没有重叠列。

2.可以连接多个DataFrame

3.可以连接除索引外的其他列

4.连接方式用参数how控制

5.通过lsuffix='', rsuffix='' 区分相同列名的列

concat 可以沿着一条轴将多个对象堆叠到一起 concat方法相当于数据库中的全连接(UNION ALL),可以指定按某个轴进行连接,也可以指定连接的方式join(outer,inner 只有这两种)。与数据库不同的时concat不会去重,要达到去重的效果可以使用drop_duplicates方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
           keys=None, levels=None, names=None, verify_integrity=False, copy=True):

轴向连接 pd.concat() 就是单纯地把两个表拼在一起,这个过程也被称作连接(concatenation)、绑定(binding)或堆叠(stacking)。因此可以想见,这个函数的关键参数应该是 axis,用于指定连接的轴向。

在默认的 axis=0 情况下,pd.concat([obj1,obj2]) 函数的效果与 obj1.append(obj2) 是相同的;

而在 axis=1 的情况下,pd.concat([df1,df2],axis=1) 的效果与 pd.merge(df1,df2,left_index=True,right_index=True,how='outer') 是相同的。

可以理解为 concat 函数使用索引作为“连接键”。 本函数的全部参数为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False)

objs 就是需要连接的对象集合,一般是列表或字典;

axis=0 是连接轴向join='outer' 参数作用于当另一条轴的 index 不重叠的时候,只有 'inner' 和 'outer' 可选(顺带展示 ignore_index=True 的用法)

concat 一些特点:

1.作用于Series时,如果在axis=0时,类似union。axis=1 时,组成一个DataFrame,索引是union后的,列是类似join后的结果。

2.通过参数join_axes=[] 指定自定义索引。

3.通过参数keys=[] 创建层次化索引

4.通过参数ignore_index=True 重建索引。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
In [5]: df1=DataFrame(np.random.randn(3,4),columns=['a','b','c','d'])

In [6]: df2=DataFrame(np.random.randn(2,3),columns=['b','d','a'])

In [7]: pd.concat([df1,df2])
Out[7]: 
          a         b         c         d
0 -0.848557 -1.163877 -0.306148 -1.163944
1  1.358759  1.159369 -0.532110  2.183934
2  0.532117  0.788350  0.703752 -2.620643
0 -0.316156 -0.707832       NaN -0.416589
1  0.406830  1.345932       NaN -1.874817
In [8]: pd.concat([df1,df2],ignore_index=True)
Out[8]: 
          a         b         c         d
0 -0.848557 -1.163877 -0.306148 -1.163944
1  1.358759  1.159369 -0.532110  2.183934
2  0.532117  0.788350  0.703752 -2.620643
3 -0.316156 -0.707832       NaN -0.416589
4  0.406830  1.345932       NaN -1.874817

我会阅读所有的评论,所以无论你有什么想要说的,或者是想要分享的,甚至是问题之类的,都可以在下面留言。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.03.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Pandas高级教程之:Dataframe的合并
Pandas提供了很多合并Series和Dataframe的强大的功能,通过这些功能可以方便的进行数据分析。本文将会详细讲解如何使用Pandas来合并Series和Dataframe。
程序那些事
2021/06/14
5.3K0
pandas系列9-数据规整
.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre>
皮大大
2021/03/02
8300
Pandas 2.2 中文官方教程和指南(十三)
写时复制将成为 pandas 3.0 的默认设置。我们建议现在就启用它以从所有改进中受益。
ApacheCN_飞龙
2024/04/25
4730
【Python】详解pandas库中pd.merge函数与代码示例
在数据科学和分析领域,经常需要处理来自不同源的数据集,并将它们合并为一个统一的数据结构以进行进一步的分析。Pandas库中的pd.merge()函数提供了一种灵活的方式来合并两个或多个DataFrame,类似于SQL中的JOIN操作。本文将详细介绍pd.merge()函数的用法,并通过多个代码示例展示其在不同场景下的应用。
程序员洲洲
2024/06/13
1.3K0
【Python】详解pandas库中pd.merge函数与代码示例
数据规整(2)
数据集的联合将通过一个或多个键进行联合,这些操作与数据库类似。pandas通过merge函数进行联合。
python数据可视化之路
2023/02/23
8110
数据规整(2)
一文搞定Pandas数据合并
在实际处理数据业务需求中,我们经常会遇到这样的需求:将多个表连接起来再进行数据的处理和分析,类似SQL中的连接查询功能。
皮大大
2021/03/01
8470
一文搞定Pandas数据合并
《利用Python进行数据分析·第2版》第8章 数据规整:聚合、合并和重塑8.1 层次化索引8.2 合并数据集8.3 重塑和轴向旋转8.4 总结
在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析。本章关注可以聚合、合并、重塑数据的方法。 首先,我会介绍pandas的层次化索引,它广泛用于以上操作。然后,我深入介绍了一些特殊的数据操作。在第14章,你可以看到这些工具的多种应用。 8.1 层次化索引 层次化索引(hierarchical indexing)是pandas的一项重要功能,它使你能在一个轴上拥有多个(两个以上)索引级别。抽象点说,它使你能以低维度形式处理高维度数据。我们先来看一个简单的例子:创建一个Series,并用一个
SeanCheney
2018/04/24
2.7K0
《利用Python进行数据分析·第2版》第8章 数据规整:聚合、合并和重塑8.1 层次化索引8.2 合并数据集8.3 重塑和轴向旋转8.4 总结
pandas系列4_合并和连接
直接将值和索引粘合在一起,默认是在axis=0上面工作,得到的是新的Series;改成axis=1,变成一个DF型数据
皮大大
2021/03/02
7940
小蛇学python(15)pandas之数据合并
这里,并没有指定要用哪个列进行连接,如果没有指定,就会默认将重叠列的列名当作连接键。这里连接的结果是按照笛卡儿积的逻辑实现的。在这个例子中表现不太明显,我们再看下一个例子。
用户2145057
2018/09/12
1.6K0
小蛇学python(15)pandas之数据合并
Python数据处理从零开始----第二章(pandas)(十)pandas合并数据
先介绍一下几种数据合并方式:左连接(left join)、右连接(right join)、内连接(inner join)、全连接(full join)。
用户1359560
2019/03/04
1.3K0
Python数据处理从零开始----第二章(pandas)(十)pandas合并数据
Python连接大法|“合体”
今日阳光明媚,今日万里无云,函数届的<不讲武德>比赛拉开序幕,首当其冲的就是小梦(merge)、小超(concat),也是合并功能里的俊男靓女,随着一只小虫(数据)的入场,大战一触即发~~
数据山谷
2020/12/22
8060
Pandas进阶之数据规整化
---- 概述 在Pandas基本使用简单了介绍了一下Pandas的基本使用和用法,大家如果没有一点基础的同学可以先看一下那篇文章。今天我们来讲解一下Pandas的高级用法。 Numpy基本用法 在讲解Pandas高级特性之前,我们先来学习一下Numpy。Numpy是高性能计算和数据分析的基础包,一种ndarray的多维数组对象并且是一个同构的数据多维容器。创建和操作一个多维数组,我们来看一下简单的代码片段。 arr = np.arange(10,dtype=np.float32) # np.zero,n
吕海峰
2018/04/03
1.8K0
python数据分析之pandas包
相关系数和协方差唯一值值计数及成员资格处理缺失数据层次化索引数据透视生成重排分级次序根据级别汇总统计列索引转为行索引读取文件导出文件数据库风格的DataFrame合并pandas知识体系图
用户7886150
2020/12/26
1.1K0
【数据处理包Pandas】DataFrame对象的合并
合并是指把两个甚至多个 DataFrame 对象连接起来,与合并相关的方法有四个:concat,append,merge,join。
Francek Chen
2025/01/22
1000
【数据处理包Pandas】DataFrame对象的合并
【python】详解pandas库的pd.merge函数「建议收藏」
本篇详细说明merge的应用,join 和concatenate的拼接方法的与之相似。
全栈程序员站长
2022/08/11
1.5K0
数据清洗、合并、转化和重构
1、数据清洗是数据分析关键的一步,直接影响之后的处理工作 2、数据需要修改吗?有什么需要修改的吗?数据应该怎么调整才能适用于接下来的分析和挖掘? 3、是一个迭代的过程,实际项目中可能需要不止一次地执行这些清洗操作 4、处理缺失数据:pd.fillna(),pd.dropna() 1、数据连接(pd.merge) 1、pd.merge 2、根据单个或多个键将不同DataFrame的行连接起来 3、类似数据库的连接操作 示例代码: import pandas as pd import numpy as np
用户1332428
2018/03/08
9310
数据清洗 Chapter04 | 数据整合
这篇文章讲述的是数据整合。希望这篇数据清洗的文章对您有所帮助!如果您有想学习的知识或建议,可以给作者留言~
不温卜火
2020/10/28
5060
数据清洗 Chapter04 | 数据整合
Pandas常用的数据处理方法
本文的Pandas知识点包括: 1、合并数据集 2、重塑和轴向旋转 3、数据转换 4、数据聚合 1、合并数据集 Pandas中合并数据集有多种方式,这里我们来逐一介绍 1.1 数据库风格合并 数据库风格的合并指根据索引或某一列的值是否相等进行合并的方式,在pandas中,这种合并使用merge以及join函数实现。 先来看下面的例子: df1 = pd.DataFrame({'key':['b','b','a','c','a','a','b'],'data1':range(7)}) df2 = pd.Dat
石晓文
2018/04/11
8.4K0
Pandas常用的数据处理方法
python merge、concat合
pandas和python标准库提供了一整套高级、灵活的、高效的核心函数和算法将数据规整化为你想要的形式!
py3study
2020/01/03
1.8K0
pandas多表操作,groupby,时间操作
使用场景:有两张表left和right,一般要求它们的表格结构一致,数据量也一致,使用right的数据去填补left的数据缺漏 如果在同一位置left与right数据不一致,保留left的数据
李智
2018/08/03
3.8K0
pandas多表操作,groupby,时间操作
推荐阅读
相关推荐
Pandas高级教程之:Dataframe的合并
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验