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
'''
左连接保留左侧DataFrame的所有行,并根据连接键匹配右侧DataFrame的行。如果右侧DataFrame中没有匹配的行,则结果中的对应列将包含NaN
值。
右连接保留右侧DataFrame的所有行,并根据连接键匹配左侧DataFrame的行。如果左侧DataFrame中没有匹配的行,则结果中的对应列将包含NaN
值
内连接只保留两个DataFrame中都有匹配的行。如果任一DataFrame中没有匹配的行,那么结果中将不包含这些行。
外连接保留两个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列的直接组合。merge
进行基于列的合并,然后使用concat
进行基于行或列的堆叠。merge
还是concat
时,需要考虑是否需要基于某些列的值进行合并,以及是否想要保留所有原始的行和列。