一、pd.merge()

pd.merge()的常用参数
参数 说明
left 参与合并的左侧DataFrame
right 参与合并的右侧DataFrame
how

如何合并。值为{'left','right','outer','inner'},默认为'inner'

left: 仅保留左侧DataFrame中存在的键

right:仅保留右侧DataFrame中存在的键

outer:保留左右DataFrame键的交集

inner:保留左右DataFrame键的并集

on 用于连接的列名,默认是两个DataFrame重叠的列
left_on 左侧DataFrame中用作连接键的列
right_on 右侧DataFrame中用作连接键的列
left_index {True,False},将左侧的行索引用作其连接键
right_index {True,False},将右侧的行做引用作其连接键
suffixes 字符串值元组,用于追加到重叠列名的后缀,默认为('_x','_y')

(1)先创建两个DataFrame

>>> left = pd.DataFrame({'姓名':['张某','李某','段某'],'年龄':[22,26,24]})
>>> left
姓名 年龄
0 张某 22
1 李某 26
2 段某 24 >>> right = pd.DataFrame({'姓名':['张某','李某','钱某'],'籍贯':['北京','河北','江苏']})
>>> right
姓名 籍贯
0 张某 北京
1 李某 河北
2 钱某 江苏

(2)在默认情况下,将重叠列当做键,也可通过参数on指定;

>>> pd.merge(left,right)
姓名 年龄 籍贯
0 张某 22 北京
1 李某 26 河北 #通过参数on指定
>>> pd.merge(left,right,on='姓名')
姓名 年龄 籍贯
0 张某 22 北京
1 李某 26 河北

(3)融合指标变量indicator,设置indicator的值为True,则融合结果中将增加列名为"_merge"的一列,其值代表不同含义:

取值 说明
left_only 融合的键仅在左侧的DataFrame中存在
right_only 融合的键仅在右侧的DataFrame中存在
both 融合的键在左右两侧的DataFrame中均存在
>>> pd.merge(left,right,on='姓名',how='outer',indicator=True)
姓名 年龄 籍贯 _merge
0 张某 22.0 北京 both
1 李某 26.0 河北 both
2 段某 24.0 NaN left_only
3 钱某 NaN 江苏 right_only

  indicator也可以接受字符串,生成的指标列的列名将由”_merge“变为该字符串:

>>> pd.merge(left,right,on='姓名',how='outer',indicator='indicator_column')
姓名 年龄 籍贯 indicator_column
0 张某 22.0 北京 both
1 李某 26.0 河北 both
2 段某 24.0 NaN left_only
3 钱某 NaN 江苏 right_only

(4)索引与列进行融合

注:left的索引和right中的某一列均为“姓名”,现在需要根据姓名进行融合

>>> left = pd.DataFrame({'年龄':[22,26,24]},index=['张某','李某','段某'])
>>> left
年龄
张某 22
李某 26
段某 24
>>> left.index.name='姓名'
>>> left
年龄
姓名
张某 22
李某 26
段某 24 >>> right = pd.DataFrame({'姓名':['张某','李某','钱某'],'籍贯':['北京','河北','江苏']})
>>> right
姓名 籍贯
0 张某 北京
1 李某 河北
2 钱某 江苏 #其中,left的索引和right中的某一列均为“姓名”,现在需要根据姓名进行融合
>>> pd.merge(left,right,how='outer',left_index=True,right_on='姓名')
年龄 姓名 籍贯
0 22.0 张某 北京
1 26.0 李某 河北
2 24.0 段某 NaN
2 NaN 钱某 江苏

(5)索引与索引的融合

left和right的索引均为‘姓名’,现进行融合

