在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.5下xadmin的使用及修复源码bug
May 10 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
Sep 08 Python
python如何读写json数据
Mar 21 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
对python中执行DOS命令的3种方法总结
May 12 Python
详解Python装饰器
Mar 25 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
关于python3中setup.py小概念解析
Aug 22 Python
pytorch 图像预处理之减去均值,除以方差的实例
Jan 02 Python
Python类如何定义私有变量
Feb 03 Python
Python错误的处理方法
Jun 23 Python
python 实现体质指数BMI计算
May 26 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代码审核的详细介绍
2013/06/13 PHP
php实现最简单的MVC框架实例教程
2014/09/08 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
PHP读取Excel类文件
2017/05/15 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
Yii redis集合的基本使用教程
2020/06/14 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
JS 添加千分位与去掉千分位的示例
2013/07/11 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
吐槽一下我所了解的Node.js
2014/10/08 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
浅析Python中的join()方法的使用
2015/05/19 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
技术学校毕业生求职信分享
2013/12/02 职场文书
单位办理社保介绍信
2014/01/10 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
说明书格式及范文
2014/05/07 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
2014年财务部工作总结
2014/11/11 职场文书
律师函格式范本
2015/05/27 职场文书