原文:
www.kdnuggets.com/2019/10/5-advanced-features-pandas.html
评论
Pandas 是处理数据的黄金标准库。具备加载、过滤、操作和探索数据的功能,难怪它是 数据科学家们的最爱。
我们大多数人自然会坚持使用 Pandas 的基础功能。从 CSV 文件中加载数据,过滤几个列,然后直接跳入 数据可视化。然而,Pandas 实际上包含了许多不太为人知但非常有用的函数,这些函数可以使数据处理变得更加简单和清晰。
本教程将引导你了解这些更高级的功能 — 它们的作用及如何使用。与数据一起玩得更开心!
Pandas 提供了一组用户可配置的选项和设置。这些设置是巨大的生产力提升工具,因为它们允许你根据自己的喜好精确调整 Pandas 环境。
例如,我们可以更改一些 Pandas 的显示设置,以改变显示的行和列数以及浮点数的显示精度。
上面的代码确保 Pandas 始终显示最多 10 行和 10 列,浮点值显示最多 2 位小数。这样,当我们尝试打印出一个大的 DataFrame 时,我们的终端或 Jupyter Notebook 就不会看起来一团糟!
这只是一个基本示例。除了简单的显示设置,还有很多东西可以探索。你可以查看所有选项的 官方文档。
Pandas DataFrame 的一个相对不为人知的部分是,实际上有两种不同的方法来合并它们。每种方法产生不同的结果,因此根据你的需求选择合适的方法非常重要。此外,它们包含许多参数,可以进一步自定义合并。让我们来了解一下。
拼接
拼接是合并 DataFrame 的最常见方法,可以直观地理解为“堆叠”。这种堆叠可以是水平的,也可以是垂直的。
想象一下你有一个巨大的 CSV 格式数据集。将其拆分成多个文件以便于处理是有意义的(这在大数据集的处理中很常见,称为 分片)。
当你将数据加载到 Pandas 中时,你可以将每个 CSV 的 DataFrame 垂直堆叠,以创建一个包含所有数据的大 DataFrame。例如,如果我们有 3 个分片,每个分片有 500 万行,那么在将它们垂直堆叠后,我们的最终 DataFrame 将有 1500 万行。
下面的代码展示了如何在 Pandas 中垂直拼接 DataFrames。
你可以通过根据列而不是行来拆分数据集,来做类似的操作——为每个 CSV 文件提供几个列(包含数据集的所有行)。这就像是将数据集的特征分成不同的碎片。然后你可以水平堆叠它们来组合这些列/特征。
合并
合并(Merging)更复杂但更强大,采用类似 SQL 的风格将 Pandas DataFrames 组合在一起,即通过某些共同的属性来连接 DataFrames。
假设你有两个描述你的 YouTube 频道的 DataFrames。其中一个包含用户 ID 列表以及每个用户在你的频道上花费的总时间。另一个包含类似的用户 ID 列表以及每个用户观看的视频数量。合并允许我们通过匹配用户 ID 将这两个 DataFrames 组合成一个,通过将 ID、时间和视频数量放在每个用户的单独行中。
在 Pandas 中合并两个 DataFrames 是通过merge函数完成的。你可以在下面的代码中看到它是如何工作的。left 和 right 参数指的是你希望合并的两个 DataFrames,而 on 指定了用于匹配的列。
为了更进一步模拟 SQL 连接,how 参数允许你选择要执行的 SQL 风格连接类型:内连接、外连接、左连接或右连接。要了解更多关于 SQL 连接的信息,请参见 W3Schools 教程。
有几种方法来重塑和重构 Pandas DataFrames。这些方法从简单易用到强大复杂。让我们来看看最常见的三种方法。在以下所有示例中,我们将使用这份超级英雄数据集!
转置
其中最简单的。转置将 DataFrame 的行和列互换。如果你有 5000 行和 10 列,然后转置你的 DataFrame,你将得到 10 行和 5000 列。
分组
分组(Groupby)的主要用途是根据某些键将 DataFrames 拆分成多个部分。一旦 DataFrame 被拆分成多个部分,你可以遍历并对每个部分独立应用一些操作。
例如,我们可以看到下面的代码中,我们创建了一个包含年份和得分的球员 DataFrame。然后我们进行了groupby操作,将 DataFrame 按照球员拆分成多个部分。因此,每个球员都有自己的组,显示该球员在每一年中获得的分数。
堆叠
堆叠(Stacking)将 DataFrame 转换为多层索引,即每一行具有多个子部分。这些子部分是通过 DataFrame 的列创建的,将它们压缩成多重索引。总体来说,堆叠可以看作是将列压缩成多重索引的行。
下面的例子最好地说明了这一点。
Datetime 库 是 Python 的一个重要库。无论何时处理与现实世界日期和时间信息相关的内容,它都是你首选的库。幸运的是,Pandas 也提供了使用 Datetime 对象的功能。
让我们用一个例子来说明。在下面的代码中,我们首先创建一个包含 4 列的 DataFrame:Day、Month、Year 和 data,然后按年份和月份进行排序。正如你所看到的,这样非常杂乱;我们使用了 3 列来存储日期,但实际上我们知道一个日历日期只是一个值。
我们可以通过 datetime 来整理数据。
Pandas 方便地提供了一个名为 to_datetime() 的函数,可以将多个 DataFrame 列压缩并转换为一个单一的 Datetime 对象。一旦转化为这种格式,你就可以利用 Datetime 库的所有功能。
使用 to_datetime() 函数时,你需要将所有相关列中的“日期”数据传递给它。这包括“Day”、“Month”和“Year”列。一旦我们将数据转化为 Datetime 格式,我们就不再需要其他列,只需将其删除即可。查看下面的代码,了解具体的操作方法!
映射是一个有用的技巧,有助于组织分类数据。举个例子,假设我们有一个包含数千行的大型 DataFrame,其中一列包含我们希望分类的项目。这样做可以大大简化机器学习模型的训练和数据的有效可视化。
查看下面的代码,了解我们如何将食品列表进行分类的迷你示例。
在上面的代码中,我们将列表放入了 pandas 系列中。我们还创建了一个字典,显示了我们想要的映射,将每个食品项分类为“Protein”或“Carb”。这是一个简单的示例,但如果这个系列的规模很大,比如有 1,000,000 项,那么遍历它就不再实际。
我们可以使用 Pandas 内置的 .map() 函数来以优化的方式执行映射,而不是基本的 for 循环。查看下面的代码,了解函数及其应用。
在函数中,我们首先遍历字典,创建一个新字典,其中键表示 pandas 系列中的每一个可能项,而值表示新映射项,“Protein” 或 “Carbs”。然后,我们简单地应用 Pandas 的内置映射函数来映射系列中的所有值。
查看下面的输出以查看结果!
['Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Carbs', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein', 'Carbs', 'Carbs', 'Protein', 'Protein', 'Protein']
所以就这样!这是 Pandas 的 5 个高级功能及其使用方法!
如果你渴望更多内容,不必担心!还有更多关于 Pandas 和数据科学的内容可以学习。作为推荐阅读,KDNuggets 网站 当然是这个主题的最佳资源!
相关:
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持组织的 IT 工作