使用Pandas进行数据匹配

本文转载自:蓝鲸的网站分析笔记

原文链接:使用Pandas进行数据匹配

目录


Pandas中的merge函数类似于Excel中的Vlookup,可以实现对两个数据表进行匹配和拼接的功能。与Excel不同之处在于merge函数有4种匹配拼接模式,分别为inner,left,right和outer模式。 其中inner为默认的匹配模式。本篇文章我们将介绍merge函数的使用方法和4种拼接模式的区别。

下面是我们准备进行拼接的两个数据表,左边是贷款状态表loan_stats,右边为用户等级表member_grade。我们将分别用merge函数的4种匹配模式对这两个表进行拼接。

准备工作

开始使用merge函数进行数据拼接之前先导入所需的功能库,然后将分别读取两个数据表,并命名为loanstats表和member_grade表。

1
2
3
4
import numpy as np
import pandas as pd
loanstats=pd.DataFrame(pd.read_excel('loanStats.xlsx'))
member_grade=pd.DataFrame(pd.read_excel('member_grade.xlsx'))

函数功能介绍

merge函数的使用方法很简单,以下是官方的函数功能介绍和使用说明。merge函数中第一个出现的数据表是拼接后的left部分,第二个出现的数据表是拼接后的right部分。第三个是数据匹配模 式,默认是inner模式。第四个参数on表示数据匹配所依据的字段名称,如果这个字段名称同时出现在两个数据表中,那么可以省略on参数的设置,merge默认会按照两个数据表中共有的字段名称进行匹配和拼接。如果两个数据表中的匹配字段名称不一致,则需要分别在left_on和right_on参数中指明两个表匹配字段的名称。如果两个数据表中没有匹配字段,需要使用索引列进行匹配和拼接,可以对left_index和right_index参数设置为True。merge还有一些排序和其他的参数,可在需要使用时进行设置。

Inner模式匹配

inner模式是merge的默认匹配模式,我们通过下面的文氏图来说明inner的匹配方法。Inner模式提供在loanstats和member_grade表中共有字段的匹配结果。也就是对两个的表交集部分进行匹配和拼接。单独只出现在一个表中的字段值不会参与匹配和拼接。

以下是使用merge函数进行拼接的代码,因为inner是默认的拼接模式,因此也可以省略how=’inner’部分。其中第一个出现的loanstats出现在拼接后的左侧,member_grade出现在拼接后的右侧。拼接后的数据表中只包含两个表的交集,因此不存在未匹配到的NaN情况。

1
loan_inner=pd.merge(loanstats,member_grade,how='inner')


left模式匹配

left模式是左匹配,以左边的数据表loanstats为基础匹配右边的数据表member_grade中的内容。匹配不到的内容以NaN值显示。在Excel中就好像将Vlookup公式写在了左边的表中。下面的文氏图说明了left模式的匹配方法。Left模式匹配的结果显示了所有左边数据表的内容,以及和右边数据表共有的内容。

以下为使用left模式匹配并拼接后的结果,loanstats在merge函数中第一个出现,因此为左表,member_grade第二个出现,为右表。匹配模式为left模式。从结果中可以看出left匹配模式保留了一张完整的loanstats表,以此为基础对member_grade表中的内容进行匹配。loanstats表中有两个member_id值在member_grade中无法找到,因此grades字段显示为NaN值。

1
loan_left=pd.merge(loanstats,member_grade,how='left')


right模式匹配

第三种模式是right匹配,right与left模式正好相反,right模式是右匹配,以右边的数据表member_grade为基础匹配左边的数据表loanstats。匹配不到的内容以NaN值显示。下面通过文氏图说明right模式的匹配方法。Right模式匹配的结果显示了所有右边数据表的内容,以及和左边数据表共有的内容。

以下为使用right模式匹配拼接的结果,从结果表中可以看出right匹配模式保留了完整的member_grade表,以此为基础对loanstats表进行匹配,在member_grade数据表中有两个条目在loanstats数据表中无法找到,因此显示为了NaN值。

1
loan_right=pd.merge(loanstats,member_grade,how='right')

outer模式匹配

最后一种模式是outer匹配,outer模式是两个表的汇总,将loanstats和member_grade两个要匹配的两个表汇总在一起,生成一张汇总的唯一值数据表以及匹配结果。


下面是使用outer模式匹配拼接的结果,其中member_id列包含了loanstats和member_grade中的唯一值,grade列显示了对member_grade表匹配的结果,其他列则显示了对loanstats表匹配的结果 ,无法匹配的内容以NaN值显示。

1
loan_outer=pd.merge(loanstats,member_grade,how='outer')


NaN值匹配问题

在进行数据匹配和拼接的过程中经常会遇到NaN值。这种情况下merge函数会如何处理呢?merge会将两个数据表中的NaN值进行交叉匹配拼接,换句话说就是将loanstats表member_id列中的NaN值
分别与member_grade表中member_id列中的每一个NaN值进行匹配,然后再拼接在一张表中。下面是包含NaN值的两张数据表进行拼接的结果,当我们使用left模式进行匹配时,loanstats作为基础
表,其中member_id列的NaN值分别与member_grade表中member_id列的每一个NaN值进行匹配。并将匹配结果显示在了结果表中。

