pandas是Python中一个用于数据处理和分析的强大库。其中,pandas.concat()函数可以将多个DataFrame或Series对象连接在一起。本文将详细讲解如何使用pandas.concat()函数,并提供示例代码。
1. pandas.concat()函数的参数
pandas.concat()函数有许多可选参数,以下为主要参数:
- objs:要连接的数据。必须是Series或DataFrame对象,或者是一个由它们组成的列表、元组、字典或其组合。
- axis:沿着哪个轴进行连接。默认为0,即按行进行连接。设置为1,则按列进行连接。
- join:用于指定连接的方式。可以是'inner'(内连接)或'outer'(外连接),默认为'outer'。
- ignore_index:是否忽略原来的索引。默认为False,即保留原来的索引。如设置为True,则会按照连接后的数据重新生成索引。
- keys:用于为多个DataFrame或Series对象分配层次化索引。
- sort:是否按照字典序进行排序。默认为False。
本文例子均默认沿着行连接。
2. pandas.concat()的基本用法
我们首先需要引入pandas库:
import pandas as pd
2.1 连接两个DataFrame
我们先来看两个简单的DataFrame:
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']},
index=[4, 5, 6, 7])
我们可以使用pandas.concat()函数将它们连接起来:
result = pd.concat([df1, df2])
print(result)
输出结果为:
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
我们可以看到,concat()函数将df1和df2沿着行连接了起来。
2.2 连接多个DataFrame
我们也可以连接多个DataFrame。以下为示例代码:
df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3']})
df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7']})
df3 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11']})
result = pd.concat([df1, df2, df3])
print(result)
输出结果为:
key A B C
0 K0 A0 B0 C0
1 K1 A1 B1 C1
2 K2 A2 B2 C2
3 K3 A3 B3 C3
0 K0 A4 B4 C4
1 K1 A5 B5 C5
2 K2 A6 B6 C6
3 K3 A7 B7 C7
0 K0 A8 B8 C8
1 K1 A9 B9 C9
2 K2 A10 B10 C10
3 K3 A11 B11 C11
同样是沿着行连接,但这回我们连接了多个DataFrame。
2.3 连接时忽略索引
有些时候,我们需要在连接时忽略原有的索引。我们只需要将参数ignore_index设置为True即可。以下为示例代码:
result = pd.concat([df1, df2, df3], ignore_index=True)
print(result)
输出结果为:
key A B C
0 K0 A0 B0 C0
1 K1 A1 B1 C1
2 K2 A2 B2 C2
3 K3 A3 B3 C3
4 K0 A4 B4 C4
5 K1 A5 B5 C5
6 K2 A6 B6 C6
7 K3 A7 B7 C7
8 K0 A8 B8 C8
9 K1 A9 B9 C9
10 K2 A10 B10 C10
11 K3 A11 B11 C11
我们看到,连接后新的DataFrame中重新生成了索引。
2.4 在连接时添加层次化索引
我们可以在连接时为原有的DataFrame分别分配一个不同的层次化索引。以下为示例代码:
result = pd.concat([df1, df2, df3], keys=['df1', 'df2', 'df3'])
print(result)
输出结果为:
key A B C
df1 0 K0 A0 B0 C0
1 K1 A1 B1 C1
2 K2 A2 B2 C2
3 K3 A3 B3 C3
df2 0 K0 A4 B4 C4
1 K1 A5 B5 C5
2 K2 A6 B6 C6
3 K3 A7 B7 C7
df3 0 K0 A8 B8 C8
1 K1 A9 B9 C9
2 K2 A10 B10 C10
3 K3 A11 B11 C11
我们看到,连接之后,每一个原来的DataFrame都被分配了一个df1、df2和df3的层次化索引。
2.5 使用连接键连接两个DataFrame
有时候,我们可以使用一个连接键(也就是两个DataFrame的相同列)来对两个DataFrame进行连接。以下为示例代码:
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
result = pd.concat([left, right], axis=1)
print(result)
输出结果为:
key A B key C D
0 K0 A0 B0 K0 C0 D0
1 K1 A1 B1 K1 C1 D1
2 K2 A2 B2 K2 C2 D2
3 K3 A3 B3 K3 C3 D3
我们可以看到,两个DataFrame根据连接键key进行连接,只保留了相同的key所在的行,并将左右两个DataFrame中的数据分别拼接在了一起。
3. 总结
pandas.concat()函数可以很方便地将多个DataFrame或Series对象拼接在一起,生成一个新的对象。我们可以使用axis参数来指定拼接的方向,使用join参数来指定连接的方式,使用ignore_index参数来忽略原来的索引。我们还可以使用keys参数为每一个拼接的DataFrame分配一个层次化索引。最后,我们还可以使用连接键来对两个DataFrame进行连接。
以上就是pandas.concat()函数的完整攻略,希望可以帮助到大家。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中的pandas.concat()函数 - Python技术站