pandas dt: год, месяц, день недели и фильтрация дат

Аксессор .dt работает с подходящими типами дат и времени. Если столбец содержит строки, сначала преобразуйте их через pd.to_datetime, затем используйте .dt.year, .dt.month или .dt.weekday. День недели нумеруется от понедельника 0 до воскресенья 6.

Короткий пример

import pandas as pd
dates = pd.to_datetime(pd.Series(["2026-01-05", "2026-01-06"]))
print(dates.dt.month.tolist())
print(dates.dt.weekday.tolist())
print(dates[dates.dt.weekday == 0].dt.strftime("%Y-%m-%d").tolist())

Результат:

[1, 1]
[0, 1]
['2026-01-05']

Если преобразование использует errors="coerce", неразобранные значения становятся NaT; проверьте их отдельно. Текстовый формат отображения даты и её тип в памяти — разные вещи.

Попробуйте самостоятельно

Ниже — отдельное задание с другими данными. Напишите решение и запустите проверку кода без регистрации. Для последовательного обучения откройте курс.

Документация.

Архив заказов: год, месяц, день недели и фильтрация по месяцу

Что уже дано

Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.

Что нужно сделать

Напишите программу, которая обрабатывает архив заказов:

  1. Читает из stdin целое число n — количество строк архива.
  2. Читает следующие n строк; каждая содержит два токена через пробел: order_id (целое число) и order_date (строка вида YYYY-MM-DD). Пример строки: 101 2024-03-15.
  3. Создаёт pd.DataFrame с именем df со столбцами 'order_id' (int) и 'order_date' (str).
  4. Преобразует столбец 'order_date' в datetime64[ns] через pd.to_datetime. Сохраняет обратно в df['order_date'].
  5. Создаёт столбец 'year' через df['order_date'].dt.year, столбец 'month' через df['order_date'].dt.month, столбец 'weekday' через df['order_date'].dt.dayofweek.
  6. Читает из stdin целое число target_month — номер месяца для фильтрации (от 1 до 12).
  7. Фильтрует строки, где month == target_month, через df.loc[mask]. Сохраняет в filtered.
  8. Выводит в stdout ровно len(filtered) + 2 строк:
  • Строки 1…len(filtered): для каждой строки filtered (в порядке исходного DataFrame) одну строку вида <order_id> <year> <month> <weekday>.
  • Предпоследняя строка: count=<len(filtered)>.
  • Последняя строка: weekdays=<список>, где список — значения weekday отфильтрованных строк через запятую и пробел, в порядке исходного DataFrame. Если filtered пуст — выведите weekdays=.

Ввод и вывод

Программа читает stdin и пишет в stdout.

Формат ввода

n
order_id YYYY-MM-DD
...
target_month

Дополнительные ограничения: n >= 1; таблица содержит явно описанные в условии столбцы.

Формат вывода

<order_id> <year> <month> <weekday>
...
count=<k>
weekdays=<w1>, <w2>, ...

Пример

Ввод
5
101 2024-01-08
102 2024-03-15
103 2024-03-22
104 2024-05-01
105 2024-03-01
3
Вывод
102 2024 3 4
103 2024 3 4
105 2024 3 4
count=3
weekdays=4, 4, 4
РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи