有效地连接多个(和凌乱的)数据帧

How to Batch Process and Concatenate Dataframes with Messy Data——连接数据集是数据世界中非常常见的数据处理任务。根据您的需要,您可能需要通过垂直堆叠来连接多个数据帧(与 SQL 中的“联合”操作相同)。 …

有效地连接多个(和凌乱的)数据帧

如何使用杂乱的数据批量处理和连接数据帧

连接数据集是数据世界中非常常见的数据处理任务。根据您的需要,您可能需要通过垂直堆叠来连接多个数据帧(与 SQL 中的“联合”操作相同)。或者您可能需要通过基于一些公共键水平加入或合并它们来连接它们。

在垂直连接数据集时,假设数据帧具有相同的列名并且列的顺序相同,我们可以简单地使用 pandas.concat() 方法来执行连接。我们只需要指定axis=0,它告诉pandas 将第二个数据帧堆叠在第一个数据帧下,第三个数据帧堆叠在第二个数据帧下,依此类推。

pd.concat([df1, df2, df3], axis=0)

如果您有很多数据集(例如 8 个或 10 个)要连接,并且这些数据集可能具有不同的列名或列的顺序不同,该怎么办?当然,您可以一个一个地导入和处理每个数据集,然后将它们连接起来。但是有没有更优雅、更有效的方法呢?

在这篇文章中,我将向您介绍一个真实的示例,在该示例中,我们可以使用 for 循环和一些 Pandas 技巧有效地批处理和连接多个混乱的数据帧。用于演示的数据文件可以从 Kaggle 下载。总共有 8 个 csv 文件。每个文件包含 2015 年至 2022 年每年 153 个国家的幸福度得分以及用于解释得分的因素。[0]

我们的目标是将这些文件连接到一个包含三列的数据框中——“年份”列、“国家”列和“幸福分数”列。稍后,我们可以创建一些有趣的数据可视化来展示幸福指数在不同国家/地区之间的差异以及随时间的变化。让我们看看它是如何工作的。

第1步:

让我们首先使用 Python 的 glob 函数返回所有文件路径的列表。这将帮助我们使用 for 循环一次将所有文件读入 pandas 数据帧。

第2步:

接下来,让我们使用 for 循环将所有文件读入 pandas 数据帧。如果这些数据集都具有相同的列名并且列的顺序相同,我们可以使用 pd.concat() 轻松连接它们。让我们使用以下代码检查是否是这种情况(请注意,在第 4 行中,为了方便检查,我将所有列名都更改为小写)。

事实证明,这 8 个数据集具有不同的列——它们具有不同的列数、列名的一些变化以及不同的列顺序。例如,如上面的屏幕截图所示,在一个数据帧中,幸福分数的列名为“幸福分数”,而在其他数据帧中,它是“幸福分数”、“分数”或“阶梯分数”。

鉴于数据的混乱,直接连接这 8 个数据帧是不可行的。我们需要在连接之前进行一些预处理,我们可以使用 for 循环对它们进行批处理。

第 1 行:我们创建一个空列表 dfs。稍后我们将使用 for 循环迭代将每个数据帧附加到此列表中。

第 6-7 行:我们根据从列名中观察到的某些模式,从每个数据框中迭代并提取“国家”列和“幸福分数”列。

第 9-11 行:我们创建一个新的数据框 df1,它只有我们需要的三列——country_col、score_col 和 year_col。

第 13 行:我们使用 for 循环迭代将 8 个预处理数据帧中的每一个附加到列表 dfs 中。

第 14 行:我们为列表中的所有数据框分配相同的列名,以便在下一步需要相同的列名时将它们连接起来。

您可以通过参考 dfs[0]、dfs[1]、dfs[2] 等快速查看我们刚刚创建的每个数据帧的外观。

第 3 步:

最后,由于所有数据帧具有相同的列名和顺序,我们可以使用 pd.concat() 方法轻松连接它们。在第 1 行中,我们连接了 dfs 列表中的所有数据框,在第 2-3 行中,我们清理了“幸福分数”和“国家”列,以确保我们的数据已准备好在下一节中进行可视化。

奖励:显示全球幸福水平的动画 Choropleth 地图

在我们的数据完全准备好和清理后,让我们使用 plotly.express 创建一个显示全球幸福水平的动画等值线图。

Plotly 的一个优点是它具有自然地球数据集中定义的国家/地区的内置几何图形,并且不需要外部 GeoJSON 文件来绘制等值线图。要使用内置国家/地区几何,我们只需提供位置作为三字母 ISO 国家/地区代码。[0]

第 3-6 行:我们通过将 df_all 与具有 ISO 代码并可在 Kaggle 上下载的 df_ISO 连接来添加三个字母的 ISO 国家代码。[0]

第 9-14 行:我们使用 px.choropleth() 创建了一个动画 choropleth 贴图。位置参数采用数据集中表示 3 字母 ISO 代码的任何列。此外,我们可以通过在 animation_frame 参数中指定“年份”轻松地将动画添加到等值线地图。

第 16-22 行:我们添加地图标题并调整其字体、大小、颜色和位置。

给你!我们对多个原始杂乱数据文件进行了批处理,并将它们连接起来以创建一个可供分析和可视化的数据框。感谢您的阅读,希望您喜欢这篇文章!

数据源:

  1. Kaggle 上的“截至 2022 年的世界幸福报告”。许可证:CC0:公共领域。引文:Helliwell、John F.、Richard Layard、Jeffrey Sachs 和 Jan-Emmanuel De Neve 合编。 2020. 2020 年世界幸福报告。纽约:可持续发展解决方案网络[0][1]

2. 国家 ISO 代码 |大陆 |在 Kaggle 上标记 URL。许可证:GPL 2[0][1]

您可以通过此推荐链接注册 Medium 会员(每月 5 美元),解锁对我的作品和 Medium 其余部分的完全访问权限。通过此链接注册,我将收到您的一部分会员费,无需您额外付费。谢谢![0]

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年4月25日
下一篇 2022年4月25日

相关推荐