Pandas中DataFrame数据合并、连接(concat、merge、join)

2023-11-16

最近在工作中,遇到了数据合并、连接的问题,故整理如下,供需要者参考~

 

一、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方法中的参数意义基本一样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas中DataFrame数据合并、连接(concat、merge、join) 的相关文章

随机推荐

  • CSS文字自动换行

    word break属性 normal 只在允许的断字点换行 浏览器保持默认处理 break word 在长单词或 URL 地址内部进行换行 white space属性 normal 默认 空白会被浏览器忽略 pre 空白会被浏览器保留 其
  • Java编程那些事儿88——文件操作之写文件

    Java编程那些事儿88 文件操作之写文件 陈跃峰 出自 http blog csdn net mailbomb 11 3 1 4 写文件 如前所述 将程序内部的数据输出到程序外部的数据源 应该使用IO类体系中的输出流 在实际的编程中 将程
  • MATLAB设计滤波器之新版filterDesigner使用

    一 引言 本篇内容主要介绍新版Matlab的滤波器设计filterDesigner工具的使用 并以设计两个带通滤波器为使用的例子 使用的MATLAB软件版本为MATLAB R2022a 二 filterDesigner设计滤波器 1 在命令
  • C++责任链模式:Chain of Responsibility Pattern

    当你想要让一个以上的对象有机会能够处理某个请求的时候 就可以使用责任链模式 责任链模式 将请求的发送和接收解耦 让多个接收对象都有机会处理这个请求 将这些接收对象串成一条链 并沿着这条链传递这个请求 直到链上的某个接收对象能够处理它为止 通
  • Ubuntu18.04装Miniconda后终端出现base环境

    在 Ubuntu18 04LTS DELL 台式机中安装 Pytorch 由于没有 GPU 只能下载仅使用 CPU 版的 Pytorch 去 Pytorch 官网按照文档 Start Locally PyTorch 一步步下载相应的环境 P
  • tomcat8下启动 jsp报错

    The method getDispatcherType is undefined for the type HttpServletRequest java lang ClassNotFoundException org apache js
  • PLSQL中的FOR循环

    游标的FOR循环 循环体是查询的表 游标的for循环 PL SQL 语言提供了 游标 FOR 循环语句 自动执行游标的 OPEN FETCH CLOSE 语句和 循环 语句的功能 当进入循环时 游标 FOR 循环语句 自动 打开游标 并提取
  • LCD调试流程

    本来想学的更深入一些再来写这些总结 但想想 边学边写 记录成长过程也挺好的 下面自底向上 了解LCD的整个工作流程 一 LCD的组成结构和各结构的功能 1 背光板模组 提供光的来源 2 上下偏光板 TFT Glass Substrate 液
  • 【C/C++学习笔记】c++ 回调函数

    1 介绍 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针 地址 作为参数传递给另一个函数 当这个指针被用来调用其所指向的函数时 我们就说这是回调函数 回调函数不是由该函数的实现方直接调用 而是在特定的事件或条件发生时由另外的一方
  • Maven自动化构建工具详解

    一 Maven概述 1 使用Maven原因 我们先通过企业开发中的实际需求来看一看哪些方面是我们现有技术的不足 1 第三方Jar包添加 在今天的JavaEE开发领域 有大量的第三方框架和工具可以供我们使用 要使用这些jar包最简单的方法就是
  • win7+ubuntu20.04双系统安装,以及pointnet2_pytorch编译记录

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 win7 ubuntu20 04双系统安装 二 Ubuntu安装相关 1 Anaconda 2 Nvidia Driver 3 编译pointnet2 p
  • SSM框架-SpringMVC详解

    springmvc概述 Springmvc是spring框架的一个模块 spring和springmvc无需中间整合层整合 Springmvc是一个基于mvc的web框架 表现层的三大任务 URL到controller的映射 http请求参
  • 【MySQL】20个经典面试题,全部答对月薪10k+

    欢迎加入QQ群讨论更多内容 群号 835870546 原文链接 http bbs 51cto com thread 1470880 1 html Part2 经典题目 1 MySQL的复制原理以及流程 基本原理流程 3个线程以及之间的关联
  • IntelliJ Idea 常用快捷键列表

    IntelliJ Idea 常用快捷键列表 Alt 回车 导入包 自动修正 Ctrl N 查找类 Ctrl Shift N 查找文件 Ctrl Alt L 格式化代码 Ctrl Alt O 优化导入的类和包 Alt Insert 生成代码
  • c++/c混合编程

    一 前言 代码从编写到能执行之前 需要经过编译 链接阶段 通常 编译每一个单元文件会生成目标文件 然后链接器会把各个目标文件链接起来生成可执行性文件 链接器之所以能把目标文件相互之间链接起来 就是通过查找目标文件中的唯一函数符号 即经过编译
  • 飞行管理计算机哪个公司,波音737-700的FMC(飞行管理计算机的讲解) VLN081

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 DEP ARR 进离场页面 第一行是你的起始机场 左1 右1 XXXX ARR gt 右2 HOLD 等待点设置叶面 等待点必须在航路上设置的一个点 并已经如入到LEGS 左1 XX 点的名称
  • 初识设计模式:单例模式

    设计模式 是一种思想 解决一个问题的方法有很多种 编程实现一个解决方法也有很多种 设计模式是一种针对不同问题 设计适合该问题的代码 在保证解决问题的基础上 还要保证能有好的扩展性 再有新需求的时候可以便捷的添加新模块 而非大动干戈的改变整个
  • cocos2d Sprite混合达到水流动效果

    使用Sprite混合setBlendFunc方式达到流动效果 void MainHomeLayer updateWaterFall float dt static float offset 0 if NULL waterFall water
  • Qt获取CPU编号和硬盘序列号

    windows下执行命令除了用cmd之外 还有个东西叫WMIC 非常强大 可以通过他获取很多信息 包括硬件信息 QString frmMain getWMIC const QString cmd 获取cpu名称 wmic cpu get N
  • Pandas中DataFrame数据合并、连接(concat、merge、join)

    最近在工作中 遇到了数据合并 连接的问题 故整理如下 供需要者参考 一 concat 沿着一条轴 将多个对象堆叠到一起 concat方法相当于数据库中的全连接 union all 它不仅可以指定连接的方式 outer join或inner