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爬虫
Dec 25 Python
详解Python的Django框架中的模版相关知识
Jul 15 Python
Python中列表、字典、元组数据结构的简单学习笔记
Mar 20 Python
详谈Numpy中数组重塑、合并与拆分方法
Apr 17 Python
numpy 计算两个数组重复程度的方法
Nov 07 Python
python统计中文字符数量的两种方法
Jan 31 Python
python找出一个列表中相同元素的多个索引实例
Jun 11 Python
Python自动采集微信联系人的实现示例
Feb 28 Python
Python基于Faker假数据构造库
Nov 30 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
Dec 04 Python
python中Matplotlib绘制直线的实例代码
Jul 04 Python
python ConfigParser库的使用及遇到的坑
Feb 12 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 smarty 二级分类代码和模版循环例子
2011/06/16 PHP
thinkphp的CURD和查询方式介绍
2013/12/19 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
php常用图片处理类
2016/03/16 PHP
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
总结几道关于Node.js的面试问题
2017/01/11 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
原生js中ajax访问的实例详解
2017/09/19 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
python中的代码编码格式转换问题
2015/06/10 Python
Python下载指定页面上图片的方法
2016/05/12 Python
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
Python 继承,重写,super()调用父类方法操作示例
2019/09/29 Python
伊芙丽官方旗舰店:中国淑女一线品牌
2017/12/01 全球购物
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
优秀的毕业生的自我评价
2013/12/12 职场文书
境外导游求职信
2014/02/27 职场文书
早会主持词
2014/03/17 职场文书
学校欢迎标语
2014/06/18 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP