Python Pandas中合并数据的5个函数使用详解

  • Post category:Python

Python Pandas中合并数据的5个函数使用详解

引言

Pandas是Python中一个强大的数据分析库,提供了丰富的数据结构和数据分析常用的操作函数。

在日常的数据分析和处理中,经常会遇到需要把多个数据源进行合并的需求,比如对多个Excel或CSV文件进行合并,或者对数据库中的多个表进行连接等。

为了满足这些需求,Pandas提供了五个常见的合并数据的函数,其中包括:concat、merge、join、append和concatenate。这篇文章将详细介绍这五个函数的使用方法。

concat函数

concat函数用于把多个DataFrame对象按照一定的方式拼接在一起,可以按行或按列进行拼接。下面是concat函数的基本语法:

pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, sort=False, copy=True)
  • objs: 需要合并的DataFrame对象列表或字典。
  • axis: 合并的轴向,默认为0,表示按行拼接;如果为1,则表示按列拼接。
  • join: 合并的方式,可以为’inner’或’outer’,默认为’outer’,表示取并集。
  • ignore_index: 是否忽略原始索引,默认为False,表示使用原来的索引。
  • keys: 用于指定新的索引层次结构的标签列表。
  • sort: 是否对合并后的数据进行排序,默认为False,表示不排序。
  • copy: 是否对原始数据进行复制,默认为True,表示复制原始数据,不改变原始数据。

下面是一个按照行进行合并的示例:

import pandas as pd

data1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                      'B': ['B0', 'B1', 'B2', 'B3'],
                      'C': ['C0', 'C1', 'C2', 'C3'],
                      'D': ['D0', 'D1', 'D2', 'D3']})
data2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                      'B': ['B4', 'B5', 'B6', 'B7'],
                      'C': ['C4', 'C5', 'C6', 'C7'],
                      'D': ['D4', 'D5', 'D6', 'D7']})
data3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
                      'B': ['B8', 'B9', 'B10', 'B11'],
                      'C': ['C8', 'C9', 'C10', 'C11'],
                      'D': ['D8', 'D9', 'D10', 'D11']})

result = pd.concat([data1, data2, data3])
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
0   A4  B4  C4  D4
1   A5  B5  C5  D5
2   A6  B6  C6  D6
3   A7  B7  C7  D7
0   A8  B8  C8  D8
1   A9  B9  C9  D9
2  A10 B10 C10 D10
3  A11 B11 C11 D11

按照列进行合并也非常类似,只需要将axis参数设置为1即可。

merge函数

merge函数用于对两个DataFrame对象进行连接,可以指定连接的键(列)以及连接方式(内连接、左连接、右连接和外连接)。下面是merge函数的基本语法:

pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
  • left: 左侧的DataFrame对象。
  • right: 右侧的DataFrame对象。
  • how: 连接方式,可以为’inner’、’outer’、’left’和’right’,默认为’inner’。
  • on: 指定连接键(列)的名称。
  • left_on: 在左侧的DataFrame对象中指定连接键的名称。
  • right_on: 在右侧的DataFrame对象中指定连接键的名称。
  • left_index: 是否按照左侧的索引进行连接,默认为False。
  • right_index: 是否按照右侧的索引进行连接,默认为False。
  • sort: 是否对连接结果进行排序,默认为False。
  • suffixes: 连接键重名时用于区分的后缀名称,左侧的默认为’_x’,右侧的默认为’_y’。
  • copy: 是否对原始数据进行复制,默认为True,表示复制原始数据,不改变原始数据。
  • indicator: 是否添加特殊的列来标识合并的数据来源,默认为False,不添加。
  • validate: 可以为’one_to_one’、’one_to_many’或’many_to_one’,用于验证连接的完整性,默认为None,表示不验证。

下面是一个左连接的示例:

import pandas as pd

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.merge(left, right, on='key', how='left')
print(result)

输出结果为:

  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

join函数

join函数是DataFrame对象特有的函数,用于对两个DataFrame对象进行连接,可以指定连接的方式(内连接、左连接、右连接和外连接)和连接键。下面是join函数的基本语法:

DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
  • other: 另一个DataFrame对象。
  • on: 指定连接键(列)的名称。
  • how: 连接方式,可以为’inner’、’outer’、’left’和’right’,默认为’left’。
  • lsuffix: 当连接键重名时,左侧的DataFrame对象中连接键的名称的后缀。
  • rsuffix: 当连接键重名时,右侧的DataFrame对象中连接键的名称的后缀。
  • sort: 是否对连接结果进行排序,默认为False。

下面是一个左连接的示例:

import pandas as pd

left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3'],
                     'key': ['K0', 'K1', 'K2', 'K3']})

right = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'],
                      'D': ['D0', 'D1', 'D2', 'D3'],
                      'key': ['K0', 'K1', 'K2', 'K3']})

result = left.join(right, on='key', how='left')
print(result)

输出结果为:

    A   B key   C   D   key
0  A0  B0  K0  C0  D0  K0.1
1  A1  B1  K1  C1  D1  K1.1
2  A2  B2  K2  C2  D2  K2.1
3  A3  B3  K3  C3  D3  K3.1

append函数

append函数用于把一个DataFrame对象添加到另一个DataFrame对象的尾部。下面是append函数的基本语法:

DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=False)
  • other: 另一个DataFrame对象。
  • ignore_index: 是否忽略原始索引,默认为False,表示使用原来的索引。
  • verify_integrity: 是否在添加新数据之前验证新索引和列是否与旧的索引和列重复,默认为False,表示不验证。
  • sort: 是否对添加后的数据进行排序,默认为False,表示不排序。

下面是一个示例:

import pandas as pd

data1 = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])
data2 = pd.DataFrame([[5, 6], [7, 8]], columns=['A', 'B'])

result = data1.append(data2)
print(result)

输出结果为:

   A  B
0  1  2
1  3  4
0  5  6
1  7  8

concatenate函数

concatenate函数是numpy库中的函数,用于把多个数组按照一定的方式拼接在一起。与pandas中的concat函数类似,但只能用于二维数组。下面是concatenate函数的基本语法:

numpy.concatenate((a1, a2, ...), axis=0, out=None)
  • (a1, a2, ...): 需要连接的数组。
  • axis: 连接的轴向,默认为0,表示按行拼接;如果为1,则表示按列拼接。
  • out: 结果输出的数组,如果不指定,则会创建一个新的数组。

下面是一个示例:

import numpy as np

data1 = np.array([[1, 2], [3, 4]])
data2 = np.array([[5, 6], [7, 8]])

result = np.concatenate((data1, data2), axis=0)
print(result)

输出结果为:

[[1 2]
 [3 4]
 [5 6]
 [7 8]]

结语

以上就是Python Pandas中合并数据的5个函数的使用方法,当你需要进行数据拼接和连接的时候,可以根据具体的需求选择相应的函数进行操作。当然,这5个函数还有更多的参数和用法,读者可以自行查阅Pandas的官方文档进行深入学习。