数据预处理pandas pd.json_normalize占用内存过大优化

问题描述

从ES下载数据,数据格式为json,然后由pandas进行解析,json中的嵌套字段会进行展开作为列名(由于维度初期无法预测,所以根据数据有啥列就使用啥列,这是最方便的点),变成表格,方面了后续的处理,但在使用过程却发现原本6.xG的数据量在解析,预处理时候会变成60多G,甚至80G的内存占用,资源难以满足

解决

为了方便测试,使用了一个300MB大小的数据进行测试
1.为什么原本的300MB数据量会占用2G内存呢,仅仅下面一个操作

df = pd.json_normalize(datas)

思考:
(1)python是面向全对象语言,所以里面每一个数值都会是对象,这个对象很大
(2)数据集合json中的指标字段并不对齐,例如datas = [{field1:100},{“field1”:90,“field2”:12}],既然pandas是表格,总要填充
验证思考1
查询pd对象,果然用大的对象来存储,数据表中共有2732列,13列是等文本数据对应object,2675为float64,44列为int64,然而pd.json_normalize方法没有设置字段类型

print(df.info())
------------------------------------
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100000 entries, 0 to 99999
Columns: 2732 entries, feild1 to feild2
dtypes: float64(2675), int64(44), object(13)
memory usage: 2.0+ GB

在这里插入图片描述
验证思考2
其中一个json有新的字段score,发现增加24个字节,说明每条8字节,做了填充

a1 = json.loads('{"name":"zhangsan","age":12}')
a2 = json.loads('{"name":"zhangsan","age":12}')
a3 = json.loads('{"name":"zhangsan","age":12}')
aa = list()
aa.append(a1)
aa.append(a2)
aa.append(a3)
df = pd.json_normalize(aa)
print(df.info())
---------------------------
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):#   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 0   name    3 non-null      object1   age     3 non-null      int64 
dtypes: int64(1), object(1)
memory usage: 176.0+ bytes
a1 = json.loads('{"name":"zhangsan","age":12}')
a2 = json.loads('{"name":"zhangsan","age":12}')
a3 = json.loads('{"name":"zhangsan","age":12,"scroe":100}')
print(df.info())
---------------------------
memory usage: 200.0+ bytes

解决问题:
(1)如果原始datas数据量太大,那么只能使用pd.json_normalize分批读取后保存csv,(后面合并的时候可能会涉及拼接,这里不展开)
(2)读取csv,指定字段和字段类型,例如读取浮点类型的字段,这里单精度float32就可以啦

pd.read_csv(path, usecols=["浮点列1","浮点列2"], dtype=np.float32)

2.可能中间过程还会涉及拆分训练集,验证集,标准化等,还可以使用del先释放不需要的内存(注意del的对象要确保无引用,否则del无效)

train_x, valid_x, train_y, valid_y = train_test_split(datas, y_index, y, test_size=0.3, random_state=42)
del datas #确保datas无其他引用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/153382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑开不了机怎么办?三招帮你成功解决!

电脑是我们日常工作和生活的重要工具&#xff0c;但有时候它们也会出现开机问题。当电脑无法启动时&#xff0c;可能会让人感到焦虑&#xff0c;电脑开不了机怎么办&#xff1f;不必担心&#xff0c;通常有多种方法可以解决这些问题。本文将介绍三种常见的方法&#xff0c;以帮…

【广州华锐互动】VR虚拟现实技术助力太空探险:穿越时空,探索宇宙奥秘

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐走进我们的生活。在教育领域&#xff0c;VR技术的应用也日益广泛&#xff0c;为学生提供了更加生动、直观的学习体验。本文将以利用VR开展太空探险学习为主题&#xff0c;探讨如何将这一先进技术…

提升办公效率,畅享多功能办公笔记软件Notion for Mac

在现代办公环境中&#xff0c;高效的笔记软件对于提高工作效率至关重要。而Notion for Mac作为一款全能的办公笔记软件&#xff0c;将成为你事业成功的得力助手。 Notion for Mac以其多功能和灵活性而脱颖而出。无论你是需要记录会议笔记、管理项目任务、制定流程指南&#xf…

基于springboot实现冬奥会科普平台系统【项目源码+论文说明】计算机毕业设计

基于SpringBoot实现冬奥会科普平台系统演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理平台应运而生&…

linux备份系统盘

免安装linux 系统 可以用来, 急救 https://www.linuxliteos.com/download.php 查看 进程 io 情况 # 查看 进程 id ps -aux | grep rsync | grep -v grep# 查看 进程 打开的 文件 描述符 lsof -p id# 查看 进程 io 性能 iostat -xm 1将 块设备 压缩至 文件 To save space…

图像的傅里叶变换

目录 ​编辑 傅里叶基础 傅里叶基础numpy实现 逆傅里叶numpy实现 频域的高通滤波 傅里叶OpenCV实现 傅里叶OpenCV逆变换实现 频域的低通滤波 傅里叶变换有什么应用场景 傅里叶变换matlab实现 傅里叶基础 法国数学家吉恩巴普提斯特约瑟夫傅里叶被世人铭记的最大的贡献…

