IT посты

Панды не виноваты, что ты их боишься

Панды не виноваты, что ты их боишься

или почему Pandas на собеседовании выглядит страшнее, чем он есть на самом деле

[1] Добро пожаловать в зоопарк

Есть особый вид боли на собеседованиях аналитиков

SQL еще ладно

Там хотя бы все плюс-минус понятно:
SELECT

FROM

WHERE

GROUP BY
и дальше молимся, чтобы не спросили рекурсию

Но потом собеседующий такой:

> А теперь давайте на Python/Pandas

И у кандидата в голове сразу включается режим:

> так, где там эта команда, которая удаляет дубликаты, но не совсем удаляет, а оставляет последний, но только если там не null, господи забери меня

И начинается магия:
df.groupby(...).agg(...)
потом 40 секунд молчания

потом нервный взгляд в потолок

потом фраза:

> Я обычно гуглю синтаксис

И в целом это нормальная фраза

Проблема только в том, что на собесе ты не на работе

На работе ты можешь гуглить

На собесе ты играешь в цирк с конями, где нужно показать, что ты хотя бы понимаешь, куда этот конь бежит

[2] Pandas это не про знание всех методов

Самая большая ошибка в подготовке к Pandas:

учить его как список заклинаний из Гарри Поттера
dropna

fillna

merge

pivot_table

melt

explode

cumcount

transform

apply
и вот это все

В итоге человек вроде знает 100500 методов, но когда ему дают обычную задачу:

> Найди для каждого пользователя первую покупку и посчитай, сколько дней прошло до второй

он такой:

> А можно я лучше расскажу, чем inner join отличается от left join?

Нет, братан, нельзя

Мы уже в другом биоме

На собесе по Pandas проверяют не то, что ты помнишь все аргументы `pd.read_csv`

Проверяют, можешь ли ты мыслить табличками

А именно:

- отфильтровать строки

- сгруппировать данные

- посчитать агрегаты

- соединить таблицы

- отсортировать внутри группы

- найти первое/последнее событие

- обработать пропуски

- не размазать данные по стенке кривым `merge`

- объяснить, почему у тебя после join'а стало в 10 раз больше строк

Последний пункт, кстати, особенно важный

Потому что именно так рождаются отчеты, после которых бизнес думает, что выручка выросла на 700%

[3] SQL в шапке панды

Если ты нормально знаешь SQL, то Pandas учится сильно легче

Потому что 80% собесных задач это просто SQL, которому надели шапку панды

SQL:
SELECT user_id, sum(revenue)

FROM orders

WHERE status = 'paid'

GROUP BY user_id
Pandas:
orders[orders['status'] == 'paid'] \

.groupby('user_id')['revenue'] \

.sum()
Все

Никакой черной магии

Никакого "я не программист, я аналитик, отстаньте"

Просто другая форма записи

И вот тут важный момент

Если ты в SQL не понимаешь, что происходит на уровне данных, Pandas тебя добьет

Потому что SQL хотя бы делает вид, что он дружелюбный

А Pandas такой:

> Ой, ты хотел копию, а я дал view

> Ой, ты хотел одну строку на пользователя, а получил 15

> Ой, ты забыл reset_index, теперь живи с этим

[4] Что реально нужно уметь

Если готовиться к Pandas на собес, я бы не учил "весь Pandas"

Это как учить весь английский язык, чтобы спросить в аэропорту, где туалет

Я бы закрыл базовый боевой набор:

1. Фильтрация

df[df['revenue'] > 0]

df[(df['city'] == 'Moscow') & (df['status'] == 'paid')]

2. Группировки (банды йоу)

df.groupby('user_id').agg(

orders=('order_id', 'nunique'),

revenue=('revenue', 'sum')

)

3. Join'ы

orders.merge(users, on='user_id', how='left')
И обязательно понимать, что будет, если в правой таблице `user_id` не уникальный

Спойлер: будет боль

4. Работа с датами

df['created_at'] = pd.to_datetime(df['created_at'])

df['month'] = df['created_at'].dt.to_period('M')

5. Пропуски и дубли

df.isna().sum()

df.drop_duplicates()

df.fillna(0)

6. Умение читать ошибку

Это вообще отдельный навык

Половина людей видит traceback и сразу превращается в овощное рагу

Хотя там часто буквально написано:

> братан, у тебя такой колонки нет

[5] Самая тупая подготовка

Самая тупая подготовка к Pandas выглядит так:

открыть шпаргалку

посмотреть 200 методов

закрыть шпаргалку

испытать тревогу

открыть курс на 40 часов

посмотреть 2 урока

умереть внутри

Нормальная подготовка выглядит иначе:

Берешь датасет заказов

Там должны быть:
user_id
order_id
created_at
revenue
status
category
И решаешь 30 маленьких задач

Например:
- топ-5 категорий по выручке

- средний чек по месяцам

- доля отмененных заказов

- первая покупка каждого пользователя

- повторная покупка в течение 30 дней

- пользователи, у которых больше 3 заказов

- категории, где средний чек выше общего среднего

- выручка накопительным итогом по дням
Вот это уже похоже на собес

А не "давайте выучим все параметры метода pivot_table, потому что вдруг пригодится"

[6] Главная мысль

Pandas на собеседовании это не экзамен на библиотекаря

Тебя не спрашивают, чтобы проверить, помнишь ли ты 700 методов

Тебя спрашивают, чтобы понять:

можно ли тебе дать грязную табличку

и получить на выходе нормальный ответ

а не Excel-файл `final_final_v3_точно_последний.xlsx`

Поэтому готовиться нужно не к Pandas

А к решению задач на данных с помощью Pandas

Разница примерно такая же, как между:

> я знаю, что такое молоток

и

> я могу повесить полку, и она не убьет кота ночью

На этом все

Берите датасет, открывайте ноутбук, решайте руками

И помните: если после merge'а строк стало больше, чем было, это не Pandas плохой

это жизнь пытается вам что-то сказать

думайте
-----

Братишка, этот пост написал CODEX, какое же это высер получился
Никогда не буду писать такие посты без души
Ну и вам урок, что не стоит всякий высер в интернетах читать)