1
loan_left=pd.merge(loanstats,member_grade,how='left')

【转载】使用Pandas进行数据匹配的更多相关文章

  1. 转载:使用Pandas进行数据匹配

    使用Pandas进行数据匹配 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas进行数据匹配 目录 merge()介绍 inner模式匹配 lefg模式匹配 right模式匹配 outer模式 ...

  2. 【转载】使用Pandas对数据进行筛选和排序

    使用Pandas对数据进行筛选和排序 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas对数据进行筛选和排序 目录: sort() 对单列数据进行排序 对多列数据进行排序 获取金额最小前10项 ...

  3. 【转载】使用Pandas进行数据提取

    使用Pandas进行数据提取 本文转载自:蓝鲸的网站分析笔记 原文链接:使用python进行数据提取 目录 set_index() ix 按行提取信息 按列提取信息 按行与列提取信息 提取特定日期的信 ...

  4. 【转载】使用Pandas创建数据透视表

    使用Pandas创建数据透视表 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas创建数据透视表 目录 pandas.pivot_table() 创建简单的数据透视表 增加一个行维度(inde ...

  5. 基于pandas进行数据预处理

    很久没用pandas,有些有点忘了,转载一个比较完整的利用pandas进行数据预处理的博文:https://blog.csdn.net/u014400239/article/details/70846 ...

  6. 其它课程中的python---5、Pandas处理数据和读取数据

    其它课程中的python---5.Pandas处理数据和读取数据 一.总结 一句话总结: 记常用和特例:慢慢慢慢的就熟了,不用太着急,慢慢来 库的使用都很简单:就是库的常用函数就这几个,后面用的时候学 ...

  7. Pandas查询数据的几种方法

    Pandas查询数据 Pandas查询数据的几种方法 df.loc方法,根据行.列的标签值查询 df.iloc方法,根据行.列的数字位置查询 df.where方法 df.query方法 .loc既能查 ...

  8. 利用Python进行数据分析(12) pandas基础: 数据合并

    pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...

  9. Pandas 把数据写入csv

    Pandas 把数据写入csv from sklearn import datasets import pandas as pd iris = datasets.load_iris() iris_X ...

随机推荐

  1. win7+ubuntu双系统 重装win7后grub修复

    问题:之前安装的是win7+ubuntu双系统,重装win7后启动选项没有了,直接进入的是win7系统,无法进入ubuntu系统了. 解决办法:我们需要修复grub,将ubuntu系统重新挂载一下,具 ...

  2. 自己第一个github开源的感受

    自己在github上发布了开源<基于IOS的手机视频直播SDK>后,不到一个月,被人star了508次,fork了120次,这个成绩大大出乎了我自己的意料! github网址:https: ...

  3. faster_rcnn c++版本的 caffe 封装,动态库(2)

    摘要: 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ github上的代码链接,求给星星:) https:// ...

  4. BZOJ 3112: [Zjoi2013]防守战线 [单纯形法]

    题目描述 战线可以看作一个长度为n 的序列,现在需要在这个序列上建塔来防守敌兵,在序列第i 号位置上建一座塔有Ci 的花费,且一个位置可以建任意多的塔,费用累加计算.有m 个区间[L1, R1], [ ...

  5. Linux网卡配置及学习linux的注意事项

    一.网卡配置 1.ifconfig网卡信息,配置IP ifconfig eth0 192.168.2.102 2.修改网卡配置(连接不了可能是IP给占用了) 进入编辑界面命令:vi /etc/sysc ...

  6. MBR与GPT

    mrb用于win平台gpt主要用于mac(苹果),MBR分区表与GPT分区表的关系 与支持最大卷为2 TB(Terabytes)并且每个磁盘最多有4个主分区(或3个主分区,1个扩展分区和无限制的逻辑驱 ...

  7. 为WebService指定线程池

    通过阅读WebService发布过程的源代码,可以配置自定义的线程池 package org.zln.ws.server;import com.sun.xml.internal.ws.api.Bind ...

  8. Matlab中使用脚本和xml文件自动生成bus模块

    帮一个老师写的小工具 在一个大工程中需要很多bus来组织信号,而为了规范接口,需要定义很多BusObject,用Matlab语言手写这些BusObject比较费工夫 所以用xml配置文件来写,也便于更 ...

  9. matlab常用的字符串操作函数之一

    1,strcat和strvcat strcat:依次横向连接字符串: strvcat:依次纵向连接字符串: 实例1: >>a1='sophia '; >>a2='is a '; ...

  10. IE10开始支持CSS3 Transitions, Transforms 和 Animations

    这是一个好消息,微软公开说明IE10预览版已经支持CSS3属性 Transitions, Transforms 和 Animations,你可以直接写transitions,而不是加个恶心的前缀-ms ...