IPython в ноутбуках Jupyter: чтение большого файла данных с пандами становится очень медленным (высокое потребление памяти?) - PullRequest
0 голосов
/ 07 мая 2019

У меня есть огромный файл данных, который я хочу обработать в блокноте jupyter. Я использую панд в цикле for, чтобы указать, какие строки я читаю из файла:

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()

Несмотря на то, что я пытаюсь освободить память от данных, которые я прочитал, импорт начинается быстро и становится очень медленным в зависимости от номера текущего чанка.

Есть что-то, что я пропускаю? Кто-то знает причину этого и как исправить?

Спасибо заранее, smaica

Edit: Благодаря @ Wen-Ben я могу обойти эту проблему с помощью метода chunk из pandas read_csv. Тем не менее я удивляюсь, почему это происходит

1 Ответ

0 голосов
/ 07 мая 2019

Из моего опыта gc.collect() мало что делает.

Если у вас есть большой файл, который может поместиться на диск, вы можете использовать другие библиотеки, такие как Sframes .

Вот пример для чтения файла CSV:

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

API очень похож на Pandas.

...