Превратить pandas dataframe в подобный файлу объект в памяти?

Я загружаю около 2 - 2,5 миллиона записей в базу данных Postgres каждый день.

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

Когда я делаю pd.to_sql, это занимает вечность. Если я сохраню файл csv и использую COPY FROM в Postgres, то все это займет всего несколько минут, но сервер находится на отдельной машине, и перенос файлов там затруднен.

Используя psycopg2, похоже, что я могу использовать copy_expert, чтобы извлечь выгоду из массового копирования, но все же использовать python. Я хочу, если возможно, избегать написания реального файла CSV. Могу ли я сделать это в памяти с панелью данных панд?

Вот пример моего кода панд. Я хотел бы добавить copy_expert или что-то, чтобы сделать сохранение этих данных намного быстрее, если это возможно.

    for date in required_date_range:
        df = pd.read_sql(sql=query, con=pg_engine, params={'x' : date})
        ...
        do stuff to the columns
        ...
        df.to_sql('table_name', pg_engine, index=False, if_exists='append',  dtype=final_table_dtypes)

Может кто-нибудь помочь мне с примером кода? Я бы предпочел использовать панды до сих пор, и было бы неплохо сделать это в памяти. Если нет, я просто напишу временный файл CSV и сделаю это таким образом.

Edit - вот мой окончательный код, который работает. Это займет всего пару сотен секунд на дату (миллионы строк) вместо пары часов.

to_sql = "" "КОПИЯ% s ОТ STDIN С CSV HEADER" ""

def process_file(conn, table_name, file_object):
    fake_conn = cms_dtypes.pg_engine.raw_connection()
    fake_cur = fake_conn.cursor()
    fake_cur.copy_expert(sql=to_sql % table_name, file=file_object)
    fake_conn.commit()
    fake_cur.close()


#after doing stuff to the dataframe
    s_buf = io.StringIO()
    df.to_csv(s_buf) 
    process_file(cms_dtypes.pg_engine, 'fact_cms_employee', s_buf)

Ответы на вопрос(2)

Ваш ответ на вопрос