在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 mysqldb连接数据库
Mar 16 Python
python 字典(dict)遍历的四种方法性能测试报告
Jun 25 Python
Python切换pip安装源的方法详解
Nov 18 Python
python自动裁剪图像代码分享
Nov 25 Python
python 异或加密字符串的实例
Oct 14 Python
Python学习笔记之视频人脸检测识别实例教程
Mar 06 Python
用pyqt5 给按钮设置图标和css样式的方法
Jun 24 Python
基于Python计算圆周率pi代码实例
Mar 25 Python
Jupyter notebook运行Spark+Scala教程
Apr 10 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
Oct 28 Python
使用Django的JsonResponse返回数据的实现
Jan 15 Python
Python数据分析之pandas读取数据
Jun 02 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与php MySQL 之间的关系
2009/07/17 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
JS动态改变浏览器标题的方法
2016/04/06 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
Angular ng-repeat指令实例以及扩展部分
2016/12/26 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
2017/01/12 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
Angular异步变同步处理方法
2018/08/13 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
layui中的switch开关实现方法
2019/09/03 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
Python中for循环详解
2014/01/17 Python
详解在Python程序中使用Cookie的教程
2015/04/30 Python
浅谈flask源码之请求过程
2018/07/26 Python
详解Python3中的 input() 函数
2020/03/18 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
Pyqt助手安装PyQt5帮助文档过程图解
2020/11/20 Python
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
维护民族团结演讲稿
2014/08/27 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
道士塔读书笔记
2015/06/30 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
Python3接口性能测试实例代码
2021/06/20 Python