Сохранить WRDS SQL-запрос в файл на Python

0

Мой код:

import wrds
db = wrds.Connection() 
compustatq = db.raw_sql("""
              select *
              from comp.fundq 
              """)

compustatq.to_csv('path.csv',index=False)

Проблема в том, что набор данных настолько велик, что у меня закончилась оперативная память. Поэтому я думал, можно ли загружать/сохранять данные непосредственно на диске? Следовательно, избегая двухэтапной процедуры загрузки в фрейм данных, а затем экспортируя в файл csv.

  • 1
    Вы можете сохранить результат запроса непосредственно в CSV, используя команду -e с mysql в командной строке. Кроме того, если данные слишком велики, попробуйте использовать chunking и сохранить их в нескольких CSV-файлах или добавить в тот же CSV-файл .... также, где у вас заканчивается память? Вы уверены, что это потому, что запрос слишком велик?
  • 0
    @skybunk да, я уверен, что он слишком большой. Мы говорим много много гигабайт. Не могли бы вы привести пример кода, где вы используете chunking на моем примере?
Показать ещё 2 комментария
Теги:

1 ответ

0

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

используйте его вот так:

import csv

writer = csv.writer(open('path.csv', 'wb+'), dialect='excel')
for row in compustatq:
    writer.writerow([str(v) for v in row])

ref: csv


Я просто прочитал исходный код wrds.Connection.raw_sql. он сообщает, что ваш compustatq является экземпляром pandas.DataFrame. Таким образом, вы все равно можете использовать метод to_csv но несколько иначе:

f = open('path.csv', 'wb+')
for i in xrange(len(compustatq)):
    f.write(df[i:i+1].to_csv(header=i==0))
f.close()
  • 0
    Спасибо за помощь. Я не уверен, смогу ли я сделать это? Моя проблема атм. в том, что мне не хватает памяти до того, как все данные будут сохранены в compustatq, который, между прочим, является фреймом данных. Поэтому вместо того, чтобы хранить данные во временной переменной, я хотел бы просто записать их непосредственно в csv.
  • 0
    @ Крис, если вы пишете CSV-файл построчно, как показывает мой код, вы преодолеете ошибку памяти. При этом вам не нужно создавать большой CSV-файл в памяти для записи на диск, вы пишете прямо на диск.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню