#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! Это был именно тот ответ, который я искал.