Как использовать Pandas для выбора из базы данных и локального фрейма данных? - PullRequest
1 голос
/ 11 апреля 2019

Используя SAS, я обычно использую proc sql для создания чтения набора данных из базы данных. Позже я снова смогу использовать proc sql для запросов как из базы данных, так и из первого созданного мной локального набора данных.

Как это сделать в Python (используя панд)?

Скажи в SAS, я бегу:

proc sql;
create table work.dataset1 as
select * from dbtable1;
run;

И затем я могу использовать этот набор данных для продолжения запросов к моей базе данных, как:

proc sql;
create table work.dataset2 as
select a.*, b.* from work.dataset1 a, dbtable2 b;
run;

Я Python У меня есть этот код:

df1 = pd.read_sql_query("select * from dbtable1", conn)

И хотел бы иметь возможность ссылаться на df1 в последующих запросах, например:

df2 = pd.read_sql_query("select a.*, b.* from df1 a, dbtable2 b", conn)

Но, похоже, это не работает.

Кто-нибудь знает, как это можно сделать с помощью Python / Pandas?

Большое спасибо заранее!

1 Ответ

1 голос
/ 12 апреля 2019

pd.read_sql_query не сможет этого сделать.Сначала вы можете запустить SQL-запрос к вашей базе данных, чтобы создать объект dataframe из dbtable2, и использовать методы pandas для выполнения запросов к нескольким фреймам данных.

Существует также библиотека Python с именем pandasqlэто позволяет запрашивать pandas фреймы данных с использованием синтаксиса SQL.Так что в вашем случае это будет:

import pandas as pd
import pandasql as ps

df1 = pd.read_sql_query("select * from dbtable1", conn)
df2 = pd.read_sql_query("select * from dbtable2", conn)

pysqldf = lambda q: ps.sqldf(q, globals())
q = """select a.*, b.* from df1 a, df2 b;"""
final_df = pysqldf(q)
...