3个简单操作让你 使用Pandas解决内存问题

Pandas已经成为了最受数据科学领域欢迎的一个工具。它不仅使用简单、文档丰富,而且能力威力强大。然而,不管多少人使用Pandas,它在处理较大数据集的时候依然需要我们仔细把握。当我们的计算机RAM没办法在内存中存储所有的数据,我们就面临了硬件方面的障碍。一般大型企业存储的数据都会超过100G甚至1000G。即使你很有钱,去买了一个足够大内存的计算机,但是读取所有数据到内存中也是一个很慢的过程。

但Pandas又一次解决了我们的这个问题,这篇文章将教你3个技巧,帮助你在读取较大数据集的过程中,尽量节省内存和时间。我已经用这些方法,在我32G的计算机上读取了超过100G的数据量。

切分数据

因为易写和易度的原因,CSV格式存储数据非常方便,

pandas read_csv()可以用来读取CSV文件,但是,当我们的CSV文件非常大,以至于在读取会超出我们的内存,这个时候我们应该怎么办?Pandas为我们提供了一个简单易用的解决办法,我们用分块读取的方法代替一次性全部读取操作,每一块都是整个数据集的一部分,我们可以根据实际的业务需要来确定我们分块的大小,还要跟我我们计算机的RAM情况来具体操作。具体过程如下:

  1. 分块读取

  2. 分块处理

  3. 分块保存

  4. 重复1——3,直到获取所有分块结果

  5. 合并分块结果

我们可以使用read_csv中的chunksize参数,返回一个可迭代的对象,使用for循环做数据处理操作。如果我们的数据集非常复杂,具有非常多的维度,实际上在很多时候我们可以删除一些无关紧要的列,其次我们还可以删除很大一部分缺失值数据,进过这些操作之后我们的数据量就有了很大程度的减少,更加利于我们之后的操作。

代码如下:


df_chunks = pd.read_csv('C:/Users/5393/Desktop/fufei_test.csv', encoding='gb2312', chunksize=10)

chunks = []

for df_chunk in df_chunks:

    df_chunk.drop(columns=['编号', '时间', '投注玩法', '比分'], axis=1, inplace=True)

    # df_chunk = df_chunk.drop(columns=['编号'], axis=1, inplace=True)

    chunks.append(df_chunk)

result = pd.concat(chunks)

result

删除数据

在我们刚刚拿到数据还没有做分析之前,我们可能已经知道了需要用到哪些数据,哪些数据对我们来说是没有意义的,例如姓名、编号等等,我们可以在读取数据的时候就跳过这些维度,这样我们可以节省很多的内存,pandas允许我们使用指定的列名。

比如说下面的数据集,我们只需要其中的三个字段:


usecols = ['日期', '状态', '联赛']

df_usecol = pd.read_csv('C:/Users/5393/Desktop/fufei_test.csv', encoding='gb2312', usecols=usecols)

df_usecol.head()

另外一种清除无效数据的方式是使用dropna()函数,这个函数可以删除含有空值的行或者列,在特定的情况下,这个函数可以提高数据准确性,同时也可以减少内存的消耗。

为每一列设置具体的数据格式

对于很多初级数据分析师来说,他们不会太关注数据类型,但是,一旦你开始结束较大的数据集,处理数据类型就会变得非常必要。

我们通常的做法是先读取CSV为DataFrame,然后再根据我们的需要改变列的数据类型,但是在大数据的处理过程中,必须要考虑到内存问题,在CSV中,浮点型的数据有时候会占据很大的内存,而浮点型的数据有时候也不是我们真正需要的。

例如,我们下载了一份数据集用来预测股票价格,然后我们使用了32位的浮点数来存储,但我们真的需要32位那么多吗?有时候16位对于我们来说就足够了,因为股票价格明确规定保留小数点后两位,所以我们要在pandas读取数据之前就设定合适的数据类型,而不是等数据全部读进去再进行修改。这样我们就不会占用超过实际需要的内存。

在read_csv函数中,可以通过使用dtype参数来实现这个功能,这个参数接受一个字典:


import pandas as pd

dtypes = {‘a’: np.float64, ‘b’: np.int32}

df = pd.read_csv('file.csv', dtype=dtypes)


以上就是我们在实际数据分析工作中的解决方法,希望可以帮助你节省时间和内存。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352