详解PANDAS 数据合并与重塑(join/merge篇)


Posted in Python onJuly 09, 2019

在上一篇文章中,我整理了pandas在数据合并和重塑中常用到的concat方法的使用说明。在这里,将接着介绍pandas中也常常用到的join 和merge方法

merge

pandas的merge方法提供了一种类似于SQL的内存链接操作,官网文档提到它的性能会比其他开源语言的数据操作(例如R)要高效。

和SQL语句的对比可以看这里

merge的参数

on:列名,join用来对齐的那一列的名字,用到这个参数的时候一定要保证左表和右表用来对齐的那一列都有相同的列名。

left_on:左表对齐的列,可以是列名,也可以是和dataframe同样长度的arrays。

right_on:右表对齐的列,可以是列名,也可以是和dataframe同样长度的arrays。

left_index/ right_index: 如果是True的haunted以index作为对齐的key

how:数据融合的方法。

sort:根据dataframe合并的keys按字典顺序排序,默认是,如果置false可以提高表现。

merge的默认合并方法:
merge用于表内部基于 index-on-index 和 index-on-column(s) 的合并,但默认是基于index来合并。

1.1 复合key的合并方法

使用merge的时候可以选择多个key作为复合可以来对齐合并。

1.1.1 通过on指定数据合并对齐的列

In [41]: left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
  ....:           'key2': ['K0', 'K1', 'K0', 'K1'],
  ....:           'A': ['A0', 'A1', 'A2', 'A3'],
  ....:           'B': ['B0', 'B1', 'B2', 'B3']})
  ....: 

In [42]: right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
  ....:            'key2': ['K0', 'K0', 'K0', 'K0'],
  ....:            'C': ['C0', 'C1', 'C2', 'C3'],
  ....:            'D': ['D0', 'D1', 'D2', 'D3']})
  ....: 

In [43]: result = pd.merge(left, right, on=['key1', 'key2'])

详解PANDAS 数据合并与重塑(join/merge篇) 

没有指定how的话默认使用inner方法。

how的方法有:

left

只保留左表的所有数据

In [44]: result = pd.merge(left, right, how='left', on=['key1', 'key2'])

详解PANDAS 数据合并与重塑(join/merge篇)

right

只保留右表的所有数据

In [45]: result = pd.merge(left, right, how='right', on=['key1', 'key2'])

详解PANDAS 数据合并与重塑(join/merge篇)

outer

保留两个表的所有信息

In [46]: result = pd.merge(left, right, how='outer', on=['key1', 'key2'])

详解PANDAS 数据合并与重塑(join/merge篇)

inner

只保留两个表中公共部分的信息

In [47]: result = pd.merge(left, right, how='inner', on=['key1', 'key2'])

详解PANDAS 数据合并与重塑(join/merge篇)

1.2 indicator

v0.17.0 版本的pandas开始还支持一个indicator的参数,如果置True的时候,输出结果会增加一列 ' _merge'。_merge列可以取三个值

  • left_only 只在左表中
  • right_only 只在右表中
  • both 两个表中都有

1.3 join方法

dataframe内置的join方法是一种快速合并的方法。它默认以index作为对齐的列。

1.3.1 how 参数

join中的how参数和merge中的how参数一样,用来指定表合并保留数据的规则。

具体可见前面的 how 说明。

1.3.2 on 参数

在实际应用中如果右表的索引值正是左表的某一列的值,这时可以通过将 右表的索引 和 左表的列 对齐合并这样灵活的方式进行合并。

ex 1

In [59]: left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
  ....:           'B': ['B0', 'B1', 'B2', 'B3'],
  ....:           'key': ['K0', 'K1', 'K0', 'K1']})
  ....: 

In [60]: right = pd.DataFrame({'C': ['C0', 'C1'],
  ....:            'D': ['D0', 'D1']},
  ....:            index=['K0', 'K1'])
  ....: 

In [61]: result = left.join(right, on='key')

详解PANDAS 数据合并与重塑(join/merge篇)

1.3.3 suffix后缀参数

如果和表合并的过程中遇到有一列两个表都同名,但是值不同,合并的时候又都想保留下来,就可以用suffixes给每个表的重复列名增加后缀。

In [79]: result = pd.merge(left, right, on='k', suffixes=['_l', '_r'])

详解PANDAS 数据合并与重塑(join/merge篇)

* 另外还有lsuffix 和 rsuffix分别指定左表的后缀和右表的后缀。

1.4 组合多个dataframe

一次组合多个dataframe的时候可以传入元素为dataframe的列表或者tuple。一次join多个,一次解决多次烦恼~

In [83]: right2 = pd.DataFrame({'v': [7, 8, 9]}, index=['K1', 'K1', 'K2'])

In [84]: result = left.join([right, right2])

详解PANDAS 数据合并与重塑(join/merge篇)

1.5 更新表的nan值

1.5.1 combine_first

如果一个表的nan值,在另一个表相同位置(相同索引和相同列)可以找到,则可以通过combine_first来更新数据

1.5.2 update

如果要用一张表中的数据来更新另一张表的数据则可以用update来实现

1.5.3 combine_first 和 update 的区别

使用combine_first会只更新左表的nan值。而update则会更新左表的所有能在右表中找到的值(两表位置相对应)。

示例代码参考来源——官网

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现批量改文件名称的方法
May 25 Python
Python保存MongoDB上的文件到本地的方法
Mar 16 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
python+opencv实现车牌定位功能(实例代码)
Dec 24 Python
Python 利用OpenCV给照片换底色的示例代码
Aug 03 Python
编写python代码实现简单抽奖器
Oct 20 Python
Python并发爬虫常用实现方法解析
Nov 19 Python
python help函数实例用法
Dec 06 Python
matplotlib更改窗口图标的方法示例
Feb 03 Python
深度学习小工程练习之垃圾分类详解
Apr 14 Python
python 返回一个列表中第二大的数方法
Jul 09 #Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 #Python
Python3中的最大整数和最大浮点数实例
Jul 09 #Python
详解pandas数据合并与重塑(pd.concat篇)
Jul 09 #Python
python自定义函数实现最大值的输出方法
Jul 09 #Python
mac系统下Redis安装和使用步骤详解
Jul 09 #Python
使用python将多个excel文件合并到同一个文件的方法
Jul 09 #Python
You might like
php实现阳历阴历互转的方法
2015/10/28 PHP
Yii核心验证器api详解
2016/11/23 PHP
js监听键盘事件示例代码
2013/07/26 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
2014/02/17 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
Vue实现Layui的集成方法步骤
2020/04/10 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
Python 26进制计算实现方法
2015/05/28 Python
浅析python协程相关概念
2018/01/20 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
应聘医学检验人员自荐信
2013/09/27 职场文书
转让协议书范本
2014/04/15 职场文书
贸易跟单员英文求职信
2014/04/19 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
详解python网络进程
2021/06/15 Python