当在数据分析或数据处理过程中,可能需要合并表格以获得更完整的信息或更好的洞察。在Pandas库中,concat()和merge()是两个常用的函数,用于将多个数据帧(DataFrame)或序列(Series)组合在一起。它们的主要区别在于它们的用途和合并方式。
concate:函数是用于拼接两个或多个DataFrame或Series对象沿着行或列的方向。这个函数可以用于简单的数据拼接,也可以用于复杂的数据处理任务。
df = pd.concat(objs, axis=0, join='outer', ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False,
sort=None, copy=True)
(1)objs:对象,一般为df或者series
(2)axis:拼接方向,默认为0,行拼接,若axis=1,则为列拼接
(3)join:默认为outer表示并集,inner表示交集, left/right表示左右连接
(4)ignore_index=True:重建索引
(5)keys:创建层次化索引
(a)两张表列数一致,只是需要将行数简单拼接时:pd.concat([df1,df2]),效果df1.append(df2)。
(b)两张表行数一致,只需要列简单拼接时:pd.concate([df1,df2],axis=1),效果pd.merge(df1,df2,left_index=True,right_index=True,how=‘outer’)。
(c)两张表按行拼接,只想保留列索引相同的列,则how=‘inner’。
(d)两张表按列拼接,只想保留行索引相同的行,则how=‘inner’。
下面是一些concat()函数的使用示例和总结:
- 沿着行方向拼接DataFrame
如果想要沿着行方向将两个DataFrame对象拼接在一起,可以使用concat()函数,如下所示:
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
concated_df = pd.concat([df1, df2])
print(concated_df)
这将会在两个DataFrame之间进行行拼接,输出的结果如下:
A B
0 1 3
1 2 4
0 5 7
1 6 8
- 沿着列方向拼接DataFrame
如果想要沿着列方向将两个DataFrame对象拼接在一起,可以通过设置axis=1来实现,如下所示:
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
concated_df = pd.concat([df1, df2], axis=1)
print(concated_df)
这将会在两个DataFrame之间进行列拼接,输出的结果如下:
A B A B
0 1 3 5 7
1 2 4 6 8
- 使用 ignore_index 参数更改索引
如果想要在拼接之后更改DataFrame的索引,可以使用ignore_index参数,如下所示:
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
concated_df = pd.concat([df1, df2], ignore_index=True)
print(concated_df)
这将会在拼接之后重设DataFrame的索引,输出的结果如下:
A B
0 1 3
1 2 4
2 5 7
3 6 8
merge:merge()函数来合并两个表格。merge()函数的基本语法如下:
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,
validate=None)
(1)left和right分别表示要合并的左右两个表格;
(2)how参数指定合并方式,包括内连接(inner)、左连接(left)、右连接(right)和外连接(outer);
(3)on参数指定用于合并的列名;left_on和right_on参数分别指定左右两个表格中用于合并的列名;
(4)left_index和right_index参数指定是否使用索引列进行合并;
(5)sort参数指定是否排序结果表格;
(6)suffixes参数指定左右两个表格重叠列名的后缀;
(7)copy参数指定是否复制原始数据;
(8)indicator参数指定是否添加指示符列;
(9)validate参数指定是否验证合并结果。
下面的例子将会详细说明如何使用:
首先,我们创建两个简单的DataFrame:
import pandas as pd
# 创建第一个DataFrame
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'key': ['K0', 'K1', 'K0', 'K1']
})
# 创建第二个DataFrame
df2 = pd.DataFrame({
'key': ['K0', 'K1'],
'C': ['C0', 'C1']
})
默认情况下,merge()函数执行的是内连接(inner join):
merged = pd.merge(df1, df2, on='key')
print(merged)
结果:
A B key C
0 A0 B0 K0 C0
1 A1 B1 K1 C1
2 A2 B2 K0 C0
3 A3 B3 K1 C1
如果我们想执行左连接或右连接,我们可以设置how参数:
左连接:
merged = pd.merge(df1, df2, on='key', how='left')
print(merged)
右连接:
merged = pd.merge(df1, df2, on='key', how='right')
print(merged)
如果我们想根据多个键进行合并,我们可以传入一个键的列表给on参数:
merged = pd.merge(df1, df2, on=['key1', 'key2'])
print(merged)
总结一下,concat()函数用于将多个数据帧或序列按照行或列的方向进行简单的拼接,而merge()函数用于将两个数据帧按照指定的列或索引进行合并。concat()函数保留所有输入对象的索引或列名,而merge()函数会根据合并的键连接行,并可能添加新的列来存储来自两个数据帧的值。