Jupyter笔记本中的IPython:用熊猫读取大数据文件变得非常慢(内存消耗高?)

时间:2019-05-07 16:00:32

标签: python pandas memory garbage-collection jupyter-notebook

我有一个很大的数据文件,要在jupyter笔记本中处理。 我在for循环中使用pandas来指定ans从文件中读取的行:

import pandas as pd 
import gc
from tqdm import tqdm


# Create a training file with simple derived features
rowstoread = 150_000
chunks = 50

for chunks in tqdm(range(chunks)):
    rowstoskip = range(1, chunks*rowstoread-1) if segment > 0 else 0
    chunk = pd.read_csv("datafile.csv", dtype={'attribute_1': np.int16, 'attribute_2': np.float64}, skiprows=rowstoskip, nrows=rowstoread)

    x = chunk['attribute_1'].values
    y = chunk['attribute_2'].values[-1]

    #process data here and try to get rid of memory afterwards

    del chunk, x, y
    gc.collect()

尽管我尝试释放以后读取的数据的存储空间,但导入速度很快,并且根据当前块的数量而变得非常慢。

有什么我想念的吗?有人知道原因以及如何解决吗?

预先感谢, 斯玛卡

编辑: 感谢@ Wen-Ben,我可以使用pandas read_csv中的chunk方法来解决这个问题。不过我不知道为什么会这样

1 个答案:

答案 0 :(得分:0)

根据我的经验gc.collect()并没做多。

如果您有一个大文件可以容纳到磁盘上,则可以使用其他库,例如Sframes

这里是example,用于读取csv文件:

sf = SFrame(data='~/mydata/foo.csv')

API与Pandas非常相似。