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

#python #pandas #sas #proc-sql

#python #pandas #sas #proc-sql

Вопрос:

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

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

Скажем, в 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:

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)
  

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

1. Спасибо Alexk! Это был именно тот ответ, который я искал.