关键词

Python中的pandas.concat()函数

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()函数的完整攻略,希望可以帮助到大家。

本文链接:http://task.lmcjl.com/news/14473.html

展开阅读全文