Pythonpandasшпаргалка

Шпаргалка по pandas для аналитика — методы и примеры

2026-07-04 7 мин

Шпаргалка по pandas для аналитика: чтение данных, фильтрация, groupby, merge, pivot, даты и строки — все рабочие методы в таблицах с примерами. Это те 20% pandas, которые закрывают 80% рабочих задач и почти всю Python-секцию собеседования.

Формат — справочник: находишь задачу в таблице, копируешь метод, проверяешь на своих данных. Тренировать всё это на реальных задачах можно в Python-тренажёре — pandas работает прямо в браузере, ничего ставить не нужно.

Series и DataFrame: база

Series — одна колонка с индексом, DataFrame — таблица из Series

ЗадачаКод
Прочитать CSVpd.read_csv('data.csv', parse_dates=['dt'])
Первые строки / структураdf.head(), df.info(), df.describe()
Размерdf.shape
Уникальные значенияdf['city'].unique(), df['city'].nunique()
Частоты значенийdf['city'].value_counts()
Типы колонокdf.dtypes, df['col'].astype('int64')

Фильтрация и выбор

ЗадачаКод
Фильтр по условиюdf[df['amount'] > 1000]
Несколько условийdf[(df['amount'] > 1000) & (df['city'] == 'Москва')]
Значение из спискаdf[df['status'].isin(['paid', 'shipped'])]
Строки с NULL / безdf[df['email'].isna()], df[df['email'].notna()]
Выбор колонокdf[['user_id', 'amount']]
По меткам / позициямdf.loc[rows, cols], df.iloc[0:5, 0:2]
Строки по подстрокеdf[df['name'].str.contains('про', case=False)]

Два классических подвоха: условия соединяются & и | (не and/or) и каждое условие — в скобках; предупреждение SettingWithCopyWarning лечится явным .copy() или присваиванием через .loc.

GroupBy: сердце аналитики

GroupBy: split — apply — combine на примере группировки по городам

ЗадачаКод
Одна агрегацияdf.groupby('city')['amount'].sum()
Несколько агрегатовdf.groupby('city').agg(orders=('id', 'count'), revenue=('amount', 'sum'))
Агрегат без схлопывания (как оконная в SQL)df['city_avg'] = df.groupby('city')['amount'].transform('mean')
Топ-N в каждой группеdf.sort_values('amount', ascending=False).groupby('city').head(3)
Фильтр групп (как HAVING)df.groupby('city').filter(lambda g: g['amount'].sum() > 1e6)

Правило производительности: если для задачи есть готовый метод (sum, mean, transform) — не пиши apply с lambda: он до 100 раз медленнее.

Merge: соединение таблиц

SQLpandas
INNER JOINpd.merge(a, b, on='key')
LEFT JOINpd.merge(a, b, on='key', how='left')
FULL JOINpd.merge(a, b, on='key', how='outer')
Разные имена ключейpd.merge(a, b, left_on='uid', right_on='user_id')
Вертикальная склейка (UNION ALL)pd.concat([a, b], ignore_index=True)

Как и в SQL, следи за дублями ключей в правой таблице-справочнике — строки размножатся (fan-out). Проверка: pd.merge(..., validate='many_to_one') требует уникальности ключа в правой таблице и кинет ошибку, если там есть дубли. Разбор всех вариантов — в гайде по pandas merge.

Pivot и melt: длинный и широкий формат

ЗадачаКод
Сводная таблицаdf.pivot_table(index='month', columns='city', values='amount', aggfunc='sum')
Широкий → длинныйdf.melt(id_vars=['month'], var_name='city', value_name='amount')
Кросс-таблица частотpd.crosstab(df['city'], df['status'])

pivot_table против pivot: pivot_table умеет агрегировать дубли (aggfunc), pivot упадёт с ошибкой при повторах пары индекс-колонка — на собеседовании это любят спрашивать.

Даты и время

ЗадачаКод
Строка → датаpd.to_datetime(df['dt'])
Округлить до месяцаdf['dt'].dt.to_period('M')
Год, месяц, день неделиdf['dt'].dt.year, .dt.month, .dt.dayofweek
Агрегация по неделямdf.resample('W', on='dt')['amount'].sum()
Скользящее среднее за 7 точекdf['amount'].rolling(7).mean()
Разница дат(df['end'] - df['start']).dt.days

Пропуски и дубликаты

ЗадачаКод
Сколько пропусков в колонкахdf.isna().sum()
Заполнить пропускиdf['amount'].fillna(0), df['city'].fillna('unknown')
Удалить строки с NULLdf.dropna(subset=['user_id'])
Найти дубликатыdf.duplicated(subset=['user_id', 'dt']).sum()
Удалить дубликатыdf.drop_duplicates(subset=['user_id'], keep='first')

Стратегия заполнения пропусков — вопрос про данные, а не про код: средним заполняют только когда пропуски случайны, для скошенных распределений берут медиану, и почти всегда полезнее сначала понять, почему данные пропали.

Что спрашивают на собеседовании по pandas

Топ-5 тем Python-секции аналитика: groupby с несколькими агрегатами, merge и его подвохи с дублями, transform против apply, pivot_table, обработка пропусков. Прогнать все темы на реальных задачах можно в Python-тренажёре, а разбор groupby по шагам — в отдельном гайде.

Частые вопросы

Чем transform отличается от apply в groupby?

transform возвращает результат той же длины, что исходные данные — агрегат «приписывается» каждой строке группы, как оконная функция в SQL. apply гибче (может вернуть что угодно), но заметно медленнее и его легко использовать там, где хватает встроенного агрегата. Правило: сначала ищи готовый метод, apply — последний вариант.

Как в pandas сделать аналог оконной функции SQL?

ROW_NUMBER — это groupby + cumcount, нарастающий итог — groupby + cumsum, LAG — groupby + shift, скользящее среднее — rolling. Например, номер заказа внутри клиента: df.sort_values('dt').groupby('user_id').cumcount() + 1.

pandas или SQL — что использовать для анализа?

Правило большинства команд: тяжёлую выборку и агрегацию делает SQL на стороне базы, pandas берёт уже уменьшенный датасет для статистики, когорт и визуализации. Тянуть сырые миллионы строк в pandas — антипаттерн: память кончится раньше, чем начнётся анализ. Подробное сравнение — в гайде SQL vs pandas.

Где практиковать pandas бесплатно?

В Python-тренажёре — первые задачи открыты без регистрации, pandas и numpy работают в браузере через Pyodide. Плюс бесплатный курс по pandas с интерактивными примерами.

Потренируй pandas на задачах
538 Python-задач с автопроверкой прямо в браузере — pandas, numpy, scipy без установки.
Открыть Python-тренажёр →