原文链接:
3 simple ways to handle large data with
Pandas
作者 | George Seif
译者 | jojoa
易上手, 文档丰富的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 可以允许我们选择想要读取的列。
把包含无用信息的列删除掉, 往往给我们节省了大量内存。
此外,我们还可以把有缺失值的行,或者是包含“NA” 的行删除掉。 通过dropna()方法可以实现:
有几个非常有用的参数,可以传给dropna():
-
how: 可选项:“any”(该行的任意一列如果出现”NA”, 删除该行)
-
“all” (只有某行所有数数据全部是”NA” 时才删除)
-
thresh: 设定某行最多包含多少个NA 时,才进行删除
-
subset: 选定某个子集,进行NA 查找
可以通过这些参数, 尤其是thresh 和 subset 两个参数可以决定某行是否被删除掉。
Pandas 在读取信息的时候,无法删除列。但是我们可以在每个chunk 上,进行上述操作。
为列设定不同的数据类型
数据科学家新手往往不会对数据类型考虑太多。 当处理数据越来越多时, 就非常有必要考虑数据类型了。
行业常用的解决方法是从数据文件中,读取数据, 然后一列列设置数据类型。 但当数据量非常大时, 我们往往担心内存空间不够用。
在CSV 文件中,例如某列是浮点数, 它往往会占据更多的存储空间。 例如, 当我们下载数据来预测股票信息时, 价格往往以32位浮点数形式存储。
但是,我们真的需要32位浮点数码? 大多数情况下, 股票价格以小数点后保留两位数据进行交易。 即便我们想看到更精确的数据, 16位浮点数已经足够了。
我们往往会在读取数据的时候, 设置数据类型,而不是保留数据原类型。 那样的话,会浪费掉部分内存。
通过read_csv() 中设置dtype参数来完成数据类型设置。还可以设置字典类型,设置该列是键, 设置某列是字典的值。
请看下面的pandas 例子:
文章到这里结束了! 希望上述三个方法可以帮你节省时间和内存。
最近接手一个任务,从一个有40亿行数据的csv文件中抽取出满足条件的某些行的数据,40亿行。。。如果直接使用
pandas
的read_csv()
方法
去
读取
这个csv文件,那服务器的内存是会吃不消的,所以就非常有必要使用chunksize去分块
处理
。现在就开始讲chunksize的一些使用。
1.本次任务的目标
红框内是时间戳,需要使用pd.to_datetime()函数去将时间戳转换为...
通过使用
Pandas
的 read_csv 函数,chunksize 参数,query 函数和 groupby 函数,您可以轻松地
读取
,过滤,分组和聚合
大数据
集。如果您是数据科学或机器学习的从业者,学习如何使用
Pandas
处理
大数据
集是非常重要的技能之一。如果您正在使用 Python,您会发现
Pandas
是一
种
非常流行的数据分析库,可以轻松
处理
大数据
集。如果您需要对
大数据
集中的数据进行分组和聚合,则可以使用
Pandas
的 groupby 函数。
import
pandas
as pd
dataset = pd.read_csv('data/training.1600000.processed.noemoticon.csv', header=None, encoding='ISO-8859-1',engine='python')
2.查看
读取
后的数据表的相关信息
2.1 数据表..
一般而言,
处理
大批量的数据,一般倾向于使用python,即方便又省力,但有时候不得不使用Java来
读取
文件里的数据,再进行
处理
。所以以下就是我
读取
文件里的数据时写的代码。使用网上已有的API,方便省时又省力。推荐网址:Hutool工具类库网址Hutool是一个小而全的Java工具类库,通过静态
方法
封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅。
1.
Pandas
是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。
2.
Pandas
名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分析)。
3.
Pandas
一个强大的分析结构化数据的工具集,基础是Numpy(提供高性能的矩阵运算)。
4.
Pandas
可以从各
种
文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。
5.
Pandas
可以.
机器学习是计算机对大量数据的分析过程,在机器学习的实际项目中,通常都需要准备数据集,数据集通常包含的数据数量是庞大的。例如,在
处理
计算机视觉领域的项目时,每一张图片都是一个单独的文件,为了提高模型训练的效果,图片数量通常会比较多,因此需要合理且高效的操作将所有的图片数据
读取
。本篇旨在介绍如何用Python对海量文件进行遍历,也是机器学习实践的第一步。.........
解决
pandas
读取
数据时内存过大的问题
在我们使用
pandas
进行数据
处理
的时候,有时候发现文件在本地明明不大,但是用
pandas
以DataFrame形式加载内存中的时候会占用非常高的内存,这是因为
pandas
的
处理
机制默认会按照最大的规格去设置数据类型。
数据类型占用内存表格
常用的数据类型范围如下所示:
dtypes 范围下限(含) 范围上限(含)
unit8 0