llvm源码windows编译

1.克隆llvm源码: git clone --config core.autocrlf=false https://github.com/llvm/llvm-project.git 2.创建build文件夹并生成makefile 生成前置条件: cmake ,ninja,python3要先安装 cmake -S llvm -B build -G Ninja -DCMAKE_BUILD_TYPE=Release 生成成功 3.编译 进…

图论 2023.11.20

次短路 P2829 大逃离 题意&#xff1a;给定一个无向图&#xff0c;入口1&#xff0c;出口n,求第二短路的值 一个节点所直接连接的地方小于k个&#xff08;起点和终点除外&#xff09;&#xff0c;那么他就不敢进去。 n<5000&#xff0c;m<100000 思路&#xff1a;次短路…

Pytorch np.arange函数

一、np.arange函数 NumPy中的arange函数是一种类似于Python内置的range函数的函数&#xff0c;不过arange函数返回的是一个数组&#xff0c;而不是列表。在NumPy中非常常用的函数之一。 import numpy as np arr np.arange(5) print(arr)输出结果为&#xff1a;[0 1 2 3 4] …

初刷leetcode题目(7)——数据结构与算法

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

sql添加索引

1.基础使用 1.普通索引 添加INDEX ALTER TABLE table_name ADD INDEX index_name ( column )下面演示下给user表的name字段添加一个索引2.主键索引 添加PRIMARY KEY ALTER TABLE table_name ADD PRIMARY KEY ( column )3.唯一索引 添加UNIQUE ALTER TABLE table_name ADD UNIQ…

【书籍篇】Git 学习指南(一)基础概念及入门

Git 学习指南 第一部分&#xff08;一&#xff09;基础概念及入门 一. 基本概念1.1 分布式版本控制1.1.1 集中式版本控制系统1.1.2 分布式版本控制系统1.1.3 特型版本库 1.2 版本库&#xff0c;分布式工作的基础所在1.2.1 散列值 1.3 分支的创建与合并1.3.1 分支的其他操作 二.…

UE 调整材质UV贴图长宽比例

首先&#xff0c;为什么要先减去0.5呢&#xff0c;因为缩放的贴图中心在0,0原点&#xff0c;以这个点缩放效果是这样&#xff1a; 它缩放的图案不会在正中间&#xff0c;因为是以0,0点进行缩放的 以这个图的箭头去缩放图片的&#xff0c;所以不能使得缩放后的图片放在正中心 那…

【机器学习】038_梯度消失、梯度爆炸

一、原因 神经网络梯度 假设现在有一个 层的神经网络&#xff0c;每层的输出为一个对输入作 变换的函数结果 用 来表示第 层的输出&#xff0c;那么有下列公式&#xff1a; 链式法则计算损失 关于某一层某个参数 的梯度&#xff1a; 注意到&#xff0c; 为向量&am…

NX二次开发UF_CAM_ask_post_template_name 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;里海NX二次开发3000例专栏 UF_CAM_ask_post_template_name Defined in: uf_cam.h int UF_CAM_ask_post_template_name(const char * * post_template_filename ) overview 概述 This function provides the name of the file…

git 提交成了LFS格式,如何恢复

平常习惯使用sourceTree提交代码&#xff0c;某次打开时弹出了一个【是否要使用LFS提交】的确认弹窗&#xff0c;当时不知道LFS是什么就点了确认&#xff0c;后续提交时代码全变成了这个样子 因为是初始化的项目首次提交&#xff0c;将近四百个文件全被格式化成了这个样子&…

利用ETLCloud自动化流程实现业务系统数据快速同步至数仓

现代企业有不少都完成了数字化的转型&#xff0c;而还未转型的企业或商铺也有进行数字化转型的趋势&#xff0c;由此可见&#xff0c;数据已经成为企业决策的重要依据。企业需要先获取数据&#xff0c;将业务系统数据同步至数仓进行整合&#xff0c;然后再进行数据分析。为了更…

Vatee万腾外汇市场新力量:vatee科技决策力

在当今数字化时代&#xff0c;Vatee万腾崭露头角&#xff0c;以其强大的科技决策力进军外汇市场&#xff0c;成为该领域的新力量。这一新动向将不仅塑造外汇市场的未来&#xff0c;也展现Vatee科技决策力在金融领域的引领作用。 Vatee万腾带着先进的科技决策力进入外汇市场&…

Java格式化类Format

文章目录 Format介绍Format方法- format&#xff08;格式化&#xff09;- parseObject&#xff08;解析&#xff09; 格式化分类日期时间格式化1. DateFormat常用方法getInstancegetDateInstancegetTimeInstancegetDateTimeInstance 方法入参styleLocale 2. SimpleDateFormat常…

Redis设计与实现-数据结构(建设进度15%)

Redis数据结构 引言数据结构stringSDS数据结构原生string的不足 hash 本博客基于《Redis设计与实现》进行整理和补充&#xff0c;该书依赖于Redis 3.0版本&#xff0c;但是Redis6.0版本在一些底层实现上仍然没有明显的变动&#xff0c;因此本文将在该书的基础上&#xff0c;对于…