相关文章推荐
大力的熊猫  ·  Spring Boot ...·  1 年前    · 
聪明伶俐的肉夹馍  ·  #创作者激励# ...·  1 年前    · 

原文链接: 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