Использование шаблона Jinja2 для перебора наборов столбцов SQL для создания фреймов данныхPython

Программы на Python
Ответить
Anonymous
 Использование шаблона Jinja2 для перебора наборов столбцов SQL для создания фреймов данных

Сообщение Anonymous »

Я пытаюсь использовать шаблон Jinja в цикле for для выполнения SQL-запроса, который группируется по разным наборам столбцов и месяцам. Цикл предназначен для добавления данных каждого нового месяца в фрейм данных, созданный для данного набора столбцов, а затем сохранения окончательного фрейма данных с именем, указанным в наборе columns_set_names.
Мой текущий код проходит через все три имени моего набора столбцов и три набора столбцов, которые я обозначил, в результате чего получается 9 запросов, ни один из которых не сохраняется так, как я ожидаю. Я считаю, что есть две проблемы: мне нужно ограничить итерацию по именам наборов, чтобы каждое из них создавалось только один раз, и мне нужно выяснить, как назначить правильное df_name каждому из результирующих фреймов данных. Например, мой желаемый результат для первого набора столбцов:
location_df = 'town', 'county', 'state', 'nbr_rows', 'purchases', 'revenue', ' месяц'
Пожалуйста, дайте мне знать, если я могу предоставить какие-либо подробности о том, что я пытаюсь сделать.
sql_query_template = """
SELECT
{{ group_by_columns | join(', ') }},
COUNT(*) AS nbr_rows,
SUM(purchases) AS purchases
SUM(revenue) AS revenue
FROM
purchase_hist
WHERE
month = '{{ month }}'
GROUP BY
{{ group_by_columns | join(', ') }}
"""

column_set_names = ['location', 'age_gender', 'product_desc']
group_by_column_sets = [['town', 'county', 'state'], ['age', 'gender'], ['prod_name', 'prod_type', 'prod_origin'],]
month_param = ['202407']

for set_name in column_set_names:
df_name = f'{set_name}_df'

for group_by_columns in group_by_column_sets:
template = Template(sql_query_template)
combined_df = pd.DataFrame()

for month_param in months_param:
rendered_query = template.render(group_by_columns=group_by_columns, month=month_param)

df_name = pd.read_sql(rendered_query, cnxn)

df_name['month'] = month_param

df_name = pd.concat([combined_df, df_name], ignore_index=True)


Подробнее здесь: https://stackoverflow.com/questions/792 ... dataframes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»