📅  最后修改于: 2023-12-03 15:37:10.123000             🧑  作者: Mango
在数据分析和数据处理中,经常需要合并多个数据集并进行分析。使用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)
其中:
下面给出一个示例,假设我们有两个数据集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)
其中:
下面给出一个示例,假设我们有两个数据集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)
其中:
下面给出一个示例,假设我们有两个数据集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都是一种不可或缺的数据处理工具。