pandas DataFrame内存优化技巧:让数据处理更高效
Pandas
无疑是我们数据分析时一个不可或缺的工具,它以其强大的数据处理能力、灵活的数据结构以及易于上手的API赢得了广大数据分析师和机器学习工程师的喜爱。
然而,随着数据量的不断增长,如何高效、合理地管理内存,确保Pandas
DataFrame
在运行时不会因内存不足而崩溃,成为我们每一个人必须面对的问题。
在这个信息爆炸的时代,数据规模呈指数级增长,如何优化内存使用,不仅关乎到程序的稳定运行,更直接关系到数据处理的效率和准确性。通过本文,你将了解到一些实用的内存优化技巧,帮助你在处理大规模数据集时更加得心应手。
1. 准备数据
首先,准备一些包含各种数据类型的测试数据集。
封装一个函数(fake_data
),用来生成数据集,数据集中包含后面用到的几种字段。
import pandas as pd
import numpy as np
def fake_data(size):
"""
根据测试数据集:
age:整数类型数值
grade:有限个数的字符串
qualified:是否合格
ability:能力评估,浮点类型数值
"""
df = pd.DataFrame()
df["age"] = np.random.randint(1, 30, size)
df["grade"] = np.random.choice(
[
"一年级",
"二年级",
"三年级",
"四年级",
"五年级",
"六年级",
],
size,
)
df["qualified"] = np.random.choice(["合格", "不合格"], size)
df["ability"] = np.random.uniform(0, 1, size)
return df
2. 检测内存占用
使用上面封装的函数(fake_data
)先构造一个包含一百万条数据的DataFrame
。
df = fake_data(1_000_000)
df.head()
看看优化前的内存占用情况:
df.info()
内存占用大约 26.7MB
左右。
3. 优化内存
接下来,我们开始一步步优化DataFrame
的内存占用,
并测试每一步优化之后的内存使用情况和运行性能变化。
3.1. 优化整型数据
首先,优化整型数据的内存占用,也就是测试数据中的年龄(age
)字段。
从上面df.info()
的结果中,我们可以看出,age
的类型是int32
(也就是用32位,8个字节来存储整数)。
对于年龄来说,用不到这么大的整数,用int8
(数值范围:-128~127)来存储绰绰有余。
df["age"] = df["age"].astype("int8")
df.info()
优化之后,内存占用从26.7+ MB
减到23.8+ MB
。
3.2. 优化浮点型数据
接下来优化浮点类型数据,也就是测试数据中的能力评估值(ability
)。
测试数据中ability
的值是6位小数,类型是float64
,
转换成float16
可能会改变值,所以这里转换成float32
。
df["ability"] = df["ability"].astype("float32")
df.info()
优化之后,内存占用进一步从23.8+ MB
减到20.0+ MB
。
3.3. 优化布尔型数据
接下来,优化测试数据中的是否合格(qualified
),
这个值虽然是字符串类型,但是它的值只有两种(合格和不合格),所以可以转换成布尔类型。
df["qualified"] = df["qualified"].map({"合格": True, "不合格": False})
df.info()
优化之后,内存占用进一步从20.0+ MB
减到13.4+ MB
。
3.4. 使用category类型
最后,我们再优化剩下的字段--年级(grade
)。
这个字段也是字符串,不过它的值只有6个,虽然无法转换成布尔类型(布尔类型只有两种值True
和False
),但是它可以转换为pandas
中的 category
类型。
df["grade"] = df["grade"].astype("category")
df.info()
优化之后,内存占用进一步从13.4+ MB
减到6.7+ MB
。
4. 总结
各类字段优化之后,内存占用从刚开始的26.7+ MB
减到6.7+ MB
,优化的效果非常明显。
仅仅是数据类型的简单调整,就带来了如此之大的内存效率提升,
这也给我们带来启示,在数据分析的过程中,构造DataFrame
时,也可以根据数值的范围,特点等,
来赋予它合适的类型,不要一味简单的使用字符串,或者默认的整数(int32
),默认的浮点(float64
)等类型。
pandas DataFrame内存优化技巧:让数据处理更高效的更多相关文章
- 内存管理 & 内存优化技巧 浅析
内存管理 浅析 下列行为都会增加一个app的内存占用: 1.创建一个OC对象: 2.定义一个变量: 3.调用一个函数或者方法. 如果app占用内存过大,系统可能会强制关闭app,造成闪退现象,影响用户 ...
- github 项目搜索技巧-让你更高效精准地搜索项目
目录 github 搜索技巧 案例 普通搜 搭配技巧搜 限定词 查找某个用户或组织的项目 辅助限定词 还没搞懂的(关于 forks.mirror.issues) 排序(放的是官网的链接) 使用指南 练 ...
- redis的内存优化【转】
Redis所有的数据都在内存中,而内存又是非常宝贵的资源.对于如何优化内存使用一直是Redis用户非常关注的问题.本文让我们深入到Redis细节中,学习内存优化的技巧.分为如下几个部分: 一.redi ...
- Impala内存优化(转载)
一. 引言 Hadoop生态中的NoSQL数据分析三剑客Hive.HBase.Impala分别在海量批处理分析.大数据列式存储.实时交互式分析各有所长.尤其是Impala,自从加入Hadoop大家庭以 ...
- [转]探索 Android 内存优化方法
前言 这篇文章的内容是我回顾和再学习 Android 内存优化的过程中整理出来的,整理的目的是让我自己对 Android 内存优化相关知识的认识更全面一些,分享的目的是希望大家也能从这些知识中得到一些 ...
- Redis之内存优化
Redis所有的数据都存在内存中,当前内存虽然越来越便宜,但跟廉价的硬盘相比成本还是比较昂贵,因此如何高效利用Redis内存变得非常重要.高效利用Redis内存首先需要理解Redis内存消耗在哪里,如 ...
- SQLServer 2014 内存优化表
内存优化表是 SQLServer 2014 的新功能,它是可以将表放在内存中,这会明显提升DML性能.关于内存优化表,更多可参考两位大侠的文章:SQL Server 2014新特性探秘(1)-内存数据 ...
- 由Kaggle竞赛wiki文章流量预测引发的pandas内存优化过程分享
pandas内存优化分享 缘由 最近在做Kaggle上的wiki文章流量预测项目,这里由于个人电脑配置问题,我一直都是用的Kaggle的kernel,但是我们知道kernel的内存限制是16G,如下: ...
- IOS 内存优化和调试技巧
基础部分 1: 图片内存大小小结 a: 图片:是占用内存的大户,尤其是手机游戏图片资源众多.对图片资源在内存中占用量的计算成为J2ME游戏开发者的经常性工作,CoCoMo来解释一下如何计算图片在内存中 ...
- pandas DataFrame 数据处理常用操作
Xgboost调参: https://wuhuhu800.github.io/2018/02/28/XGboost_param_share/ https://blog.csdn.net/hx2017/ ...
随机推荐
- 微服务保护-Sentinel
1.初识Sentinel 1.1.雪崩问题及解决方案 1.1.1.雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务. 如图,如果服务提供者I发生了故障,当前的应用的部分业 ...
- powerDesigner 逆向工程 mysql 生成 PDM
1. 信息补充说明 powerDesigner 16.5 mysql 5.6 主要内容:使用powerDesigner的逆向工程,将mysql中的数据库转换成PDM文件 所需资源: powerDe ...
- C++编译器的RVO和NRVO
1.说明 我一直记得返回对象的函数在调用时会有拷贝构造动作,但是最近实际测试却和记忆有些偏差,经查询是编译的问题 RVO: return value optimization NRVO: named ...
- JQ模糊查询插件
//构造函数写法 ;(function($,window,document,undefined){//注意这里的分号必须加 //插件的全部代码 var FazzSearch = function (e ...
- Linux中国开源社区停止运营
layout: post title: "Linux 中国开源社区停止运营" tags: - "Linux" 昨天看到老王发的公众号文章,Linux中国开源社区 ...
- .NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记
2.4.3 EF Core -- 基础与配置 连接字符串 异步编程 日志 DbContext池 类和配置表 属性和列配置 并发token 索引 Entity Framework Core:https: ...
- VMware 虚拟机一键去虚拟化工具
前言: 如果你想在 VMware 虚拟机里面多开玩游戏的话,但是现在大多数网游都会检测是否虚拟机,进入游戏被检测到在虚拟机中运行,游戏可能直接闪退.所以就得对 VMware 虚拟机进行去除虚拟化. 原 ...
- JS leetcode 找到所有数组中消失的数字 题解分析
壹 ❀ 引 十天前做的一道题了,一直没整理,今天才花时间去读了官方题解思路,这道题也凸显出了算法思路的重要性,执行耗时差的真不是一点半点.题目来自448. 找到所有数组中消失的数字,题目描述如下: 给 ...
- dotnet-cnblog tool 测试案例
这是测试donet-cnblog工具是否能将正常的Typora图片转换为博客园格式 测试1:本地图片导入 测试2:QQ截图 测试3:url https://pics3.baidu.com/feed/9 ...
- NC20115 [HNOI2015]菜肴制作
题目链接 题目 题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号 ...