Я пытаюсь сохранить большие файлы 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')