📜  合并熊猫数据集 - Python (1)

📅  最后修改于: 2023-12-03 15:37:10.123000             🧑  作者: Mango

合并熊猫数据集 - Python

简介

在数据分析和数据处理中,经常需要合并多个数据集并进行分析。使用Python的pandas库可以很方便地完成这个任务。pandas具有非常丰富的合并、连接和拼接方法,在实际的工作中也是使用最广泛的库之一。

本文将介绍pandas中数据集合并的方法,包括数据集拼接、数据集连接、数据集合并等。在说明这些方法的同时,我们将给出一些例子,以便更好地解释如何使用这些方法。

数据集拼接

用concat()方法进行拼接,这个方法作用比较简单,就是将数据集按照行或者列的方向进行拼接。concat()方法的语法如下:

pandas.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, sort=True, copy=True)

其中:

  • objs:要合并的数据集的序列或字典
  • axis:合并的方向,0为按行拼接,1为按列拼接,默认为0
  • join:合并方式,可取'inner'、'outer'两种,默认为'outer'
  • join_axes:要在其他轴上使用的索引,比如,在数据集合并的时候我们可能希望保持某一轴的行或列
  • ignore_index:是否忽略原有数据集的索引,从0开始重新编号
  • keys:在拼接数据集的时候,可以通过keys参数指定一个类似多重索引的方式进行拼接
  • levels:指定keys参数的级别,默认为None
  • sort:按照排序的方式合并数据集
  • copy:是否复制数据集的拷贝

下面给出一个示例,假设我们有两个数据集A和B,数据集A的数据如下:

| 名称 | 数据A | | :--: | :---: | | A1 | 1.0 | | A2 | 2.0 | | A3 | 3.0 |

数据集B的数据如下:

| 名称 | 数据B | | :--: | :---: | | A2 | 4.0 | | A3 | 5.0 | | A4 | 6.0 |

我们将数据集A和B进行按行拼接:

import pandas as pd

data_a = pd.DataFrame({'名称': ['A1', 'A2', 'A3'], '数据A': [1.0, 2.0, 3.0]})
data_b = pd.DataFrame({'名称': ['A2', 'A3', 'A4'], '数据B': [4.0, 5.0, 6.0]})

result = pd.concat([data_a, data_b], axis=0)
print(result)

结果如下:

   名称  数据A  数据B
0  A1  1.0  NaN
1  A2  2.0  NaN
2  A3  3.0  NaN
0  A2  NaN  4.0
1  A3  NaN  5.0
2  A4  NaN  6.0

可以看到,数据集A和B中相同的'A2'和'A3'被合并到了一起,而'A1'和'A4'分别出现在了一行中,并且,因为它们在另一个数据集中没有对应的数据,所以被填充了NaN。

当然,在使用concat()方法时,还可以将多个数据集合并到一起:

result = pd.concat([data_a, data_b, data_a, data_b], axis=0)
print(result)

输出结果如下,其中每个数据集都被合并到了一起:

   名称  数据A  数据B
0  A1  1.0  NaN
1  A2  2.0  NaN
2  A3  3.0  NaN
0  A2  NaN  4.0
1  A3  NaN  5.0
2  A4  NaN  6.0
0  A1  1.0  NaN
1  A2  2.0  NaN
2  A3  3.0  NaN
0  A2  NaN  4.0
1  A3  NaN  5.0
2  A4  NaN  6.0
数据集连接

连接是指沿着两个数据集的某个轴将它们合并在一起。pandas提供了merge()方法来完成连接的操作。实际上,merge()方法与SQL中的JOIN语句有着相似的运算逻辑。merge()方法的语法如下:

pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

