Pandas数据框的连接/合并/拼接
在本文中,我们将介绍Pandas数据框的连接/合并/拼接操作。在数据分析中,经常会遇到需要将不同数据源的数据进行整合,这时就需要使用数据框的连接/合并/拼接操作。
阅读更多:Pandas 教程
数据框的连接
数据框的连接是将两个数据框按照一定的条件(如列)进行连接,生成一个新的数据框。Pandas支持四种连接方式:内连接(inner join)、左连接(left join)、右连接(right join)和外连接(outer join)。
内连接
内连接是指将两个数据框按照指定的列进行连接,只返回两个数据框中都存在的行。使用Pandas的merge()
函数进行内连接操作,具体用法如下:
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': [2, 4, 5, 6]})
result = pd.merge(df1, df2, on='key', how='inner')
其中,on
参数指定连接的列名,how
参数指定连接方式,这里使用了inner表示内连接。连接结果如下:
key | value_x | value_y |
---|---|---|
B | 2 | 2 |
D | 4 | 4 |
可以看到,连接结果只返回了同时出现在df1和df2中的B和D两行数据。
左连接
左连接是指将两个数据框按照指定的列进行连接,返回左侧数据框的所有行以及右侧数据框中与左侧数据框匹配到的行。使用Pandas的merge()
函数进行左连接操作,具体用法如下:
result = pd.merge(df1, df2, on='key', how='left')
连接结果如下:
key | value_x | value_y |
---|---|---|
A | 1 | NaN |
B | 2 | 2 |
C | 3 | NaN |
D | 4 | 4 |
可以看到,连接结果返回了左侧数据框df1中所有行,以及右侧数据框df2中与df1中的key列匹配的B和D两行数据,其余位置填充了NaN。
右连接
右连接是指将两个数据框按照指定的列进行连接,返回右侧数据框的所有行以及左侧数据框中与右侧数据框匹配到的行。使用Pandas的merge()
函数进行右连接操作,具体用法与左连接相似:
result = pd.merge(df1, df2, on='key', how='right')
连接结果如下:
key | value_x | value_y |
---|---|---|
B | 2 | 2 |
D | 4 | 4 |
E | NaN | 5 |
F | NaN | 6 |
可以看到,连接结果返回了右侧数据框df2中所有行,以及左侧数据框df1中与df2中的key列匹配的B和D两行数据,其余位置填充了NaN。
外连接
外连接是指将两个数据框按照指定的列进行连接,返回两个数据框中所有的行。使用Pandas的merge()
函数进行外连接操作,具体用法如下:
result = pd.merge(df1, df2, on='key', how='outer')
连接结果如下:
key | value_x | value_y |
---|---|---|
A | 1 | NaN |
B | 2 | 2 |
C | 3 | NaN |
D | 4 | 4 |
E | NaN | 5 |
F | NaN | 6 |
可以看到,连接结果返回了两个数据框df1和df2中所有行,同时将不匹配的位置填充了NaN。
数据框的合并
数据框的合并是将两个数据框按照相同列的相同位置进行合并,生成一个新的数据框。Pandas提供了concat()
函数进行数据框的行合并和列合并。
行合并
行合并是将两个数据框按照行方向进行合并,即在原有数据框的行方向上进行拼接。使用Pandas的concat()
函数进行行合并操作,具体用法如下:
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']})
result = pd.concat([df1, df2])
其中,[df1, df2]
是要进行合并的数据框序列。连接结果如下:
A | B | C | D | |
---|---|---|---|---|
0 | A0 | B0 | C0 | D0 |
1 | A1 | B1 | C1 | D1 |
2 | A2 | B2 | C2 | D2 |
3 | A3 | B3 | C3 | D3 |
0 | A4 | B4 | C4 | D4 |
1 | A5 | B5 | C5 | D5 |
2 | A6 | B6 | C6 | D6 |
3 | A7 | B7 | C7 | D7 |
可以看到,连接结果按照原有数据框的行顺序拼接,形成了包含8行数据的新数据框。
列合并
列合并是将两个数据框按照列方向进行合并,即在原有数据框的列方向上进行拼接。使用Pandas的concat()
函数进行列合并操作,具体用法如下:
df3 = pd.DataFrame({'E': ['E0', 'E1', 'E2', 'E3'], 'F': ['F0', 'F1', 'F2', 'F3'], 'G': ['G0', 'G1', 'G2', 'G3'], 'H': ['H0', 'H1', 'H2', 'H3']})
result = pd.concat([df1, df3], axis=1)
其中,axis=1
表示按照列方向进行合并操作。连接结果如下:
A | B | C | D | E | F | G | H | |
---|---|---|---|---|---|---|---|---|
0 | A0 | B0 | C0 | D0 | E0 | F0 | G0 | H0 |
1 | A1 | B1 | C1 | D1 | E1 | F1 | G1 | H1 |
2 | A2 | B2 | C2 | D2 | E2 | F2 | G2 | H2 |
3 | A3 | B3 | C3 | D3 | E3 | F3 | G3 | H3 |
可以看到,连接结果按照原有数据框的列顺序拼接,形成了包含8列数据的新数据框。
数据框的拼接
数据框的拼接是将多个数据框拼接为一个数据框,数据框拼接需要注意各数据框的列标签和索引值是否存在重复。使用Pandas的concat()
函数进行数据框的拼接操作,具体用法如下:
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2'], 'C': ['C0', 'C1', 'C2'], 'D': ['D0', 'D1', 'D2']}, index=[0, 1, 2])
df2 = pd.DataFrame({'A': ['A3', 'A4', 'A5'], 'B': ['B3', 'B4', 'B5'], 'C': ['C3', 'C4', 'C5'], 'D': ['D3', 'D4', 'D5']}, index=[3, 4, 5])
df3 = pd.DataFrame({'A': ['A6', 'A7', 'A8'], 'B': ['B6', 'B7', 'B8'], 'C': ['C6', 'C7', 'C8'], 'D': ['D6', 'D7', 'D8']}, index=[6, 7, 8])
result = pd.concat([df1, df2, df3])
其中,[df1, df2, 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 |
8 | A8 | B8 | C8 | D8 |
可以看到,连接结果将三个数据框按照行方向拼接为一个新的数据框。
总结
本文详细介绍了Pandas数据框的连接/合并/拼接操作,包括四种连接方式的使用,以及行合并、列合并和多个数据框的拼接方式,并通过示例说明了各操作管理。这些数据框的操作可以方便地对多个数据源进行整合,为数据分析提供了便捷的工具。