你应该知道的 5 大 Pandas 优化方法!
作者:互联网
你应该知道的 5 大 Pandas 优化方法!
如果我们在处理高维数据时不采用内存优化技术,事情就会变得一团糟。您不希望弹出窗口在屏幕上看到“内存错误”,对吗?因此,我们需要注意如何利用内存。
我使用以下技术来优化内存使用并加快计算速度。
可是等等。我们如何首先找出内存使用情况? 这比你想象的要简单得多。我们可以用 信息() 或者 内存使用情况() .两者的主要区别在于 info() 不显示内存使用的详细报告,而 memory_uses() 方法显示内存使用的详细视图。
现在让我们谈谈有助于优化内存使用的方法。
- 使用就地分配
- 阅读您需要的内容
- 更改列的数据类型
- 并行化您的操作
- 分块阅读!
让我们简要地讨论一下这些技术。
使用就地分配
大多数时候,我们倾向于在数据操作中使用标准赋值。我们操作数据并将该操作保存在数据帧的单独副本中,这正是标准分配的含义。看看下面的例子。
由于使用标准分配技术,两个不同的数据帧位于同一环境中,导致内存增加。直观地说,当我们决定使用 DF2(操纵数据帧)时,DF(原始数据帧)是没有用的。当您决定使用“就地分配”技术而不是标准技术时,这个问题就会得到解决。
在就地分配技术中,不会创建数据帧的多个副本,从而避免使用无用的数据帧增加内存。
阅读您需要的内容
该名称本身意味着,接受您需要的列并放弃最不感兴趣的列。有时,您可能处于拥有高维数据但您的兴趣在于某些(比如说 2 或 3)列的情况。在这种情况下,读取所有不相关的列比读取感兴趣的列会导致大量内存使用。
让我用一个例子来详细说明,假设你有很多患者的医疗数据。你的工作是计算 BMI。您的数据集是高维的(想想 3M 行和 300 列)。但您只需要患者姓名、身高和体重等信息。而已。因此,建议阅读您需要的内容,而不是阅读整个数据。
更改列的数据类型
我们都知道 pandas 是如何分配数据类型的。默认情况下,pandas 将最高内存数据类型分配给列。但问题是我们是否每次都需要拥有最高的内存类型?让我们来了解一下。
检查数字列:
老实说,您不需要每次都使用 int64 或 float64 数据类型。请参阅下表以了解我为什么要对您说这些。
This range is applicable for numerical columns
正如我们已经讨论过的,当你有一个 int 或 float 列 默认情况下,pandas 将分配一个 int64 或 float64 数据类型。但是我们需要检查列并找到 最低限度 和 最大 整数列的值来决定 范围 .一旦我们有了范围,我们就可以识别并指定正确的数据类型。
This table shows the % of reduction of the memory after applying the optimized datatype.
检查对象列:
除了数字(int 或 float)之外,您还会看到另一种最重要的数据类型,称为“对象”。这种数据类型表示分类数据,它具有一些重复的唯一值。我们可以借助 astype 方法将“object”数据类型转换为“category”。
我一般使用下面的逻辑来优化分类列。
如果 (unique_value (of Column) / Total Value (of column) < 0.5):
data[col] = data[col].astype('category')
查看上表,name 列的唯一值比 Cabin 或 Embarked 多,因此根据我们的标准,如果唯一值与总值之间的比率小于 50%,则将对其进行优化。在上述情况下,名称列不符合条件(这很明显!),因此不会发生优化。
并行化您的操作
你有没有想过并行执行程序?您的笔记本电脑或系统有多个内核。我们不要让他们闲着。让我们在 pandarallel 的帮助下使用多核功能来让它们工作。
笔记 :- Pandarallel 是 Dask 的替代品
首先,您需要安装名为 Pandarallel 的库。
点安装 pandarallel
让我向您展示执行方面的区别 → 有和没有并行化!
这是没有并行化的:
这是并行化:
笔记:- 通过只修改一行代码,它提供了一种快速解决方案,可以在所有 CPU 上并行化 Pandas 操作。此外,还会显示进度条。
让我向您展示您需要如何进行哪些更改才能利用 Pandarallel 的功能。
https://github.com/nalepae/pandarallel
分块阅读!
有时您会面对高维数据。如果您无法首先读取内存中的数据,则上述所有其他技术都将毫无用处。
关于 Pandas 的一件有趣的事情是序列化。 Pandas 一次按行顺序读取数据。我们可以利用这一点并命令 pandas 按块大小读取数据。
我们可以使用以下 python 代码轻松实现这一点 -
请注意,每个块都是数据帧。您可以添加 type(chunk_data) 来检查数据框的类型。
脚注
这些是我在项目中通常采用的优化内存的方法。这对处理高维数据的过程有很大影响。
上面提到的优化内存的微妙方法本质上并不详尽。可能有很多方法可以增强 pandas 的内存优化。我将在以后的更新中添加这些。
随时了解我发布的所有内容 -
更多内容在草稿中,将准备发布。在那之前,请继续关注。
标签:方法,数据类型,我们,优化,内存,使用,数据,Pandas 来源: https://www.cnblogs.com/amboke/p/16685470.html