Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

+1 183новые вакансии за сутки·93 833вакансии открыты сейчас·Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 273
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 409 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 230
  • Облачные технологии14 171
  • QA вакансии3 456
  • Backend вакансии2 115
  • Инженер данных1 801
  • Продакт-менеджер1 247

Разработка

  • Android1 858
  • iOS1 698
  • Fullstack вакансии996
  • AI вакансии955
  • Frontend вакансии755
  • Mobile вакансии44

По стеку

  • Go8 752
  • Java6 593
  • Node.js2 036
  • .NET1 739
  • Kotlin1 618
  • Rust1 472
  • C#717
  • PHP690
  • C++579

DevOps и инфраструктура

  • Kubernetes7 787
  • DevOps вакансии6 095
  • Linux-инфраструктура5 508
  • Terraform / IaC4 287
  • CI/CD3 272
  • Мониторинг и Observability1 792
  • SRE566
  • Кибербезопасность454

Аналитика и данные

  • Data Scientist1 138
  • Бизнес-аналитик921
  • Аналитик данных858
  • Системный аналитик154

Другие направления

  • Проджект-менеджер624
  • UI/UX дизайн149
  • Ручное тестирование14

По регионам

  • Вакансии в США44 156
  • Вакансии в Европе24 035
  • Вакансии в Канаде4 532
  • Работа в России3 867

По формату

  • Удалённые вакансии75 005
  • Релокация в США44 166
  • Гибридная работа12 485
  • Офисная работа7 090

По уровню

  • Senior вакансии42 643
  • Middle вакансии20 960
  • Junior вакансии6 708

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis38 вакансий
  • Spotify37 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме PandasВсе вопросы
PandasSeniorОпыт

Как проверять корректность решения на Pandas, а не только успешное выполнение кода?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Корректность в Pandas проверяют через явные assertions на dtype и shape, проверку бизнес-инвариантов (нет дублей, нет null в ключах, диапазоны значений), conservation checks агрегатов и тесты с pd.testing.assert_frame_equal на известных входах.

1. Проверка формы и типов

import pandas as pd

def validate_schema(df: pd.DataFrame) -> None:
    expected_cols = {"user_id", "date", "amount", "region"}
    assert set(df.columns) >= expected_cols, f"Missing columns: {expected_cols - set(df.columns)}"
    assert df["user_id"].dtype == "Int64", f"user_id dtype: {df['user_id'].dtype}"
    assert pd.api.types.is_datetime64_any_dtype(df["date"]), "date not datetime"
    assert df["amount"].dtype in ("float64", "Float64"), f"amount dtype: {df['amount'].dtype}"

Стратегия проверки корректности, а не только успешного запуска

Код на Pandas выполняется без ошибок, но возвращает неверный результат — это самый опасный класс багов в data-пайплайнах. Проверка корректности требует явных assertions на форму, типы, диапазоны значений и семантику данных.

2. Проверка бизнес-инвариантов

def validate_business_rules(df: pd.DataFrame) -> None:
    # Нет отрицательных сумм
    neg = df[df["amount"] < 0]
    assert len(neg) == 0, f"Negative amounts: {len(neg)} rows\n{neg.head()}"

    # Уникальность первичного ключа
    dupes = df[df.duplicated(subset=["user_id", "date"], keep=False)]
    assert len(dupes) == 0, f"Duplicate (user_id, date): {len(dupes)} rows"

    # Нет пропусков в критических колонках
    nulls = df[["user_id", "date", "amount"]].isnull().sum()
    assert nulls.sum() == 0, f"Nulls found:\n{nulls[nulls > 0]}"

    # Диапазон дат осмыслен
    assert df["date"].min() >= pd.Timestamp("2020-01-01"), "Dates too old"
    assert df["date"].max() <= pd.Timestamp.now(), "Future dates found"

3. Контрольные суммы и агрегаты

Если результат — агрегированная таблица, проверяют, что сумма по группам равна сумме по исходному датасету (conservation check).

