Обработка данных в Python на собеседовании

Почему спрашивают обработку данных

В реальной работе аналитика 80% времени уходит на очистку и подготовку данных. Интервьюеры это знают и проверяют, умеете ли вы справляться с грязными данными: пропусками, дубликатами, неправильными типами. Junior спросят про fillna, senior — про стратегию обработки в зависимости от природы данных.

Работа с пропусками

Пропуски (NaN, None, NULL) — главная головная боль аналитика. На собеседовании проверяют не только знание методов, но и понимание, когда какой подход применять.

Обнаружение: df.isna().sum() (количество), df.isna().mean() (доля — если больше 30—40%, колонку стоит удалить), df.info() (быстрый обзор).

Стратегии заполнения:

  • Удаление (dropna) — когда пропусков мало (менее 5%) и они случайны
  • Медиана/среднее (fillna(df.col.median())) — для числовых данных. Медиана устойчивее к выбросам
  • Мода — для категориальных данных
  • Предыдущее значение (fillna(method='ffill')) — для временных рядов
  • Ноль — только если ноль имеет смысл в контексте (например, количество покупок)

Ловушка на собеседовании: Интервьюер спрашивает: «Как заполнить пропуски в данных о зарплатах?» Если ответить «средним» — последует вопрос: «А если в выборке есть CEO с зарплатой в 10 раз больше остальных?» Правильный ответ — медиана или заполнение по группам (медиана по должности).

Дубликаты

Обнаружение: df.duplicated().sum() (полные дубликаты), df.duplicated(subset=['user_id', 'date']) (по ключевым колонкам).

Удаление: df.drop_duplicates() оставляет первое вхождение. keep='last' — последнее, keep=False — удаляет все, включая первый.

Частый вопрос: «Всегда ли нужно удалять дубликаты?» Нет. Иногда дубликат — валидная повторная операция. Важно понимать природу данных.

Типы данных и даты

Неправильные типы — частая причина ошибок. Интервьюеры проверяют типичные проблемы:

  • Числа как строки — после read_csv колонка с ценами может стать object из-за одного невалидного значения. Решение: pd.to_numeric(df.col, errors='coerce')
  • Даты как строкиpd.to_datetime() с параметром format. Извлечение компонентов: df['date'].dt.year, .dt.month, .dt.dayofweek. Агрегация по периодам: df.resample('M').sum() (аналог DATE_TRUNC в SQL)
  • Категорииastype('category') экономит память и ускоряет groupby

Объединение данных

  • pd.merge(df1, df2, on='key', how='left') — аналог LEFT JOIN. indicator=True покажет, откуда строка
  • pd.concat([df1, df2]) — вертикальная склейка (аналог UNION ALL), axis=1 — горизонтальная

Частый вопрос: «Чем merge отличается от concat?» merge объединяет по значениям колонок (как JOIN), concat склеивает по позиции или индексу (как UNION).

Примеры задач

  1. Дан DataFrame с колонкой «price» типа object. Как привести к числу? pd.to_numeric(df['price'].str.replace(',', '.'), errors='coerce') — учитываем запятую как разделитель.

  2. Как найти строки, которые есть в df1, но нет в df2? merge с indicator=True и фильтр по _merge == 'left_only'. Или df1[~df1.key.isin(df2.key)].

  3. В данных 15% пропусков в колонке «возраст». Что делать? Зависит от задачи. Для отчёта — заполнить медианой по группам. Для ML — можно создать признак «пропуск» и заполнить медианой.

Как готовиться

  1. Разберите пайплайн очистки — загрузка, проверка типов, обработка пропусков, удаление дубликатов, преобразование.
  2. Запомните стратегии заполнения — среднее, медиана, мода, ffill, ноль. Знайте, когда какая подходит.
  3. Практикуйтесь в Карьернике — вопросы по Python включают задачи на обработку данных.
  4. Параллельно учите SQL — COALESCE = fillna, DISTINCT = drop_duplicates, CAST = astype. Смотрите вопросы по SQL.

FAQ

Что важнее на собеседовании: обработка данных или ML?

Для аналитика — однозначно обработка данных. ML спрашивают только на позициях data scientist. Аналитик должен уметь подготовить данные для анализа, а не строить модели. Полезно знать общие темы подготовки.

Как показать навык обработки данных на собеседовании?

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

Спрашивают ли про работу с большими файлами?

На senior-уровне — да. Ожидают знание chunksize в read_csv, dtype для экономии памяти, category для строковых колонок. На junior — редко, но упомянуть будет плюсом. Больше задач — в примерах вопросов.