>>> left = pd.DataFrame({'年龄':[22,26,24]},index=['张某','李某','段某'])
>>> left.index.name='姓名'
>>> right = pd.DataFrame({'籍贯':['北京','河北','江苏']},index=['张某','李某','钱某'])
>>> right.index.name='姓名'
>>> left
年龄
姓名
张某 22
李某 26
段某 24
>>> right
籍贯
姓名
张某 北京
李某 河北
钱某 江苏 #left和right的索引均为‘姓名’,现进行融合
>>> pd.merge(left,right,how='outer',left_index=True,right_index=True)
年龄 籍贯
姓名
张某 22.0 北京
李某 26.0 河北
段某 24.0 NaN
钱某 NaN 江苏

二、join()

join()函数相对于pd.merge()而言是一种更为简便的实现方式

(1)对于索引与列的融合,需要设置on参数,来指明左键

注意:此时on的值应该是具体的列,而不是索引,索引此时的实体(即join左边的对象应该是包含“姓名”列的DataFrame)

>>> left
年龄
姓名
张某 22
李某 26
段某 24
>>> right
姓名 籍贯
0 张某 北京
1 李某 河北
2 钱某 江苏 #注意:此时on的值应该是具体的列,而不是索引,索引此时的实体(即join左边的对象应该是包含“姓名”列的DataFrame)
>>> right.join(left,on='姓名')
姓名 籍贯 年龄
0 张某 北京 22.0
1 李某 河北 26.0
2 钱某 江苏 NaN

(2)索引与索引的融合

相当于>>>pd.merge(left,right,how='outer',left_index=True,right_on='姓名')

>>> left
年龄
姓名
张某 22
李某 26
段某 24
>>> right
籍贯
姓名
张某 北京
李某 河北
钱某 江苏 >>> left.join(right,how='outer')
年龄 籍贯
姓名
张某 22.0 北京
李某 26.0 河北
段某 24.0 NaN
钱某 NaN 江苏

三、combine_first()

  由于数据融合是有一种常见的现象,即:需要根据一个DataFrame对象中的值为另一个DataFrame中的值做缺失值处理;

于是combine_first()应运而生,该方法实现了用参数对象中的数据为调用者对象的缺失数据“打补丁”,且会自动对其索引。

>>> left = pd.DataFrame({'姓名':['张某','李某','段某'],'年龄':[22,26,24]})
>>> right = pd.DataFrame({'姓名':['张某','李某','段某'],'年龄':[22,np.nan,np.nan],'籍贯':['北京','河北','江苏']}) #根据left中的值去填补right中的值
>>> right.combine_first(left)
姓名 年龄 籍贯
0 张某 22.0 北京
1 李某 26.0 河北
2 段某 24.0 江苏

  

10-Pandas之数据融合(pd.merge()、df.join()、df.combine_first()详解)的更多相关文章

  1. 如何用R来处理数据表的长宽转换(图文详解)

    不多说,直接上干货! 很多地方都需用到这个知识点,比如Tableau里.   通常可以采取如python 和 r来作为数据处理的前期. Tableau学习系列之Tableau如何通过数据透视表方式读取 ...

  2. legend3---Windows 7/8/10 系统下Laravel框架的开发环境安装及部署详解(Vagrant + Homestead)

    legend3---Windows 7/8/10 系统下Laravel框架的开发环境安装及部署详解(Vagrant + Homestead) 一.总结 一句话总结: 1.安装的话就是下载好git,va ...

  3. df 和 du 命令详解

    df命令详细用法 a:显示全部的档案系统和各分割区的磁盘使用情形 i:显示i -nodes的使用量 k:大小用k来表示 (默认值) t:显示某一个档案系统的所有分割区磁盘使用量 x:显示不是某一个档案 ...

  4. 如何用Python来处理数据表的长宽转换(图文详解)

    不多说,直接上干货! 很多地方都需用到这个知识点,比如Tableau里.   通常可以采取如python 和 r来作为数据处理的前期. Tableau学习系列之Tableau如何通过数据透视表方式读取 ...

  5. 大数据学习笔记——Spark工作机制以及API详解

    Spark工作机制以及API详解 本篇文章将会承接上篇关于如何部署Spark分布式集群的博客,会先对RDD编程中常见的API进行一个整理,接着再结合源代码以及注释详细地解读spark的作业提交流程,调 ...

  6. linux超级块和inode 详解 和 df 、du 命令详解与环境变量

    一.inode块,Unix文件的核心. 首先需要明白的是,在Unix操作系统中的任何资源都被当作文件来管理.如目录.光驱.终端设备等等,都被当作是一种文件.从这方面来说,Unix操作系统中的所有的目录 ...

  7. 大数据学习系列之五 ----- Hive整合HBase图文详解

    引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...

  8. Windows 7/8/10 系统下Laravel框架的开发环境安装及部署详解(Vagrant + Homestead)

    注意! laravel/homestead box项目地址已经不再是原来的 https://atlas.hashicorp.com/laravel/boxes/homestead 而已经变更成 htt ...

  9. 2018.10.7 理解Hibernate的工作原理及其中的ORM详解

    复习 hibernate框架 简介j及其搭建: hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库. 1 ...

