我来为你详细讲解一下Python中Pandas数据合并的攻略。
1. 简介
Pandas是一个Python第三方库,提供了一种高效、便捷的数据处理工具,常用于数据清洗、分析和可视化。数据合并是数据处理过程中的常见操作之一,Pandas提供了多种数据合并手段,具体如下:
- concat:可以将两个或多个DataFrame对象进行简单的连接操作;
- merge:可以根据一列或多列进行连接操作;
- join:可以根据DataFrame的索引进行连接操作。
2. concat操作
concat操作可以将两个或多个DataFrame对象沿着某个轴进行简单的连接操作,语法如下:
pd.concat(objs, axis=0, ignore_index=False)
- objs:需要连接的DataFrame对象,可以是列表、字典或Series对象;
- axis:连接的轴方向,0表示纵向,1表示横向,默认为0;
- ignore_index:是否忽略原来的索引,重置索引,默认为False。
示例1:纵向连接
假设我们有两个DataFrame对象df1和df2,如下所示:
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']})
我们可以使用concat将它们沿着纵向进行连接:
df3 = pd.concat([df1, df2], axis=0, ignore_index=True)
print(df3)
输出结果为:
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
示例2:横向连接
假设我们有两个DataFrame对象df1和df2,如下所示:
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
我们可以使用concat将它们沿着横向进行连接:
df3 = pd.concat([df1, df2], axis=1)
print(df3)
输出结果为:
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
3. merge操作
merge操作可以根据一列或多列进行连接操作,语法如下:
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False)
- left:左侧的DataFrame对象;
- right:右侧的DataFrame对象;
- how:连接方式,包括'left'、'right'、'outer'、'inner',默认为'inner';
- on:连接的列名,如果左右两个DataFrame的列名不同,需要分别指定;
- left_on:左侧的连接列名;
- right_on:右侧的连接列名;
- left_index:是否使用左侧的索引作为连接键;
- right_index:是否使用右侧的索引作为连接键。
示例3:基于一列进行连接
假设我们有两个DataFrame对象df1和df2,如下所示:
df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
我们可以使用merge将它们基于key列进行连接:
df3 = pd.merge(df1, df2, on='key')
print(df3)
输出结果为:
key A B C D
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
3 K3 A3 B3 C3 D3
示例4:基于多列进行连接
假设我们有两个DataFrame对象df1和df2,如下所示:
df1 = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
'key2': ['K0', 'K1', 'K0', 'K1'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
df2 = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
我们可以使用merge将它们基于key1和key2两列进行连接:
df3 = pd.merge(df1, df2, on=['key1', 'key2'])
print(df3)
输出结果为:
key1 key2 A B C D
0 K0 K0 A0 B0 C0 D0
1 K1 K0 A2 B2 C1 D1
2 K1 K0 A2 B2 C2 D2
3 K2 K1 A3 B3 C3 D3
4. join操作
join操作可以根据DataFrame的索引进行连接操作,语法如下:
left.join(right, how='outer')
- left:左侧的DataFrame对象;
- right:右侧的DataFrame对象;
- how:连接方式,包括'left'、'right'、'outer'、'inner',默认为'outer'。
示例5:基于索引进行连接
假设我们有两个DataFrame对象df1和df2,如下所示:
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']},
index=['K0', 'K1', 'K2', 'K3'])
df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=['K0', 'K1', 'K2', 'K3'])
我们可以使用join将它们基于索引进行连接:
df3 = df1.join(df2)
print(df3)
输出结果为:
A B C D
K0 A0 B0 C0 D0
K1 A1 B1 C1 D1
K2 A2 B2 C2 D2
K3 A3 B3 C3 D3
以上就是Python中Pandas数据合并的完整攻略。希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文搞懂Python中Pandas数据合并 - Python技术站