Хранение больших фреймов данных на go - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь сохранить большие файлы CSV в python, но у меня не хватает оперативной памяти, прежде чем я могу позвонить to_csv.

Мой код выглядит так:

v = []
v2 = []
...

for i in object:
    v.append(i.X)
    v2.append(i.Y)
    ...

db = {'V': v,
      'V2': v2,
      ...
     }

df = pandas.DataFrame(db, columns=['V','V2',...])
df.to_csv('filename.csv', sep=',', encoding='utf-8', index=False)

Однако векторы v, v2 и т. Д. Чрезвычайно велики (их длина превышает 100 000 000).

Я предполагаю, что должен быть способ создания кадра данных «на go» и добавьте результаты в выходной файл, возможно, не используя эти векторы в качестве промежуточных. Как можно сделать это на Python / Cython? Спасибо

РЕДАКТИРОВАТЬ

Я пришел к этому «решению», где не генерируются промежуточные продукты и получается ожидаемый результат без сохранения постоянных больших векторов.

Я все еще чувствую, что это не оптимальное решение, поэтому я не публикую его как ответ, в надежде, что кто-то придет с лучшим подходом. Возможно, с меньшим количеством операций ввода-вывода, как этот.

count = 0
for i in object:
    df = pandas.DataFrame({'V': [i.X], 'V2': [i.Y], ...})
    if count==0:
        df.to_csv('filename.csv', sep=',', encoding='utf-8', index=False)
        count = 1
    else:
        df.to_csv('filename.csv', sep=',', encoding='utf-8', index=False, header=False, mode='a')
...