在 Pandas 中合并多个数据集
在本系列“使用 Python 和 Pandas 进行数据清理”的第四部分中,我们将探讨一些用于组合数据的更简单的方法。
引言
本文是《使用 Python 和 Pandas 进行数据清洗》系列的一部分。其目标是帮助开发人员快速上手数据科学工具和技术。
如果您想查看该系列中的其他文章,可以在此处找到它们。
- 第一部分 - Jupyter 和 Pandas 入门
- 第二部分 - 将 CSV 和 SQL 数据加载到 Pandas 中
- 第三部分 - 在 Pandas 中更正缺失数据
- 第四部分 - 在 Pandas 中合并多个数据集
- 第五部分 - 在 Pandas DataFrame 中清理数据
- 第六部分 - 在 Pandas DataFrame 中重塑数据
- 第七部分 - 使用 Seaborn 和 Pandas 进行数据可视化
在处理完所有缺失值后,让我们将来自产品、客户和购买数据集的数据组合起来,以在一个 DataFrame 中获得更完整的数据集。这将更好地展示我们在该数据集上的进展,以及我们可以利用的整体见解。
请注意,我们已经创建了一个完整的 Jupyter Notebook,其中包含本系列模块的源数据文件,您可以下载并本地安装。
Pandas 提供了多种使用不同逻辑组合数据的方法。在深入研究一些更复杂的组合集之前,让我们先看看一些更简单的方法。
连接 DataFrames
组合数据的核心函数是 concat()
。此函数提供两个 DataFrame 的简单连接,可以使用 union 选项或与传统关系数据库类似的交集逻辑进行扩展。
- 当列匹配时,
concat
方法将 DataFrames 连接在一起。
concat()
本身将连接两个或多个具有相同键或“列标题”的 DataFrames,并将行一个接一个地推在一起。例如,两个具有 X、Y、Z 列且各有 10 行的 DataFrames 将连接成一个具有 X、Y、Z 列和 20 行数据的单个 DataFrame。
concat
函数具有许多用于组合数据的不同选项,包括但不限于
- Outer join 连接来自两个或多个 DataFrames 的数据,并包括没有匹配键的行(结果可能不包含任何值)。
- Inner join 仅在帧匹配键时连接来自两个或多个 DataFrames 的数据(结果可能会删除不匹配的行)。
合并 DataFrames
Pandas 还包括使用一个数据集的行作为输入来匹配另一个数据集的键来合并数据集的选项。这种形式的连接和合并非常强大,这也是我们将对数据集所做的事情。
merge
方法使用左连接和右连接将 DataFrames 连接在一起
目前,我们的数据集包括三个单独的 DataFrames:客户、产品和购买。对于一个应用程序来说,这很有意义,因为您的产品和客户变化不大,但您的购买可能每天都会变化。
对于数据分析和可视化,将所有数据放在一个大型 DataFrame 中更有意义。因此,我们将把我们的客户和产品数据集合并到我们的购买数据中。
创建一个新的代码块并添加以下内容
combinedData = pd.merge(purchases, customers, left_on='customer_num', right_on='id', sort=False)
combinedData = pd.merge(combinedData, products, left_on='product_num', right_on='id', sort=False)
我们使用 Pandas merge 函数来合并这三个 DataFrames。第一个合并将 purchases DataFrame 与 customers DataFrame 合并。
我们还在这里使用了两个可选参数 left_on
和 right_on
。即使键名称不同,这些参数也会基于 left_on
键匹配 right_on
键的知识来合并表。
最后,我们将 sort
选项指定为 false,因为我们暂时不需要对数据进行排序,这使得此方法执行起来更快。
添加以下行以检查我们新的组合 DataFrame
print(combinedData.head(5))
print(combinedData.shape)
print(purchases.shape)
结果如下
正如您所看到的,我们现在有一个大型 DataFrame,其中包含来自所有三个 DataFrames 的多列组合。
您还会看到,当我们比较 purchases
DataFrame 和结果 DataFrame 之间的行数时,我们从 6000 行减少到 5069 行。由于 merge
默认使用 inner join,因此无法与客户匹配的行(因为它们已通过数据清理的第一阶段删除)已从组合 DataFrame 中删除。
摘要
我们研究了 Pandas 函数以连接数据集,然后继续将我们的三个 DataFrames 合并成一个完整的 DataFrame,我们可以进一步操作该 DataFrame 以呈现用于可视化目的的数据。
我们现在将研究清理可能导致一些问题的最后一个值和键,然后重新整形我们的数据以进行可视化。