当前位置: 首页 > news >正文

pandas减少dataframe占用内存的若干方法

一、只获取文件需要的列,避免加载整个文件

举例:只获取A.B两列数据

df = pd.read_csv('123.csv', usecols=['A', 'B'])

二、使用更准确的数据类型,减少内存空间占用

import pandas as pd  
import numpy as np  # 假设你的CSV文件有三列,分别名为'A', 'B', 'C'  
# 并且你希望列'A'为int32类型,列'B'为int64类型,列'C'为str类型  
dtype_dict = {  'A': np.int32,  'B': np.int64,  'C': str  
}  # 使用pandas.read_csv()读取CSV文件,并指定dtype  
df = pd.read_csv('your_file.csv', dtype=dtype_dict)  # 查看结果  
print(df.dtypes)

需要注意的是,在指定了数据类型之后,不满足的数据可能会被忽略或者由指定的数据进行替换,其中数据类型越小占用空间越少,比如int32几乎比int64少用一办的空间,但是具体采用哪种数据类型,还跟数据的范围有关系,一般来说:

int32的最大值为:2147483647(2^31 - 1)。这是32位有符号整数类型能表示的最大整数值。

  • int32 范围:-2147483648到2147483647(包括边界值)。

int64的最大值为:9223372036854775807(2^63 - 1)。这是64位有符号整数类型能表示的最大整数值。

  • 范围:-9223372036854775808到9223372036854775807(包括边界值)。

三、大数进行单位换算转小数据处理

如果数据中涉及汇总,单位换算的,可以提前将数据进行单位换算,比如从字节先换算为GB,那么他的数据类型可能就可以从int64转换为int32,可以节省一大部分空间,转换类型的方法如下:

import pandas as pd  
import numpy as np  # 假设我们有一个DataFrame df,其中一列名为'A'的数据类型是int64  
df = pd.DataFrame({'A': [1, 2, 3, 2**30, -2**30]})  # 注意:这里我们包括了一个接近int32边界的值  # 检查原始数据类型  
print(df.dtypes)  # 将列'A'从int64转换为int32  
# 注意:我们先转换为NumPy数组,然后转换数据类型,最后再转换回pandas的Series  
df['A'] = df['A'].astype(np.int32)  # 再次检查数据类型  
print(df.dtypes)

需要注意的是,转换的前提是该列的值都应该小于int32的最大值,否则会报数值溢出错误。

四、数据原地替换避免复制

一般来说在dataframe中使用 = 赋值,copy()方法,groupby()方法,pd.concat()方法,reset_index()方法,.loc[].iloc[].at[]等方法进行行或列的选择时都可能会发生数据复制导致内存占用,因此在譬如drop,rename,drop_duplicates时尽量采用inplace参数对数据进行原地赋值更新,减少由=赋值带来的赋值内存占用,比如:

df.drop(labels=['A'], inplace=True)

http://www.lryc.cn/news/383680.html

相关文章:

  • Ubuntu20.04 64位 安装docker(有问题可评论沟通交流)
  • 【C++PCL】点云处理Kd树和八叉树区别
  • makefile学习过程
  • Kompas AI数据分析与预测功能对比
  • Appium+python自动化(二十五)- 那些让人抓耳挠腮、揪头发和掉头发的事 - 获取控件ID(超详解)
  • 【博士每天一篇文献-算法】Fearnet Brain-inspired model for incremental learning
  • Appium+python自动化(二十六)- 烟花一瞬,昙花一现 -Toast提示(超详解)
  • 大数据之路 读书笔记 Day1
  • 吴恩达揭秘:编程Agent如何革新软件开发行业
  • Study--Oracle-04-SQL练习
  • 目前音质最好的麦克风是哪款,一文读懂无线麦克风推荐哪些品牌好
  • Python笔记 异常、模块与包
  • spark查看日志
  • 【LeetCode】每日一题:LRU缓存
  • 记录一个Xshell使用中Xmanager...X11转发的提示问题
  • Mamba 模型
  • 30-33、SpringBoot项目部署\属性配置方式\多环境开发(一个文件)\多环境分组(多个文件)
  • 【PyQt5】一文向您详细介绍 setContentsMargins() 的作用
  • 分页查询前端对接
  • 从一万英尺外看libevent(源码刨析)
  • Linux部署SVN
  • Linux高并发服务器开发(二)系统调用函数
  • rk3568 Android 11在系统怎样执行命令获取SN号
  • PostgreSQL 性能优化与调优(六)
  • win10 安装openssl并使用openssl创建自签名证书
  • 【OpenCV 图像处理 Python版】图像处理的基本操作
  • HarmonyOS应用开发学习经验
  • LLM大语言模型应用方案之RAG检索增强生成的实现步骤。
  • 【python学习】学习python的小项目
  • java-冒泡排序 1