ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

你应该知道的 5 大 Pandas 优化方法!

2022-09-12 09:32:49  阅读:271  来源: 互联网

标签:方法 数据类型 我们 优化 内存 使用 数据 Pandas


你应该知道的 5 大 Pandas 优化方法!

如果我们在处理高维数据时不采用内存优化技术,事情就会变得一团糟。您不希望弹出窗口在屏幕上看到“内存错误”,对吗?因此,我们需要注意如何利用内存。

我使用以下技术来优化内存使用并加快计算速度。

可是等等。我们如何首先找出内存使用情况? 这比你想象的要简单得多。我们可以用 信息() 或者 内存使用情况() .两者的主要区别在于 info() 不显示内存使用的详细报告,而 memory_uses() 方法显示内存使用的详细视图。

现在让我们谈谈有助于优化内存使用的方法。

  1. 使用就地分配
  2. 阅读您需要的内容
  3. 更改列的数据类型
  4. 并行化您的操作
  5. 分块阅读!

让我们简要地讨论一下这些技术。

使用就地分配

大多数时候,我们倾向于在数据操作中使用标准赋值。我们操作数据并将该操作保存在数据帧的单独副本中,这正是标准分配的含义。看看下面的例子。

由于使用标准分配技术,两个不同的数据帧位于同一环境中,导致内存增加。直观地说,当我们决定使用 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[[email protected]]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有