Обработка данных в 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).
Примеры задач
Дан DataFrame с колонкой «price» типа object. Как привести к числу?
pd.to_numeric(df['price'].str.replace(',', '.'), errors='coerce')— учитываем запятую как разделитель.Как найти строки, которые есть в df1, но нет в df2?
mergeсindicator=Trueи фильтр по_merge == 'left_only'. Илиdf1[~df1.key.isin(df2.key)].В данных 15% пропусков в колонке «возраст». Что делать? Зависит от задачи. Для отчёта — заполнить медианой по группам. Для ML — можно создать признак «пропуск» и заполнить медианой.
Как готовиться
- Разберите пайплайн очистки — загрузка, проверка типов, обработка пропусков, удаление дубликатов, преобразование.
- Запомните стратегии заполнения — среднее, медиана, мода, ffill, ноль. Знайте, когда какая подходит.
- Практикуйтесь в Карьернике — вопросы по Python включают задачи на обработку данных.
- Параллельно учите SQL — COALESCE = fillna, DISTINCT = drop_duplicates, CAST = astype. Смотрите вопросы по SQL.
FAQ
Что важнее на собеседовании: обработка данных или ML?
Для аналитика — однозначно обработка данных. ML спрашивают только на позициях data scientist. Аналитик должен уметь подготовить данные для анализа, а не строить модели. Полезно знать общие темы подготовки.
Как показать навык обработки данных на собеседовании?
Проговаривайте стратегию: «Сначала проверю типы данных, потом посмотрю на пропуски, оценю их долю, выберу стратегию заполнения в зависимости от контекста». Такой системный подход ценится выше знания конкретных методов.
Спрашивают ли про работу с большими файлами?
На senior-уровне — да. Ожидают знание chunksize в read_csv, dtype для экономии памяти, category для строковых колонок. На junior — редко, но упомянуть будет плюсом. Больше задач — в примерах вопросов.