Вопросы по Pandas на собеседовании аналитика
Что спрашивают по pandas
Блок pandas на собесе проверяет:
- Базовую индексацию и фильтрацию.
- Groupby и агрегаты.
- Merge и concat.
- Работу с пропусками.
- Базовое понимание производительности.
Ниже 30 вопросов с короткими ответами.
Базовые
1. В чём разница между Series и DataFrame?
Series — одномерный array с индексом. DataFrame — двумерная таблица (несколько Series, общий индекс).
2. Чем iloc отличается от loc?
loc — по меткам индекса. iloc — по позициям (int).
df.loc[0] # строка с индекс=0 (если такой есть)
df.iloc[0] # первая строка (по позиции)3. Как прочитать CSV?
pd.read_csv('file.csv') — базовое. Часто нужны параметры: sep, encoding, parse_dates, dtype.
4. Как посмотреть первые/последние строки?
df.head(), df.tail(). По умолчанию 5, можно указать число: df.head(20).
5. Как посмотреть типы и объём данных?
df.info() — типы и non-null count. df.shape — размерность. df.dtypes — типы колонок.
6. Как получить базовую статистику?
df.describe() — count, mean, std, min, quartiles, max для числовых. df.describe(include='all') — для всех типов.
Индексация и фильтрация
7. Как отфильтровать по условию?
df[df['amount'] > 100]
df[(df['amount'] > 100) & (df['status'] == 'paid')]
df.query('amount > 100 & status == "paid"')8. Как выбрать строки по списку значений?
df[df['col'].isin([1, 2, 3])].
9. Как отсортировать?
df.sort_values('col') — по возрастанию. ascending=False — по убыванию. sort_values(['a', 'b']) — по нескольким.
10. Как reset_index?
df.reset_index(drop=True) — сбросить и не сохранять старый индекс.
Тренироваться на таких вопросах можно в Telegram-боте Карьерник — там 1500+ задач с реальных собесов с разборами.
Groupby
11. groupby sum vs count vs nunique — разница?
sum — сумма значений. count — количество не-NaN. nunique — количество уникальных не-NaN.
12. Как применить разные агрегаты?
df.groupby('cat').agg({'a': 'sum', 'b': 'mean'})
# Или named aggregation
df.groupby('cat').agg(total=('a', 'sum'), avg=('b', 'mean'))13. Что такое transform?
Возвращает Series той же длины, что исходная — для обогащения строк групповым агрегатом:
df['city_avg'] = df.groupby('city')['amount'].transform('mean')14. Что такое filter в groupby?
Оставляет или исключает целые группы по условию:
df.groupby('user_id').filter(lambda g: len(g) > 5)
# Оставить только пользователей с 5+ заказами15. Разница apply и agg?
agg — для возвращения скаляра / фиксированного набора. apply — для произвольной логики, возврата произвольной формы.
Merge и concat
16. Как объединить по ключу?
df1.merge(df2, on='key') — inner по умолчанию. how='left', 'outer', 'right'.
17. concat по вертикали и горизонтали?
pd.concat([df1, df2], axis=0) # строки
pd.concat([df1, df2], axis=1) # столбцы18. Merge vs join?
merge — по столбцу (универсальный). join — по индексу (короче, если индексы настроены).
19. Как проверить, что merge правильный?
validate='one_to_one', 'one_to_many', etc — бросает ошибку, если связь другая.
20. indicator — что это?
Параметр merge, добавляет колонку _merge с значениями left_only, right_only, both.
NaN и пропуски
21. Как найти NaN?
df.isna(), df.isna().sum(). .notna() — обратное.
22. Как заполнить пропуски?
df.fillna(0), df.fillna({'a': 0, 'b': 'unknown'}). Или method='ffill', 'bfill'.
23. Как удалить строки с NaN?
df.dropna(). С параметром subset=['col1'] — только где NaN в указанном столбце.
24. NaN в агрегатах — что?
Игнорируется в sum, mean, min, max. Учитывается в count(*) через size, но не в count(col).
25. fillna с группой?
df.groupby('city')['amount'].transform(lambda x: x.fillna(x.mean()))Производительность
26. Как ускорить медленный цикл?
Векторизация: прямые операции с Series вместо for или .apply.
# Медленно
df['x2'] = df['x'].apply(lambda v: v * 2)
# Быстро
df['x2'] = df['x'] * 227. Почему apply медленный?
Вызывает Python-функцию на каждую строку. Не оптимизировано. Векторные операции в pandas/numpy работают через C.
28. Как обработать большой CSV?
chunksize в read_csv — обрабатывать по частям. Или Dask/Polars для параллелизма.
29. Что такое inplace=True?
Модификация DataFrame на месте, без возврата нового. Чаще лучше явно переприсвоить: df = df.dropna().
30. copy vs slice?
df[df['x'] > 0] возвращает VIEW — модификация может вызвать SettingWithCopyWarning. df[...].copy() — явная копия.
К слову, набить руку на таких кейсах удобно через тренажёр в Telegram — разбирайте по 10 вопросов в день, через 2 недели тема становится рефлексом.
Как готовиться
Pandas учится на практике. 5-10 задач в день на протяжении 2-3 недель — уверенный уровень для собеса.
Тренажёр Карьерник содержит блок задач на pandas: фильтрация, groupby, merge, NaN, производительность.
Совет: на собесе, прежде чем писать pandas-код, проговорите: «я бы сначала отфильтровал, потом сгруппировал, потом смерджил». Структура — важнее быстроты.
Читайте также
FAQ
Сколько pandas нужно junior?
Базовый уровень: read_csv, filter, groupby + 3 агрегата, merge INNER/LEFT, fillna. Этого хватит на 80% собесов junior.
Pandas или Polars?
Pandas — стандарт индустрии, его ждут на собесе. Polars — быстрее и современнее, но в описании вакансий почти не упоминается.
Как прокачать до middle?
Transform, apply с возвратом Series, merge_asof, rolling, resample, Categorical dtype, performance-оптимизация.
Чего не знают новички?
groupby.transform (обогащение строк), validate в merge, Categorical для экономии памяти, .str методов для работы со строками.