随机推荐

  1. 写给.NET开发者的Python教程(一):C# vs Python: 语言特性、Conda和Jupyter Notebook环境

    承接上篇,本文会从语言特性.开发环境和必备工具来带领大家进入Python的世界. 语言特性 首先一起看下C#和Python在语言特性层面的对比,他们作为截然不同的两类面向对象高级语言,在语言层面上有何 ...

  2. yml配置基本使用

    1.yml 基本知识 1.1 常识 基本结构 k: v 的结构 注意:冒号和v之间必须有空格,否则会出现问题: 大小写敏感 1.2 v 多种写法 看一下下面的这个例子: # rabbitmq 初始化配 ...

  3. AT2272 [ARC066B] Xor Sum 题解

    题目连接:传送门 分析 这道题只看题目中给的样例是找不出规律的 所以我们可以打一下表 1, 2, 4, 5, 8, 10, 13, 14, 18 如果你还是没有看出什么规律的话,我们可以从OEIS上搜 ...

  4. 关于npm和yarn 安装vue脚手架

    第一篇博客有点小紧张.轻喷~ 第一步:安装node.js       地址 --------https://nodejs.org/en/ 详细步骤这里就不写了    可以去看     地址 ----- ...

  5. jmeter设置HTTP代理,录制APP脚本

    1.打开jmeter,“工作台”右键——“添加”——“非测试元件”——“HTTP代理服务器” 2.设置端口号,手机需与这里的端口号一致 3.新建线程组,“测试计划”右键——“添加”——“Threads ...

  6. 基层教师 - CMD命令之net命令与IPC连接

    1)建立空连接: net use \\IP\ipc$ "" /user:"" (一定要注意:这一行命令中包含了3个空格) 2)建立非空连接: net use \ ...

  7. 用python实现栈/队列/双端队列/链表

    栈是元素的有序集合,添加操作与移除操作都发生在其顶端,先进后出栈操作:创建空栈,增删(顶端),查(顶端元素,元素个数,是否为空)应用:将十进制数转换成任意进制数 class Stack: # 用列表创 ...

  8. InnoDB表存储结构及keyring加密

    ibdata是InnoDB最重要的系统表空间文件,它记录了InnoDB的核心信息,包括事务系统信息.元数据信息,记录InnoDB change buffer的btree,防止数据损坏的double w ...

  9. Serverless的概念&定义-无服务计算详解

    过去几年间,Serverless 发展迅猛,与其相伴的还有从小程序.移动端等到前后端一体化的演进与实践,也正因如此,从云计算到前端,众多开发者都极为关注 Serverless到底是什么? 在国内,Se ...

  10. SSM框架前后端信息交互

    一.从前端向后端传送数据 常见的3种方式 1.form表单的action:此方法可以提交form表单内的输入数据,也可同时提交某些隐藏但设置有默认值的<input>,如修改问题时,我们除了 ...