在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例


Posted in Python onJanuary 29, 2019

最近在工作中,遇到了数据合并、连接的问题,故整理如下,供需要者参考~

一、concat:沿着一条轴,将多个对象堆叠到一起

concat方法相当于数据库中的全连接(union all),它不仅可以指定连接的方式(outer join或inner join)还可以指定按照某个轴进行连接。与数据库不同的是,它不会去重,但是可以使用drop_duplicates方法达到去重的效果。

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()只是单纯的把两个表拼接在一起,参数axis是关键,它用于指定是行还是列,axis默认是0。

当axis=0时,pd.concat([obj1, obj2])的效果与obj1.append(obj2)是相同的;当axis=1时,pd.concat([obj1, obj2], axis=1)的效果与pd.merge(obj1, obj2, left_index=True, right_index=True, how='outer')是相同的。

merge方法的介绍请参看下文。

参数介绍:

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

axis:连接轴向;

join:参数为‘outer'或‘inner';

join_axes=[]:指定自定义的索引;

keys=[]:创建层次化索引;

ignore_index=True:重建索引

举例:

df1=DataFrame(np.random.randn(3,4),columns=['a','b','c','d']) 
 
df2=DataFrame(np.random.randn(2,3),columns=['b','d','a']) 
 
pd.concat([df1,df2]) 
 
     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 
 
pd.concat([df1,df2],ignore_index=True) 
 
     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

二、merge:通过键拼接列

类似于关系型数据库的连接方式,可以根据一个或多个键将不同的DatFrame连接起来。该函数的典型应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面。

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)

参数介绍:

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:显示合并数据中数据的来源情况

举例:

# 1.默认以重叠的列名当做连接键。
df1=DataFrame({'key':['a','b','b'],'data1':range(3)})  
df2=DataFrame({'key':['a','b','c'],'data2':range(3)})  
pd.merge(df1,df2)  #没有指定连接键,默认用重叠列名,没有指定连接方式 
 
  data1 key data2 
0   0  a   0 
1   1  b   1 
2   2  b   1 
 
# 2.默认做inner连接(取key的交集),连接方式还有(left,right,outer),制定连接方式加参数:how=''
pd.merge(df2,df1) 
 
  data2 key data1 
0   0  a   0 
1   1  b   1 
2   1  b   2          #默认内连接,可以看见c没有连接上。 
 
pd.merge(df2,df1,how='left')  #通过how,指定连接方式 
 
  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']
right=DataFrame({'key1':['foo','foo','bar','bar'], 
     'key2':['one','one','one','two'], 
     'lval':[4,5,6,7]}) 
left=DataFrame({'key1':['foo','foo','bar'], 
     'key2':['one','two','one'], 
     'lval':[1,2,3]}) 
right=DataFrame({'key1':['foo','foo','bar','bar'], 
     'key2':['one','one','one','two'], 
     'lval':[4,5,6,7]}) 
pd.merge(left,right,on=['key1','key2'],how='outer') #传出数组 
  
 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.如果两个对象的列名不同,可以分别指定,例:pd.merge(df1,df2,left_on='lkey',right_on='rkey')
df3=DataFrame({'key3':['foo','foo','bar','bar'], #将上面的right的key 改了名字 
     'key4':['one','one','one','two'], 
     'lval':[4,5,6,7]}) 
pd.merge(left,df3,left_on='key1',right_on='key3') #键名不同的连接 
  
 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

三、join:主要用于索引上的合并

join(self, other, on=None, how='left', lsuffix='', rsuffix='',sort=False):

其参数的意义与merge方法中的参数意义基本一样。

以上这篇在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python 3中实现类型检查器的简单方法
Jul 03 Python
Python2.x版本中基本的中文编码问题解决
Oct 12 Python
利用Python生成文件md5校验值函数的方法
Jan 10 Python
Python不同目录间进行模块调用的实现方法
Jan 29 Python
python异步存储数据详解
Mar 19 Python
Python利用WMI实现ping命令的例子
Aug 14 Python
Python传递参数的多种方式(小结)
Sep 18 Python
Python 3.8正式发布,来尝鲜这些新特性吧
Oct 15 Python
python-web根据元素属性进行定位的方法
Dec 13 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
Mar 10 Python
django创建超级用户时指定添加其它字段方式
May 14 Python
用opencv给图片换背景色的示例代码
Jul 08 Python
对python numpy.array插入一行或一列的方法详解
Jan 29 #Python
对python中list的拷贝与numpy的array的拷贝详解
Jan 29 #Python
10 分钟快速入门 Python3的教程
Jan 29 #Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
Jan 29 #Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 #Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
Jan 29 #Python
通过python爬虫赚钱的方法
Jan 29 #Python
You might like
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
yii2.0实现pathinfo的形式访问的配置方法
2016/04/06 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
Javascript中 关于prototype属性实现继承的原理图
2013/04/16 Javascript
使用Math.floor与Math.random取随机整数的方法详解
2013/05/07 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
JS+HTML5 canvas绘制验证码示例
2018/12/05 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
python中sets模块的用法实例
2014/09/30 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
2020/04/07 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
Python命名空间namespace及作用域原理解析
2020/06/05 Python
python math模块的基本使用教程
2021/01/16 Python
Python如何telnet到网络设备
2021/02/18 Python
大学生咖啡店创业计划书
2014/01/21 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
车间安全生产标语
2014/06/06 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
纪检干部学习心得体会
2016/01/23 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
python周期任务调度工具Schedule使用详解
2021/11/23 Python