pandas数据的合并concat()和merge()

import pandas as pd
  • 轴向连接(concatenation): pd.concat() 可以沿一个轴将多个DataFrame对象连接在一起, 形成一个新的Dataframe对象
  • 融合(merging): pd.merge()方法可以根据一个或多个键将不同DataFrame中的行连接起来。

concat() 轴向连接

  • concat() 函数可以将数据根据不同的轴作进行合并
  • pd.concat(objs, axis=0, join='outer')
  • objs: series、dataframe或者是panel构成的序列list
  • axis: 需要合并链接的轴,0是行,1是列,默认是0
  • join:连接的方式 inner,或者outer,默认是outer

准备数据

dict1={
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3'],
    'C': ['C0', 'C1', 'C2', 'C3']}
df1=pd.DataFrame(dict1)
print(df1)

dict2={
    'B': ['B0', 'B1', 'B2', 'B3'],
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']}
df2=pd.DataFrame(dict2)
print(df2)

合并

join的值 inner ,得到的是两表的 交集,如果是 outer,得到的是两表的 并集

(1) join='outer',axis=0

  • 当join=’outer’,axis参数为0时,列进行并集处理,纵向表拼接,缺失值由NaN填充,并且会保留原有数据的行索引
pd.concat([df1, df2], axis=0, join='outer', sort=True)

pandas数据的合并concat()和merge()

ABCD0A0B0C0NaN1A1B1C1NaN2A2B2C2NaN3A3B3C3NaN0NaNB0C0D01NaNB1C1D12NaNB2C2D23NaNB3C3D3

  • 如果两个表的index都没有实际含义, 使用 ignore_index参数置为 true, 重新生成一个新的index
pd.concat([df1,df2],axis=0,join='outer',ignore_index=True, sort=True)

ABCD0A0B0C0NaN1A1B1C1NaN2A2B2C2NaN3A3B3C3NaN4NaNB0C0D05NaNB1C1D16NaNB2C2D27NaNB3C3D3

(2) join='outer',axis=1

  • 当join=’outer’,axis参数为1时,行进行并集处理,横向表拼接,缺失值由NaN填充
    pandas数据的合并concat()和merge()
pd.concat([df1,df2],axis=1,join='outer', sort=True)

ABCBCD0A0B0C0B0C0D01A1B1C1B1C1D12A2B2C2B2C2D23A3B3C3B3C3D3

(3) join=inner, axis=0

pd.concat([df1,df2],axis=0,join='inner',ignore_index=True)

pandas数据的合并concat()和merge()

BC0B0C01B1C12B2C23B3C34B0C05B1C16B2C27B3C3

merge() 融合

merge(left, right, how='inner', on=None)
  • 参数介绍
  • left和right, 两个要合并的DataFrame(对应的左连接和右连接)
  • how: 连接的方式, 有inner(内连接)、left(左连接)、right(右连接)、outer(外连接), 默认为 inner
  • on: 指的是用于连接的列索引名称, 必须存在于左右两个DataFrame中, 如果没有指定且其他参数也没有指定,则两个DataFrame列名交集作为连接键
import pandas as pd
left = pd.DataFrame({'key':['a','b','b','d'],'data1':range(4)})
print(left)

right = pd.DataFrame({'key':['a','b','c'],'data2':range(3)})
print(right)
  key  data1
0   a      0
1   b      1
2   b      2
3   d      3
  key  data2
0   a      0
1   b      1
2   c      2

inner(内连接)

  • *merge()默认做inner连接,并且使用两个DataFrame的列名交集(key)作为连接键,同样,最终连接的数据也是两个DataFramekey列数据的交集

pandas数据的合并concat()和merge()
pd.merge(left,right)

keydata1data20a001b112b21

outer (外连接)

  • 当merge()做outer连接时最终连接的数据是两个DataFramekey列数据的并集,缺失的内容由NaN填充
pd.merge(left,right,on=['key'],how='outer')

pandas数据的合并concat()和merge()

keydata1data20a0.00.01b1.01.02b2.01.03d3.0NaN4cNaN2.0

left(左连接)

  • 当merge()做left连接时,最终连接的数据将以left数据的链接建为准合并两个数据的列数据,缺失的内容由NaN填充

pandas数据的合并concat()和merge()
pd.merge(left,right,on=['key'],how='left')

keydata1data20a00.01b11.02b21.03d3NaN

right (右连接)

  • 当merge()做right连接时,最终连接的数据将以right数据的链接建为准合并两个数据的列数据,缺失的内容由NaN填充
pd.merge(left,right,on=['key'],how='right')

keydata1data20a0.001b1.012b2.013cNaN2

应用场景

例如: 现在有两张表格分别存储了9月和10月份的成交信息,那么这个时候我们就可以使用concat( )将两个表沿着0轴合并

例如: 现在有两张表格,一个是成交信息,包含订单号、金额、客户ID等信息;第二个是客户信息,包含客户ID、姓名、电话号等信息,那么这个时候我们就可以使用merge()根据客户ID将两个表合并成一个完整的表

Original: https://blog.csdn.net/lxb_wyf/article/details/114120865
Author: 蓝小白1024
Title: pandas数据的合并concat()和merge()

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/755656/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球