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. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая обрабатывает архив заказов:
- Читает из
stdinцелое числоn— количество строк архива. - Читает следующие
nстрок; каждая содержит два токена через пробел:order_id(целое число) иorder_date(строка видаYYYY-MM-DD). Пример строки:101 2024-03-15. - Создаёт
pd.DataFrameс именемdfсо столбцами'order_id'(int) и'order_date'(str). - Преобразует столбец
'order_date'вdatetime64[ns]черезpd.to_datetime. Сохраняет обратно вdf['order_date']. - Создаёт столбец
'year'черезdf['order_date'].dt.year, столбец'month'черезdf['order_date'].dt.month, столбец'weekday'черезdf['order_date'].dt.dayofweek. - Читает из
stdinцелое числоtarget_month— номер месяца для фильтрации (от 1 до 12). - Фильтрует строки, где
month == target_month, черезdf.loc[mask]. Сохраняет вfiltered. - Выводит в
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
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Временные столбцы: парсинг, .dt-компоненты, длительности и фильтрация — задача по NumPy и pandas
- pandas Timedelta: длительность бронирования и фильтр по дате
- pandas Series из словаря: index, shape и dtype
- pandas DataFrame из списка словарей: пример и задача
- Загрузка CSV с явными типами и датами через readcsv — задача по NumPy и pandas
- Загрузка CSV в pandas: dtype, usecols и разбор дат
