Как загрузить данные в панды из большой базы данных? - PullRequest
0 голосов
/ 04 мая 2018

У меня есть база данных postgres, которая содержит данные временных рядов. Размер базы данных составляет около 1 ГБ. В настоящее время для чтения данных это то, что я делаю

import psycopg2
import pandas as pd
import pandas.io.sql as psql

conn = psycopg2.connect(database="metrics", user="*******", password="*******", host="localhost", port="5432")
cur = conn.cursor()
df = psql.read_sql("Select * from timeseries", conn)
print(df)

Но это загружает все данные в память. Теперь я знаю методы, при которых база данных может быть выгружена в файл CSV, а затем файл CSV может быть прочитан кусками, как предложено здесь Как читать 6 GB csv файл с пандами

Но для меня это не вариант, поскольку база данных будет постоянно меняться, и мне нужно читать ее на лету. Есть ли какая-либо техника для чтения содержимого базы данных, возможно, частями или использования каких-либо сторонних библиотек?

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

pd.read_sql () также имеет параметр chunksize, поэтому вы можете читать данные из таблицы / запроса SQL в виде кусков:

for df in pd.read_sql("Select * from timeseries", conn, chunksize=10**4):
    # process `df` chunk here...
0 голосов
/ 04 мая 2018

Попробуйте загрузить этот файл непосредственно в базу данных, используя psql. С вашей консоли попробуйте эту команду:

$ cat file.csv | psql db -c "COPY your_table FROM STDIN DELIMITER ',' CSV HEADER"

Пример:

Рассмотрим следующую структуру таблицы.

CREATE TEMPORARY TABLE t (foo INT, bar TEXT);

и следующий CSV-файл ..

x,y
1,foo
2,bar
3,foo-bar

Выполните следующую команду со своего терминала:

$ cat /tmp/file.csv | psql db -c "COPY t FROM STDIN DELIMITER ',' CSV HEADER"

А вот ваши данные:

db=# SELECT * FROM t;
 a |    b    
---+---------
 1 | foo
 2 | bar
 3 | foo-bar
(3 Zeilen)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...