gpt4 book ai didi

在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

1、concat:沿着一条轴,将多个对象堆叠到一起 。

concat方法相当于数据库中的全连接(union all),它不仅可以指定连接的方式(outer join或inner join)还可以指定按照某个轴进行连接。与数据库不同的是,它不会去重,但是可以使用drop_duplicates方法达到去重的效果.

?
1
2
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:重建索引 。

举例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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

2、merge:通过键拼接列 。

类似于关系型数据库的连接方式,可以根据一个或多个键将不同的DatFrame连接起来。该函数的典型应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面.

?
1
2
3
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 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

3、join:主要用于索引上的合并 。

?
1
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 。

最后此篇关于在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例的文章就讲到这里了,如果你想了解更多关于在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com