📜  如何在 python 中合并两个以上的数据帧(1)

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

如何在 python 中合并两个以上的数据帧

数据分析经常需要将若干个数据集进行合并,形成一个更完整的数据,本文将介绍在 Python 中如何合并两个以上的数据帧。

需要合并的数据

我们将使用以下三个数据集进行合并:

import pandas as pd

# 创建数据帧1
df1 = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'age': [25, 30, 35, 40]
})

# 创建数据帧2
df2 = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'income': [5000, 6000, 7000, 8000]
})

# 创建数据帧3
df3 = pd.DataFrame({
    'name': ['Alice', 'Charlie', 'David', 'Edward'],
    'gender': ['F', 'M', 'M', 'M']
})

三个数据集分别是 df1df2df3,每个数据集都包含一个 name 字段。df1 包含一个 age 字段,df2 包含一个 income 字段,df3 包含一个 gender 字段。

横向合并

横向合并(horizontal merge)将两个或多个数据集沿着横轴方向(即列方向)进行连接。在 Pandas 中,可以使用 merge() 函数来实现横向合并。

下面的代码通过 merge() 函数将 df1df2 横向合并:

merged_df = pd.merge(df1, df2, on='name')
print(merged_df)

输出结果为:

      name  age  income
0    Alice   25    5000
1      Bob   30    6000
2  Charlie   35    7000
3    David   40    8000

上述代码中的 on 参数指定了合并关键字,它指定了两个数据集中用于合并的共同字段。

将三个数据集横向合并的代码如下:

merged_df = pd.merge(pd.merge(df1, df2, on='name'), df3, on='name', how='outer')
print(merged_df)

输出结果为:

      name   age  income gender
0    Alice  25.0  5000.0      F
1      Bob  30.0  6000.0    NaN
2  Charlie  35.0  7000.0      M
3    David  40.0  8000.0      M
4   Edward   NaN     NaN      M

上述代码中的 how 参数指定了合并方式,它可以取值为 inner(内连接)、outer(外连接)、left(左连接)和 right(右连接)。在本例中,我们使用了 outer 连接,这意味着数据集中任何一个数据集中包含的 name 字段都将被包含在合并后的数据集中。

纵向合并

纵向合并(vertical merge)将两个或多个数据集沿着纵轴方向(即行方向)进行连接。在 Pandas 中,可以使用 concat() 函数来实现纵向合并。

下面的代码通过 concat() 函数将 df1df2df3 纵向合并:

merged_df = pd.concat([df1, df2, df3], axis=1)
print(merged_df)

输出结果为:

      name  age    name  income     name gender
0    Alice   25   Alice    5000    Alice      F
1      Bob   30     Bob    6000  Charlie      M
2  Charlie   35  Charlie    7000    David      M
3    David   40   David    8000   Edward      M

注意,由于 df1df2df3name 字段不完全相同,因此在将这三个数据集纵向合并时,可能会出现一些缺失值(NaN)。如果希望合并后的数据集中不包含缺失值,可以使用 fillna() 函数来对缺失值进行处理。

将三个数据集纵向合并并去除缺失值的代码如下:

merged_df = pd.concat([df1.set_index('name'), df2.set_index('name'), df3.set_index('name')], axis=1).reset_index()
merged_df = merged_df.fillna('')
print(merged_df)

输出结果如下:

      name age income gender
0    Alice  25   5000      F
1      Bob  30   6000       
2  Charlie  35   7000      M
3    David  40   8000      M
4   Edward              M

在上述代码中,set_index() 函数将 name 字段设置为索引,以便能够在纵向合并时对它们进行对齐。reset_index() 函数将索引还原为普通列;fillna('') 函数将缺失值替换为空字符串。