在pandas中加载大型csv文件

时间:2018-03-19 09:06:09

标签: python pandas

我正在尝试在pandas dataframe中加载csv文件。但是,Python在加载文件时占用了大量内存。例如,csv文件的大小是289 MB,但在我尝试加载文件时,内存使用量大约为1700 MB。此时,系统显示内存错误。我也尝试过块大小,但问题仍然存在。任何人都可以告诉我前进的方向吗?

3 个答案:

答案 0 :(得分:0)

好的,首先,不要混淆磁盘大小和内存大小。 csv,它的核心是纯文本文件,而pandas数据帧是加载在内存中的复杂对象。也就是说,考虑到我不知道你的csv中有什么,我不能就你的具体情况作出陈述。所以我会给你一个在我的电脑上有一个类似大小的csv的例子:

-rw-rw-r--  1 alex users 341M Jan 12  2017 cpromo_2017_01_12_rec.csv

现在阅读CSV:

>>> import pandas as pd
>>> df = pd.read_csv('cpromo_2017_01_12_rec.csv')
>>> sys:1: DtypeWarning: Columns (9) have mixed types. Specify dtype option on import or set low_memory=False.
>>> df.memory_usage(deep=True).sum() / 1024**2
1474.4243307113647

Pandas会尽可能地尝试对它进行优化,但它无法做到这一点。如果内存不足,this answer is a good place to start。或者你可以尝试dask,但我认为这对于小型csv来说太过分了。

答案 1 :(得分:0)

你可以使用图书馆" dask"
例如:

# Dataframes implement the Pandas API
import dask.dataframe as dd`<br>
df = dd.read_csv('s3://.../2018-*-*.csv')

答案 2 :(得分:0)

尝试这样 - 1)用dask加载然后2)转换为pandas

import pandas as pd
import dask.dataframe as dd
import time
t=time.clock()
df_train = dd.read_csv('../data/train.csv', usecols=[col1, col2])
df_train=df_train.compute()
print("load train: " , time.clock()-t)