Pandasql запрос списка или диктов данных - PullRequest
0 голосов
/ 17 ноября 2018

Учитывая набор файлов - каждый из которых читается в отдельный dataframe - как запрос pandasql может ссылаться на них?

В следующем фрагменте у нас есть list из dataframes: но тот же вопрос применим к dict:

import pandas as pd
from  pandasql import sqldf
# Read in a set of 10 files each containing columns `id` and `estimate`
dfs = [pd.read_csv('file%d.csv' %d) for d in range(1,10+1)]
sql_res = sqldf("select d2.estimate - d1.estimate \
    from dfs[1] d1 join dfs[2] d2 on d2.id = d1.id", locals())

dfs[1] и dfs[2] показывают, что я хотел бы сделать , но не являются допустимым синтаксисом. Любые предложения о том, как структурировать такого рода проблемы таким образом, чтобы pandasql мог поддерживать?

1 Ответ

0 голосов
/ 17 ноября 2018

Вы можете указать pandasql список имен / псевдонимов таблиц вместо простой передачи locals() в соответствии с строкой документации PandasSQL.__call__ (не удается найти онлайн-версию документов):

:param env: Variables environment - a dict mapping table names to pandas dataframes.

Обратите внимание, что вы должны поместить туда все таблиц, которые вы хотите запросить.

Вот небольшой пример, использующий класс PandasSQL вместо sqldf, как рекомендовано в строке документации:

import pandasql

sql = pandasql.PandaSQL()


data_frames = [
    pd.DataFrame({'a': [1,2,3]}),
    pd.DataFrame({'b': [1,4,5]})
]

# create aliases for your dataframes
env = {'t%d' % (i + 1): df for i, df in enumerate(data_frames)}

# tell pandasql to use the aliases
print(sql('select t1.* from t1 join t2 on t1.a = t2.b', env=env))
...