Pandas DataFrame 合并表格merge、concat函数的区别和联系

==> merge函数

merge函数用于根据一个或多个键将两个DataFrame对象进行连接。它类似于SQL中的JOIN操作。默认情况下,merge执行的是内连接(inner join),但也可以通过设置how参数来执行左连接(left join)、右连接(right join)或外连接(outer join)。

import pandas as pd  
   
df1 = pd.DataFrame({  
    'key': ['A', 'B', 'C', 'D'],  
    'value1': [1, 2, 3, 4]  
})  
  
df2 = pd.DataFrame({  
    'key': ['B', 'C', 'D', 'E'],  
    'value2': [5, 6, 7, 8]  
})  
  
# 使用merge函数根据'key'列进行内连接  
merged_inner = pd.merge(df1, df2, on='key')  
'''
Inner Join:  
  key  value1  value2  
0   B       2       5  
1   C       3       6  
2   D       4       7
'''

  
# 使用merge函数根据'key'列进行外连接  
merged_outer = pd.merge(df1, df2, on='key', how='outer') 
'''Outer Join:  
  key  value1  value2  
0   A     1.0     NaN  
1   B     2.0     5.0  
2   C     3.0     6.0  
3   D     4.0     7.0  
4   E     NaN     8.0
''' 
  
# 使用merge函数根据'key'列进行左连接  
merged_left = pd.merge(df1, df2, on='key', how='left') 
''' 
Left Join:  
  key  value1  value2  
0   A     1.0     NaN  
1   B     2.0     5.0  
2   C     3.0     6.0  
3   D     4.0     7.0
'''

# 使用merge函数根据'key'列进行右连接  
merged_left = pd.merge(df1, df2, on='key', how='right') 
'''
Right Join:  
  key  value1  value2  
0   B     2.0     5.0  
1   C     3.0     6.0  
2   D     4.0     7.0  
3   E     NaN     8.0
'''

(顺便解释一下merge各种连接的含义:

左连接(Left Join)

左连接保留左侧DataFrame的所有行,并根据连接键匹配右侧DataFrame的行。如果右侧DataFrame中没有匹配的行,则结果中的对应列将包含NaN值。

右连接(Right Join)

右连接保留右侧DataFrame的所有行,并根据连接键匹配左侧DataFrame的行。如果左侧DataFrame中没有匹配的行,则结果中的对应列将包含NaN

内连接(Inner Join)

内连接只保留两个DataFrame中都有匹配的行。如果任一DataFrame中没有匹配的行,那么结果中将不包含这些行。

外连接(Outer Join)

外连接保留两个DataFrame中的所有行。如果某一侧没有匹配的行,结果中的对应列将包含NaN值。

==> concat函数

concat函数用于将多个DataFrame对象沿着一条轴(行或列)连接在一起。它不会基于列名或行索引进行合并,而是简单地将一个DataFrame堆叠在另一个DataFrame的上面或旁边。

import pandas as pd  
    
df1 = pd.DataFrame({  
    'A': [1, 2],  
    'B': [3, 4]  
})  
  
df2 = pd.DataFrame({  
    'A': [5, 6],  
    'B': [7, 8]  
})  
  
# 使用concat函数沿着行轴(axis=0)连接DataFrame  
concat_rows = pd.concat([df1, df2])  
  
# 使用concat函数沿着列轴(axis=1)连接DataFrame  
concat_cols = pd.concat([df1, df2], axis=1)  
  
  • 区别
    • merge是基于列(或多个列)的值进行合并,可以执行不同类型的连接(内连接、左连接、右连接、外连接)。
    • concat是简单地沿着行或列的方向堆叠DataFrame,不会基于列的值进行合并。
    • merge会返回一个新的DataFrame,其中的列是合并后的列。
    • concat也会返回一个新的DataFrame,但其列是原始DataFrame列的直接组合。
  • 联系
    • 两者都是用于组合多个DataFrame对象的工具。
    • 在某些情况下,可以先使用merge进行基于列的合并,然后使用concat进行基于行或列的堆叠。
    • 在选择使用merge还是concat时,需要考虑是否需要基于某些列的值进行合并,以及是否想要保留所有原始的行和列。
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值