def validate_aggregation(raw: pd.DataFrame, agg: pd.DataFrame) -> None:
    raw_total = raw["amount"].sum()
    agg_total = agg["revenue"].sum()
    assert abs(raw_total - agg_total) < 0.01, (
        f"Aggregation error: raw={raw_total:.2f}, agg={agg_total:.2f}"
    )

    # Количество уникальных регионов не должно увеличиться
    assert agg["region"].nunique() <= raw["region"].nunique()

4. Тесты с pytest и известными входами

import pytest

def transform(df: pd.DataFrame) -> pd.DataFrame:
    return (
        df.groupby("region", as_index=False)
        .agg(revenue=("amount", "sum"))
    )

def test_transform_known_input():
    inp = pd.DataFrame({
        "region": ["EU", "EU", "US"],
        "amount": [100.0, 50.0, 200.0],
    })
    out = transform(inp)
    pd.testing.assert_frame_equal(
        out.sort_values("region").reset_index(drop=True),
        pd.DataFrame({"region": ["EU", "US"], "revenue": [150.0, 200.0]}),
    )

pd.testing.assert_frame_equal проверяет значения, dtype и индекс — используйте его вместо ручного сравнения через ==.

5. Профилирование данных перед обработкой

# Быстрый профиль перед запуском пайплайна
def quick_profile(df: pd.DataFrame) -> None:
    print(f"Shape: {df.shape}")
    print(f"Dtypes:\n{df.dtypes}")
    print(f"Nulls:\n{df.isnull().sum()}")
    print(f"Duplicates: {df.duplicated().sum()}")
    for col in df.select_dtypes(include="number").columns:
        print(f"{col}: min={df[col].min()}, max={df[col].max()}, mean={df[col].mean():.2f}")

Подводные камни

  • df1 == df2 возвращает DataFrame булевых значений, а не одно True/False; для сравнения используйте pd.testing.assert_frame_equal
  • NaN != NaN в Python — прямое сравнение через == пропускает NaN-строки; нужен df.isnull().sum()
  • После merge без validate= строки могут дублироваться — silent data multiplication без ошибки
  • apply() с side effects (запись в внешний список) даёт непредсказуемое количество вызовов при оптимизации
  • Проверять только shape недостаточно — правильная форма при неверном содержимом типична для join на неправильном ключе
  • Не проверять порядок строк при сравнении агрегатов — sort перед assert_frame_equal обязателен
  • Игнорировать предупреждения dtype при чтении CSV — они сигнализируют о потенциальной потере данных

Что портит ответ

  • Сразу обвинять Pandas, не проверив соседние слои системы
  • Чинить симптом без минимального воспроизведения и evidence
  • Не учитывать версии, конфигурацию, окружение и recent changes

Что слушает интервьюер

  • Умеет локализовать проблему вокруг Pandas
  • Двигается от симптома к гипотезам и проверкам
  • Отличает баг инструмента от ошибки использования или окружения

Как вы знаете этот вопрос?

Проверить себя по теме Pandas →
←Предыдущий вопросЧем `transform()` отличается от `agg()` при использовании с `groupby()`?Следующий вопрос→Представьте, pipeline на Pandas даёт хорошие результаты в dev, но плохо работает на новых данных. Как вы будете разбираться?

Связанные темы

PandasDebuggingpandastechnical-communicationtechnology-selectiontrade-off-analysis

Вакансии с этим навыком

  • Data Analyst (Banking experience)
  • Data Analyst – Python, SQL & PySpark (Financial Services)
  • Machine Learning Engineer
  • LLM-инженер
  • Middle+ R&D Product Analyst

Частые вопросы на собеседовании

  • Каковы типичные причины SettingWithCopyWarning и как его исправить?
  • В чём разница между merge(), join() и concat() в Pandas?
  • Как обрабатывать пропущенные значения в Pandas — isnull(), dropna(), fillna()?
  • В чём разница между .loc[] и .iloc[] для индексирования?