pandas高效读取大文件(csv)方法之-parquet
一、数据类型轻量化
def reduce_df_memory(df):""" iterate through all the columns of a dataframe and modify the data typeto reduce memory usage. """start_mem = df.memory_usage().sum() / 1024 ** 2print('Memory usage of dataframe is {:.2f} MB'.format(start_mem))for col in df.columns:col_type = df[col].dtypeif col_type != object:c_min = df[col].min()c_max = df[col].max()if str(col_type)[:3] == 'int':if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:df[col] = df[col].astype(np.int8)elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:df[col] = df[col].astype(np.int16)elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:df[col] = df[col].astype(np.int32)elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:df[col] = df[col].astype(np.int64) else:if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:df[col] = df[col].astype(np.float16)elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:df[col] = df[col].astype(np.float32)else:df[col] = df[col].astype(np.float64)end_mem = df.memory_usage().sum() / 1024**2print('Memory usage after optimization is: {:.2f} MB'.format(end_mem))print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) / start_mem))return df
分块读取
一次性加载会出现内存溢出,24G内存都不够
chunk_iter = pd.read_csv('train.csv',chunksize=100000)
train_data = pd.DataFrame()
num = 0
for chunk in chunk_iter:tmp_df = reduce_df_memory(chunk)train_data = pd.concat([train_data, tmp_df])
如果提前知晓数据类型
data_types_dict = {'time_id': 'int32','investment_id': 'int16',"target": 'float32',
}features = [f'f_{i}' for i in range(300)]for f in features:data_types_dict[f] = 'float32'target = 'target'
train_data = pd.read_csv(f'{root_path}/data/train.csv',
# nrows=5 * 10 ** 4, usecols=data_types_dict.keys(), dtype=data_types_dict)
二、存储数据类型转换
上述数据转换成CSV,内存从18G缩小到7G左右,仍然较大,且每次加载CSV都会需要5分钟左右;所以将CSV类型转换成parquet可以变得更快,更小;
(parquet存储不支持float16数据类型, int8,所以第一步数据类型轻量化中需要注意数据类型)
train_data.to_parquet(f'{root_path}/data/train.parquet')
pd.read_parquet(f'{root_path}/data/train.parquet')
而且加载速度非常快,只需要14.4s
结论:
1、由于pandas加载csv文件默认数据格式是int64,float64等类型,非常吃内存
2、parquet高效的压缩编码,用于降低存储成本
三、parquet高效的读取能力,用于支撑快速查询
问题1:pickle与之相比,速度会怎么样呢?
实验证明:加载速度Pickle(2s)速度是parquet(29s)的10倍;文件大小是一样的;
pandas高效读取大文件(csv)方法之-parquet相关推荐
- php中读取大文件实现方法详解
php中读取大文件实现方法详解 来源: 时间:2013-09-05 19:27:01 阅读数:6186 分享到:0 [导读] 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解 ...
- Java高效读取大文件(转)
Java高效读取大文件 1.概述 本教程将演示如何用Java高效地读取大文件.这篇文章是Baeldung(http://www.baeldung.com/) 上"Java--回归基础&quo ...
- python读取大文件-使用Python读取大文件的方法
背景 最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法. 准备工作 ...
- python读取大文件目录_python简单读取大文件的方法
python简单读取大文件的方法 更新时间:2016年07月01日 10:42:14 作者:holybin 这篇文章主要介绍了python简单读取大文件的方法,通过非常简单的方式实现对GB级别大文件的 ...
- Java高效读取大文件
1.概述 本教程将演示如何用Java高效地读取大文件.这篇文章是Baeldung(http://www.baeldung.com/) 上"Java--回归基础"系列教程的一部分. ...
- [转载] python pandas.read_csv读取大文件
参考链接: Python | 使用pandas.read_csv()读取csv pandas.read_csv读取较大文件方法
- java并发读取相同的文件_高效读取大文件,再也不用担心 OOM 了!
最近阿粉接到一个需求,需要从文件读取数据,然后经过业务处理之后存储到数据库中.这个需求,说实话不是很难,阿粉很快完成了第一个版本. 内存读取 第一个版本,阿粉采用内存读取的方式,所有的数据首先读读取到 ...
- python一次性读取整个文件-使用Python读取大文件的方法
背景 最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法. 准备工作 ...
- 高效读取大文件,再也不用担心 OOM 了!
最近阿粉接到一个需求,需要从文件读取数据,然后经过业务处理之后存储到数据库中.这个需求,说实话不是很难,阿粉很快完成了第一个版本. 内存读取 第一个版本,阿粉采用内存读取的方式,所有的数据首先读读取到 ...
最新文章
- 数学中的向量乘积和矩阵乘积总结
- 需求分析与建模最佳实践_社交媒体和主题建模:如何在实践中分析帖子
- nosql非关系型数据库_从Datomic出发,革命性的非NoSQL数据库
- SQL Server安全机制–如何控制用户能够在报告中查看哪些数据
- sql查询时的左连接,右连接,和内连接详细解释
- opencv中的Mat图使用CDC显示
- 中兴6908的三层交换
- python检验文件命名_Python如何检查文件名是否为UTF8?
- 矩阵A的值域空间和其零空间
- Everything+Wox
- Vue解决warning Emitted value instead of an instance of Error
- 英语基础语法学习(B站英语电力公司)
- AHA Music插件:超好用的听歌识曲搜索工具
- 你的年龄体重身高,最好别对这款 app 撒谎
- 【CVPR 2021】树状决策知识蒸馏:Tree-like Decision Distillation
- 小程序服务器域名和业务域名的总结和配置
- SwiftUI小技巧之如何获取全球语言编码
- 分布式系统稳定性建设指南
- Mybatis中给pojo类设置别名需要注意的点
- 嵌入式Linux学习规划
热门文章
- Python爬虫 教程: re正则表达式解析html页面
- Python引用模块和查找模块路径
- (深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)(C/C++存储类型总结)(内存管理)
- 什么是滚雪球法的抽样方法?(Snowball sampling、snowballing approach)
- python 如何暂停程序?程序阻塞 (input()、time.sleep()、os.s*stem(“pause))
- Python 计算机视觉(九)—— OpenCV进行图像平滑
- vmstat 命令的使用
- mysql连接数thread_MySQL数据库负载很高连接数很多怎么处理
- python读取.so_Python入门-编译安装Python3教程
- 奥斯陆大学计算机,奥斯陆大学雅思要求