pandas分批读取大数据集教程


Posted in Python onJune 06, 2020

如果你的电脑内存较小那么想在本地做一些事情是很有局限性的(哭丧脸),比如想拿一个kaggle上面的竞赛来练练手,你会发现多数训练数据集都是大几G或者几十G的,自己那小破电脑根本跑不起来。行,你有8000w条样本你牛逼,我就取400w条出来跑跑总行了吧(狡滑脸)。

下图是2015年kaggle上一个CTR预估比赛的数据集:

pandas分批读取大数据集教程

看到train了吧,原始数据集6个G,特征工程后得多大?那我就取400w出来train。为了节省时间和完整介绍分批读入数据的功能,这里以test数据集为例演示。其实就是使用pandas读取数据集时加入参数chunksize。

pandas分批读取大数据集教程

可以通过设置chunksize大小分批读入,也可以设置iterator=True后通过get_chunk选取任意行。

当然将分批读入的数据合并后就是整个数据集了。

pandas分批读取大数据集教程

ok了!

补充知识:用Pandas 处理大数据的3种超级方法

易上手, 文档丰富的Pandas 已经成为时下最火的数据处理库。此外,Pandas数据处理能力也一流。

其实无论你使用什么库,大量的数据处理起来往往回遇到新的挑战。

数据处理时,往往会遇到没有足够内存(RAM)这个硬件问题。 企业往往需要能够存够数百, 乃至数千 的GB 数据。

即便你的计算机恰好有足够的内存来存储这些数据, 但是读取数据到硬盘依旧非常耗时。

别担心! Pandas 数据库会帮我们摆脱这种困境。 这篇文章包含3种方法来减少数据大小,并且加快数据读取速度。 我用这些方法,把超过100GB 的数据, 压缩到了64GB 甚至32GB 的内存大小。

快来看看这三个妙招吧。

数据分块

csv 格式是一种易储存, 易更改并且用户易读取的格式。 pandas 有read_csv ()方法来上传数据,存储为CSV 格式。当遇到CSV 文件过大,导致内存不足的问题该怎么办呢?试试强大的pandas 工具吧!我们先把整个文件拆分成小块。这里,我们把拆分的小块称为chunk。

一个chunk 就是我们数据的一个小组。 Chunk 的大小主要依据我们内存的大小,自行决定。

过程如下:

1.读取一块数据。

2.分析数据。

3.保存该块数据的分析结果。

4.重复1-3步骤,直到所有chunk 分析完毕。

5.把所有的chunk 合并在一起。

我们可以通过read_csv()方法Chunksize来完成上述步骤。 Chunksize是指pandas 一次能读取到多少行csv文件。这个当然也是建立在RAM 内存容量的基础上。
假如我们认为数据呈现高斯分布时, 我们可以在一个chunk 上, 进行数据处理和视觉化, 这样会提高准确率。

当数据稍微复杂时, 例如呈现泊松分布时, 我们最好能一块块筛选,然后把每一小块整合在一起。 然后再进行分析。很多时候, 我们往往删除太多的不相关列,或者删除有值行。 我们可以在每个chunk 上,删除不相关数据, 然后再把数据整合在一起,最后再进行数据分析。

代码如下:

pandas分批读取大数据集教程

删除数据

有时候, 我们一眼就能看到需要分析的列。事实上, 通常名字,账号等列,我们是不做分析的。

读取数据前, 先跳过这些无用的列,可以帮我们节省很多内存。 Pandas 可以允许我们选择想要读取的列。

pandas分批读取大数据集教程

把包含无用信息的列删除掉, 往往给我们节省了大量内存。

此外,我们还可以把有缺失值的行,或者是包含“NA” 的行删除掉。 通过dropna()方法可以实现:

pandas分批读取大数据集教程

有几个非常有用的参数,可以传给dropna():

how: 可选项:“any”(该行的任意一列如果出现”NA”, 删除该行)

“all” (只有某行所有数数据全部是”NA” 时才删除)

thresh: 设定某行最多包含多少个NA 时,才进行删除

subset: 选定某个子集,进行NA 查找

可以通过这些参数, 尤其是thresh 和 subset 两个参数可以决定某行是否被删除掉。

Pandas 在读取信息的时候,无法删除列。但是我们可以在每个chunk 上,进行上述操作。

为列设定不同的数据类型

数据科学家新手往往不会对数据类型考虑太多。 当处理数据越来越多时, 就非常有必要考虑数据类型了。

行业常用的解决方法是从数据文件中,读取数据, 然后一列列设置数据类型。 但当数据量非常大时, 我们往往担心内存空间不够用。

在CSV 文件中,例如某列是浮点数, 它往往会占据更多的存储空间。 例如, 当我们下载数据来预测股票信息时, 价格往往以32位浮点数形式存储。

但是,我们真的需要32位浮点数码? 大多数情况下, 股票价格以小数点后保留两位数据进行交易。 即便我们想看到更精确的数据, 16位浮点数已经足够了。

我们往往会在读取数据的时候, 设置数据类型,而不是保留数据原类型。 那样的话,会浪费掉部分内存。

通过read_csv() 中设置dtype参数来完成数据类型设置。还可以设置字典类型,设置该列是键, 设置某列是字典的值。

请看下面的pandas 例子:

pandas分批读取大数据集教程

文章到这里结束了! 希望上述三个方法可以帮你节省时间和内存。

以上这篇pandas分批读取大数据集教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
深入理解Python中命名空间的查找规则LEGB
Aug 06 Python
利用Python中的pandas库对cdn日志进行分析详解
Mar 07 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
Jul 06 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
Sanic框架Cookies操作示例
Jul 17 Python
python3.5基于TCP实现文件传输
Mar 20 Python
OpenCV+Python识别车牌和字符分割的实现
Jan 31 Python
Python实现DDos攻击实例详解
Feb 02 Python
Pandas读取并修改excel的示例代码
Feb 17 Python
openCV提取图像中的矩形区域
Jul 21 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
Aug 05 Python
Python如何实现机器人聊天
Sep 10 Python
python使用hdfs3模块对hdfs进行操作详解
Jun 06 #Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
Jun 06 #Python
python访问hdfs的操作
Jun 06 #Python
Python API 操作Hadoop hdfs详解
Jun 06 #Python
python读取hdfs上的parquet文件方式
Jun 06 #Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 #Python
完美解决python针对hdfs上传和下载的问题
Jun 05 #Python
You might like
php提示Warning:mysql_fetch_array() expects的解决方法
2014/12/16 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
2018/09/18 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
在Python中实现贪婪排名算法的教程
2015/04/17 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
详解python datetime模块
2020/08/17 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
教育系毕业生中文求职信范文
2013/10/06 职场文书
超市采购员岗位职责
2014/02/01 职场文书
企业管理毕业生求职信范文
2014/03/07 职场文书
大一工商管理职业生涯规划:有梦最美,行动相随
2014/09/18 职场文书
2014年房地产个人工作总结
2014/12/20 职场文书
教育实习指导教师评语
2014/12/31 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
婚庆主持词大全
2015/06/30 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书
初中班主任工作随笔
2015/08/15 职场文书
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android
Python实现猜拳与猜数字游戏的方法详解
2022/04/06 Python