Работа с датами в pandas: to_datetime и dt

0 задач Pyodide в браузере С эталонными решениями 2026 — с реальных собесов
Даты — вечный источник багов в аналитике, поэтому их обязательно гоняют на собесе. Всё начинается с pd.to_datetime: строку в datetime, с параметром format для скорости и явности (format='%d.%m.%Y' парсит российский формат), с errors='coerce' чтобы битые значения стали NaT, а не уронили пайплайн. Дальше — dt-accessor: df['date'].dt.year, .dt.month, .dt.weekday (0 — понедельник), .dt.quarter, .dt.date. Разница между датами даёт Timedelta, а (дата2 - дата1).dt.days превращает её в целое число дней — типовой вопрос «посчитай возраст аккаунта» или «дни между первой и второй покупкой». date_range генерирует последовательность дат — незаменим для календарной таблицы, чтобы не потерять дни без событий при join. Отдельная боль — таймзоны: tz_localize навешивает зону, tz_convert переводит в другую, и путать их не стоит. Здесь задачи на парсинг, извлечение частей даты и вычисление интервалов — прямо в браузере через Pyodide.
Начать решать задачи →

Все задачи на «pandas-datetime» (0)

FAQ: частые вопросы про pandas-datetime

Как правильно парсить дату через to_datetime?

pd.to_datetime(df['col'], format='%d.%m.%Y') — с явным форматом парсинг быстрее и предсказуемее, чем автоопределение. errors='coerce' превращает нераспознанные строки в NaT вместо ошибки — так весь столбец не падает из-за одного битого значения. Для смешанных форматов есть format='mixed', но он медленный, лучше чистить данные заранее.

Как посчитать разницу между двумя датами в днях?

Вычитание datetime-колонок даёт Timedelta: df['d2'] - df['d1']. Чтобы получить целое число дней — добавь .dt.days: (df['d2'] - df['d1']).dt.days. Для часов — .dt.total_seconds() / 3600. Частая задача: дни между регистрацией и первой покупкой, или возраст аккаунта относительно pd.Timestamp('today').

Что такое dt-accessor и зачем он?

dt — способ достать части даты из datetime-колонки: .dt.year, .dt.month, .dt.day, .dt.weekday (0=понедельник), .dt.quarter, .dt.hour, .dt.isocalendar().week. Работает векторно на всём столбце сразу. Без него пришлось бы гонять apply по строкам — в разы медленнее. Обязательное условие: колонка уже приведена к datetime через to_datetime.

Чем tz_localize отличается от tz_convert?

tz_localize навешивает таймзону на naive-даты (у которых зоны ещё нет) — говорит «эти времена в Москве». tz_convert переводит уже zone-aware даты в другую зону, пересчитывая часы. Порядок: сначала localize('Europe/Moscow'), потом при необходимости convert('UTC'). Перепутать — классическая ошибка, из-за которой события уезжают на несколько часов.

Зачем нужен date_range?

pd.date_range('2026-01-01', '2026-01-31', freq='D') генерирует непрерывную последовательность дат. Главное применение — календарная таблица: делаешь merge событий с полным диапазоном дат, чтобы дни без активности не выпали, а получили ноль. Без этого графики DAU и когорты рвутся на пропущенных днях. freq поддерживает 'D', 'W', 'ME' (конец месяца), 'H' и другие частоты.

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

Pandas: основы · Pandas groupby · Pandas merge / join · Pandas: временные ряды · NumPy векторизация · scipy: A/B-тесты · sklearn для аналитика · Графики: matplotlib / seaborn

Открыть весь Python-тренажёр (556 задач) →