Сжатие данных StringIO для чтения с помощью pandas?

#pandas #psycopg2

#pandas #psycopg2

Вопрос:

Я использую pandas pd.read_sql_query, чтобы каждый день считывать приличный объем данных в память для их обработки (добавлять столбцы, вычисления и т.д. Примерно к 1 ГБ данных). Это несколько раз приводило к зависанию моего компьютера, поэтому сегодня я попытался использовать psql для создания файла .csv. Затем я заархивировал этот файл (.xz) и прочитал его с помощью pandas.

В целом, это было намного плавнее, и это заставило меня задуматься об автоматизации процесса. Возможно ли заменить сохранение файла .csv.xz и вместо этого скопировать данные непосредственно в память, сохраняя при этом их сжатие (в идеале)?

     buf = StringIO()

    from_curs = from_conn.cursor()
    from_curs.copy_expert("COPY table where row_date = '2016-10-17' TO STDOUT WITH CSV HEADER", buf)
(is it possible to compress this?)
    buf.seek(0)
  

(прочитайте buf с помощью pandas, чтобы обработать его)

Комментарии:

1. Поскольку вы удаляете зависшую часть путем сброса на диск, почему бы вам просто не остановиться на этом? Запись файла стабильна, и чтение его обратно тоже, больше ничего не требуется. Скажите, почему вы вообще сжимаете его на 1 ГБ?

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

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