На днях решал несложную одноразовую задачу по фрилансу. Суть в том, что данные были получены с помощью python и по датасету нужно было сделать несколько преобразований и вычислений метрик.
Преобразования сами по себе стандартные: фильтрация
, агрегация
, сортировка
. Можно взять написать все эти операции с помощью pandas к уже имеющемуся датафрейму.
Но мне так стало лень писать несколько строк кода на python, что для меня было проще написать всю логику в одном select запросе на sql
Вы спросите
"нафига так делать???" чтобы применить sql данные нужно положить в базу данных
Нет, точнее не всегда) Данные остались в том же датафрейме, а обработку я сделал с помощью pandasql.
Простой пример применения и сравнения pandas VS pandasql
import pandas as pd
from pandasql import sqldf
data = {
'product_id': [1, 2, 1, 3, 2, 3, 1],
'sale_date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'],
'amount': [100, 200, 150, 300, 250, 350, 400]
}
df = pd.DataFrame(data)
# логика с pandas (фильтруем по датам, группируем по product_id, считаем агрегат суммы по полю amount и сортируем по нему же)
result_df = (
df[df['sale_date'].between('2023-01-02', '2023-01-03')]
.groupby('product_id', as_index=False)['amount']
.sum()
.sort_values(by='amount', ascending=False)
)
# или применяя sqldf
query = """
SELECT product_id, SUM(amount) as total_amount
FROM df
WHERE sale_date BETWEEN '2023-01-02' AND '2023-01-03'
GROUP BY product_id
ORDER BY total_amount DESC
"""
sql_result = sqldf(query, globals())
Я на работе настолько привык крутить все данные с помощью SQL, что в голове любые преобразования я продумываю на логике sql-запросов, а потом если все таки нужно могу переложить это на python скрипты.
Это как с разговорными языками. Если например переезжаете в другую страну и начинаете разговаривать/писать/слушать на другом языке, то у вас мозг со временем начинает мыслить на этом же языке. У меня так было с английским 🇬🇧, когда учеба и работа была полностью на английском, при этом жил в Москве, но все равно замечал что формулирую предложения сначала на английском, а потом уже осознаю что можно на русском)
P.S. sqldf применяет диалект SQLite, поэтому можно использовать все функции которые доступны для этой базы.
👍 если узнали новенькое для себя из поста