Вопросы по 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'] * 2

27. Почему 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 методов для работы со строками.