pandas数据分组使用方法(在Pandas中DataFrame数据合并,连接concat,merge,join的实例)
pandas数据分组使用方法
在Pandas中DataFrame数据合并,连接concat,merge,join的实例最近在工作中,遇到了数据合并、连接的问题,故整理如下,供需要者参考~
一、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)的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/gdkyxy2013/article/details/80785361
- laravel测试重连数据库(解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题)
- linq中join用法
- mysql left join索引怎么使用(详解mysql 使用left join添加where条件的问题分析)
- mysql join规则(浅谈为什么MySQL不推荐使用子查询和join)
- mysqljoin语句用法(MySQL的join buffer原理)
- LINQ TO SQL 中join
- left join on和where的区别
- sqlleftjoin详解(SQL JOIN 连接详细介绍及简单使用实例)
- sql语句中的join(SQL语句中不同的连接JOIN及join的用法)
- sql join速度慢(SQL Server 使用join all优化 or 查询速度)
- mysqljoin默认是什么(mysql-joins具体用法说明)
- SQL join中on与where区别
- python字符串的拼接与分割(Python字符串通过'+'和join函数拼接新字符串的性能测试比较)
- left join on 查询
- python线程池有几种(对python 多线程中的守护线程与join的用法详解)
- sql语句left+join详解(SQL语句中JOIN的用法场景分析)
- 朋友圈屏蔽你的人,可以直接看淡了(朋友圈屏蔽你的人)
- 金球奖只青睐那些会戴珠宝的女人(金球奖只青睐那些会戴珠宝的女人)
- 浙江省一个县,人口超40万,建县历史超1100年(浙江省一个县人口超40万)
- 五代十国南唐历代国君(五代十国南唐历代国君)
- 飞机引进工程师杨隆 匠人匠心,只争朝夕(飞机引进工程师杨隆)
- 三人行,她们是育人路上的 铁三角 团队(她们是育人路上的)
热门推荐
- python零基础入门加密与解密(Python玩转加密的技巧推荐)
- axios如何跨域请求(axios取消请求与避免重复请求)
- vueelementui左侧菜单(Vue Element前端应用开发之动态菜单和路由的关联处理)
- navicat配置远程访问mysql(解决Navicat无法连接 VMware中Centos系统中的 MySQL服务器的问题)
- 网页颜色的选择
- 云服务器租用还是托管好(租用云服务器我们需要知道的几点内容)
- redhat6.5安装mysql(Redhat7.3安装MySQL8.0.22的详细教程二进制安装)
- yii2对比springboot(Yii框架函数简单用法分析)
- 虚拟主机管理系统干什么用(五大免费主机管理系统优缺点对比及推荐)
- axios封装怎么实现(axios的简单封装以及使用实例代码)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9