Я не так часто работаю с функциями, но иногда это действительно помогает оптимизировать работу. Бывает, что они - настоящее спасение. ☝️
🎯 Давайте рассмотрим ситуацию: вам нужно извлекать данные за определенные периоды времени. Вместо того чтобы писать SQL-запрос каждый раз заново, можно обернуть сам запрос в функцию.
🛠 С функцией легко менять диапазон дат, просто передав другой список в параметрах.
Используем библиотеку pandasql, которая позволяет выполнять SQL-запросы по DataFrame, как будто это таблица из базы данных.
import pandas as pd
from pandasql import sqldf
# Создаем небольшой DataFrame
data = {
'id': [1, 2, 3, 4, 5],
'created_at': ['2024-12-01', '2024-12-05', '2024-12-07', '2024-12-09', '2024-12-15'],
'user_id': [182, 256, 550, 306, 457]
}
df = pd.DataFrame(data)
# Преобразуем столбец created_at в datetime
df['created_at'] = pd.to_datetime(df['created_at'])
Теперь напишем саму функцию (пусть называется get_sql) для выборки данных через SQL:
def get_sql(df, dates):
query = f"""
SELECT *
FROM df
WHERE created_at >= '{dates[0]}' -- первая дата
AND created_at < '{dates[1]}' -- вторая дата
"""
return sqldf(query, locals())
🔍И теперь можно обращаться к ней столько раз, сколько нужно
dates1 = ['2024-12-01', '2024-12-10']
df_part1 = get_sql(df, dates1)
После выполнения этого кода вы получите таблицу с отфильтрованными данными (первые 4 строки).
Конкретный пример использования, чтобы сразу запомнилось, а не что-то абстрактное. 😂
Когда нужно выгрузить данные по рассылкам писем, обычно работаешь с очень большими базами. За один раз данные за месяц не получить — слишком объемно. Но можно разбить процесс на небольшие интервалы, например, выгружать данные по несколько дней.
🍕 Написал такой скрипт один раз, и потом спокойно запускаешь его 15 раз, собирая потом части в единое целое! 🚀