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
- mysqljoin默认是什么(mysql-joins具体用法说明)
- LINQ TO SQL 中join
- left join on和where的区别
- mysql left join索引怎么使用(详解mysql 使用left join添加where条件的问题分析)
- sql语句left+join详解(SQL语句中JOIN的用法场景分析)
- pandas数据分组使用方法(在Pandas中DataFrame数据合并,连接concat,merge,join的实例)
- python字符串的拼接与分割(Python字符串通过'+'和join函数拼接新字符串的性能测试比较)
- left join on 查询
- mysql join规则(浅谈为什么MySQL不推荐使用子查询和join)
- python线程池有几种(对python 多线程中的守护线程与join的用法详解)
- sql join速度慢(SQL Server 使用join all优化 or 查询速度)
- sql语句中的join(SQL语句中不同的连接JOIN及join的用法)
- mysqljoin语句用法(MySQL的join buffer原理)
- js中push和join
- sql语句中leftjoin的作用(sql中的left join及on、where条件关键字的区别详解)
- laravel测试重连数据库(解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题)
- 浙江省一个县,人口超40万,建县历史超1100年(浙江省一个县人口超40万)
- 五代十国南唐历代国君(五代十国南唐历代国君)
- 飞机引进工程师杨隆 匠人匠心,只争朝夕(飞机引进工程师杨隆)
- 三人行,她们是育人路上的 铁三角 团队(她们是育人路上的)
- 阴阳师 孟婆山兔CP不倒 新皮肤草稿 孟婆兔 让痒痒鼠点赞(阴阳师孟婆山兔CP不倒)
- 阴阳师孟婆御魂推荐 孟婆御魂搭配毕业套(阴阳师孟婆御魂推荐)
热门推荐
- html5列表与布局(HTML5逐步分析实现拖放功能的方法)
- python用于机器人(python实现nao机器人身体躯干和腿部动作操作)
- css中:first-child
- vue自定义列组件(vue自定义表格列的实现过程记录)
- js搜索功能的实现(前端JavaScript实现本地模糊搜索功能的方法实例)
- dede模板栏目调用(织梦DEDECMS5.7栏目列表页分页URL优化列表页重复的解决方案)
- laravel开发api实例(Laravel框架集成UEditor编辑器的方法图文与实例详解)
- isPrototypeOf和hasOwnProperty的区别
- css时钟(网页中时光轴CSS实现)
- php列表怎么用(PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9