将33G数据集转为3G,这个案例值得学习

文章介绍了在处理大规模数据集时,如何避免系统卡顿崩溃。通过使用pandas的chunksize参数分块读取CSV文件,避免一次性加载全部数据。在每个块中,将float64类型转换为float16以减少内存使用,然后拼接和优化所有块,最终保存为轻量级的feather格式文件,实现高效的数据存储和处理。
摘要由CSDN通过智能技术生成

加粗样式几年前在StackOverflow上看到的一个问题,现在找不到了,当时记录了一点在草稿箱中

是个很好的学习案例,对于需要注意的地方也会进行提示

当加载数据集变大时,我们的系统可能会卡顿崩掉,这个案例是将33G数据压缩到了3.7G

依赖库

import pandas as pd
import gc
import glob
import os

pandas是常用的数据分析库之一,用于数据处理等

垃圾收集器 (GC) ,在处理大量数据时从内存中释放空间,从内存中删除不需要的东西

glob 库使用系统中的模式提取特定文件

os 库与操作系统交互并处理文件及其路径

分块(chunk)

chunk_size = 500000
num = 1
for chunk in pd.read_csv('test_data.csv', chunksize = chunk_size):
    chunk.to_csv('chunk' + str(num) + '.csv', index = False)
    gc.collect()
    num += 1

这里不能像处理小规模数据那样直接加载数据文件,会导致崩溃

可以使用“chunksize”拆分文件,此处为每个块选择50万行,可根据每个人任务&机器性能来定

这里‘gc.collect()’的使用非常巧妙且至关重要,可以避免内存错误

运行后得到若干个chunk
在这里插入图片描述

然后查看是否可以读取chunk并检查信息

在这里插入图片描述
从打印输出可以看出,190列中有185列是float64类型,这也是pandas 总是将 float 数据加载为 float64 的常见问题之一

通过优化该部分,可以减少数据集中的一部分内存

所以将其转换为‘float16’或‘float32’以最小化内存使用,这里将其转换为“float16”

敲黑板了,请搞清楚你数据集这样转换是否会丢失数据精度!!!
在这里插入图片描述
可以看到转换为“float16”后,内存使用量大大减少
在这里插入图片描述

优化和拼接chunk文件

之前读取并优化了单个chunk文件,现在将拼接所有 23 个chunk文件并优化内存

在这里插入图片描述

使用‘glob’和‘os’ 方法访问到相应的文件,即(“*.csv”)

然后通过迭代读取所有文件,在迭代过程中将其从‘float64’转换为‘float16’并保存在列表中

紧接着将所有文件拼接保存在一个新的dataframe中

在这里插入图片描述

在dataframe中可以快速进行数据处理

将dataframe转换为文件格式

优化后的dataframe可以转换成任何文件格式

推荐feather,因为较为轻量,如下所示

在这里插入图片描述
在这里插入图片描述

读取优化后的文件

再次读取优化后的feather格式文件就不会出现任何内存错误

可以正常进行数据处理操作

在这里插入图片描述
更多干货尽在公众号【啥都会一点的研究生】

将JSON数据集转换成TSV(Tab Separated Values,制表符分隔值)数据集通常涉及两步:解析JSON文件并将其内容拆分成键值对,然后将这些对按照TSV的格式(每行一个键值对,用制表符分隔)写入新的文本文件。 以下是这个过程的一个简要概述: 1. **解析JSON**: 使用适合的语言的库,比如Python的`json`模块或JavaScript的`JSON.parse()`函数,读取JSON文件并将其内容解析成JSON对象或数组。每个JSON对象对应一条记录,而数组里的每个元素也是独立的记录。 2. **处理数据**: 遍历每个解析后的记录,取出需要转换为TSV的字段。对于嵌套的对象或数组,可能需要递归提取。 3. **构建TSV行**: 对于每一项,创建一个新的字符串,包含所有键和对应的值,并用制表符`\t`作为字段分隔符。例如,如果键名为"name"和"value",那么一行可能是:"name\t"value。 4. **保存为TSV**: 最后,将这些行写入新的TSV文件中,每行代表原始JSON中的一个数据记录。可以使用文件对象的`write()`方法,每次写入一行数据。 如果你需要具体的代码示例,这里是一个简单的Python脚本示例: ```python import json # 解析JSON文件 with open('input.json', 'r') as f: data = json.load(f) # 创建TSV文件并写入 with open('output.tsv', 'w') as out_file: for item in data: keys = item.keys() line = '\t'.join([str(key) + ':' + str(item[key]) for key in keys]) out_file.write(line + '\n') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啥都生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值