一、数据类型轻量化

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相关推荐

  1. php中读取大文件实现方法详解

    php中读取大文件实现方法详解 来源:   时间:2013-09-05 19:27:01   阅读数:6186 分享到:0 [导读] 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解 ...

  2. Java高效读取大文件(转)

    Java高效读取大文件 1.概述 本教程将演示如何用Java高效地读取大文件.这篇文章是Baeldung(http://www.baeldung.com/) 上"Java--回归基础&quo ...

  3. python读取大文件-使用Python读取大文件的方法

    背景 最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法. 准备工作 ...

  4. python读取大文件目录_python简单读取大文件的方法

    python简单读取大文件的方法 更新时间:2016年07月01日 10:42:14 作者:holybin 这篇文章主要介绍了python简单读取大文件的方法,通过非常简单的方式实现对GB级别大文件的 ...

  5. Java高效读取大文件

    1.概述 本教程将演示如何用Java高效地读取大文件.这篇文章是Baeldung(http://www.baeldung.com/) 上"Java--回归基础"系列教程的一部分. ...

  6. [转载] python pandas.read_csv读取大文件

    参考链接: Python | 使用pandas.read_csv()读取csv pandas.read_csv读取较大文件方法

  7. java并发读取相同的文件_高效读取大文件,再也不用担心 OOM 了!

    最近阿粉接到一个需求,需要从文件读取数据,然后经过业务处理之后存储到数据库中.这个需求,说实话不是很难,阿粉很快完成了第一个版本. 内存读取 第一个版本,阿粉采用内存读取的方式,所有的数据首先读读取到 ...

  8. python一次性读取整个文件-使用Python读取大文件的方法

    背景 最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法. 准备工作 ...

  9. 高效读取大文件,再也不用担心 OOM 了!

    最近阿粉接到一个需求,需要从文件读取数据,然后经过业务处理之后存储到数据库中.这个需求,说实话不是很难,阿粉很快完成了第一个版本. 内存读取 第一个版本,阿粉采用内存读取的方式,所有的数据首先读读取到 ...

最新文章

  1. 数学中的向量乘积和矩阵乘积总结
  2. 需求分析与建模最佳实践_社交媒体和主题建模:如何在实践中分析帖子
  3. nosql非关系型数据库_从Datomic出发,革命性的非NoSQL数据库
  4. SQL Server安全机制–如何控制用户能够在报告中查看哪些数据
  5. sql查询时的左连接,右连接,和内连接详细解释
  6. opencv中的Mat图使用CDC显示
  7. 中兴6908的三层交换
  8. python检验文件命名_Python如何检查文件名是否为UTF8?
  9. 矩阵A的值域空间和其零空间
  10. Everything+Wox
  11. Vue解决warning Emitted value instead of an instance of Error
  12. 英语基础语法学习(B站英语电力公司)
  13. AHA Music插件:超好用的听歌识曲搜索工具
  14. 你的年龄体重身高,最好别对这款 app 撒谎
  15. 【CVPR 2021】树状决策知识蒸馏:Tree-like Decision Distillation
  16. 小程序服务器域名和业务域名的总结和配置
  17. SwiftUI小技巧之如何获取全球语言编码
  18. 分布式系统稳定性建设指南
  19. Mybatis中给pojo类设置别名需要注意的点
  20. 嵌入式Linux学习规划

热门文章

  1. Python爬虫 教程: re正则表达式解析html页面
  2. Python引用模块和查找模块路径
  3. (深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)(C/C++存储类型总结)(内存管理)
  4. 什么是滚雪球法的抽样方法?(Snowball sampling、snowballing approach)
  5. python 如何暂停程序?程序阻塞 (input()、time.sleep()、os.s*stem(“pause))
  6. Python 计算机视觉(九)—— OpenCV进行图像平滑
  7. vmstat 命令的使用
  8. mysql连接数thread_MySQL数据库负载很高连接数很多怎么处理
  9. python读取.so_Python入门-编译安装Python3教程
  10. 奥斯陆大学计算机,奥斯陆大学雅思要求