其中:

  • left:要连接的左数据集
  • right:要连接的右数据集
  • how:连接方式,包括'inner'、'outer'、'left'、'right'四种
  • on:要连接的列名,必须存在于左右两个数据集之中
  • left_on:要连接的左数据集的列名
  • right_on:要连接的右数据集的列名
  • left_index:如果为True,则使用左数据集的索引(行标签)进行连接
  • right_index:如果为True,则使用右数据集的索引(行标签)进行连接
  • sort:按照排序方式进行连接
  • suffixes:左数据集和右数据集有相同列名时,都有后缀
  • copy:是否复制数据集的拷贝
  • indicator:是否在结果数据集中添加一列指示合并方式,包括'left_only'、'right_only'和'both'
  • validate:检验指定连接方式是否有效,默认为None,可选'one_to_one'、'one_to_many'、'many_to_one'和'many_to_many'

下面给出一个示例,假设我们有两个数据集A和B,数据集A的数据如下:

| 名称 | 数据A | | :--: | :---: | | A1 | 1.0 | | A2 | 2.0 | | A3 | 3.0 |

数据集B的数据如下:

| 名称 | 数据B | | :--: | :---: | | A2 | 4.0 | | A3 | 5.0 | | A4 | 6.0 |

我们将数据集A和B进行左连接(即保留A数据集的所有行):

result = pd.merge(data_a, data_b, how='left', on='名称')
print(result)

输出结果如下:

   名称  数据A  数据B
0  A1  1.0  NaN
1  A2  2.0  4.0
2  A3  3.0  5.0

可以看到,'A2'和'A3'在左右数据集中都出现,所以它们在连接的结果中有数据;而'A1'只在左数据集中出现,所以在右数据集中没有对应的数据,所以在连接的结果中,右数据集的那一列都被填充了NaN;'A4'只在右数据集中出现,所以在连接的结果中没有数据。

此外,还可以进行不同类型的连接,例如右连接(保留右数据集的所有行):

result = pd.merge(data_a, data_b, how='right', on='名称')
print(result)

输出结果如下:

   名称  数据A  数据B
0  A2  2.0  4.0
1  A3  3.0  5.0
2  A4  NaN  6.0

可以注意到,在右连接后,左数据集的那一列都被填充了NaN,因为它没有对应的列。

数据集合并

合并是指沿着两个数据集的轴将它们合并在一起,并可以根据共同列的值进行数据集的修改。pandas提供了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=True, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

其中:

  • left:要合并的左数据集
  • right:要合并的右数据集
  • how:连接方式,包括'inner'、'outer'、'left'、'right'四种
  • on:要连接的列名,必须存在于左右两个数据集之中
  • left_on:要连接的左数据集的列名
  • right_on:要连接的右数据集的列名
  • left_index:如果为True,则使用左数据集的索引(行标签)进行连接
  • right_index:如果为True,则使用右数据集的索引(行标签)进行连接
  • sort:按照排序方式进行连接
  • suffixes:左数据集和右数据集有相同列名时,都有后缀
  • copy:是否复制数据集的拷贝
  • indicator:是否在结果数据集中添加一列指示合并方式,包括'left_only'、'right_only'和'both'
  • validate:检验指定连接方式是否有效,默认为None,可选'one_to_one'、'one_to_many'、'many_to_one'和'many_to_many'

下面给出一个示例,假设我们有两个数据集A和B,数据集A的数据如下:

| 名称 | 数据A | | :--: | :---: | | A1 | 1.0 | | A2 | 2.0 | | A3 | 3.0 |

数据集B的数据如下:

| 名称 | 数据B | | :--: | :---: | | A2 | 4.0 | | A3 | 5.0 | | A4 | 6.0 |

我们将数据集A和B进行合并:

result = pd.merge(data_a, data_b, how='inner', on='名称')
result['数据A'] = result['数据A'].apply(lambda x: x*2)
print(result)

输出结果如下:

  名称  数据A  数据B
0  A2  4.0  4.0
1  A3  6.0  5.0

可以看到,在合并数据集后,我们对数据集A的数据进行了修改,将其乘以2。

总结

本文介绍了pandas中数据集合并的方法,包括数据集拼接、数据集连接和数据集合并。pandas不仅提供了很多丰富的方法可以实现这些操作,而且其语法简洁易懂,适用于各种数据处理场景。无论是数据筛选、数据清洗还是数据分析,pandas都是一种不可或缺的数据处理工具。