pandas: типы столбцов и очистка по правилу

Временные столбцы: парсинг, .dt-компоненты, длительности и фильтрация

Содержание курса

Найди и исправь: три ошибки в .dt-компонентах и переводе Timedelta в дни

Что уже дано

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

В редакторе уже есть сломанный код. В нём ровно три ошибки в трёх независимых строках:

  1. Столбец 'month' вычисляется через df['start'].dt.month — но перед этим df['start'] не преобразован в datetime64[ns], он остаётся строковым (object). Нужно добавить pd.to_datetime до обращения к .dt.
  2. День недели извлекается через df['start'].dt.day, хотя нужен день недели — используйте dt.dayofweek.
  3. Длительность в днях вычисляется через df['duration'].dt.days, хотя этот атрибут возвращает только целую часть суток (часы теряются). Нужно использовать .dt.total_seconds() / 86400.

Каждая ошибка находится в отдельной строке. Исправьте все три.

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

Исправьте три ошибки так, чтобы программа:

  1. Читала из stdin целое число n — количество строк.
  2. Читала следующие n строк; каждая содержит пять токенов через пробел: id, дату начала, время начала, дату конца и время конца. Формат: id YYYY-MM-DD HH:MM YYYY-MM-DD HH:MM — итого 5 токенов; токены [1]+[2] образуют start, токены [3]+[4]end.
  3. Строила pd.DataFrame со столбцами 'id', 'start' (str), 'end' (str).
  4. Преобразовывала 'start' и 'end' в datetime64[ns] через pd.to_datetime.
  5. Создавала столбец 'month' через df['start'].dt.month.
  6. Создавала столбец 'weekday' через df['start'].dt.dayofweek.
  7. Вычисляла столбец 'duration' = df['end'] - df['start'] и столбец 'days' = df['duration'].dt.total_seconds() / 86400.
  8. Для каждой строки выводила: <id> <month> <weekday> <days>, где days — с округлением до 4 знаков.

Ввод и вывод

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

Формат ввода

n
id YYYY-MM-DD HH:MM YYYY-MM-DD HH:MM
...

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

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

<id> <month> <weekday> <days>
...
О данных в ответах

Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.

Проверяется тестами (1)
  • Тест 1
    Ввод
    3
    1 2024-01-10 08:00 2024-01-10 10:30
    2 2024-03-05 14:00 2024-03-05 18:00
    3 2024-04-20 07:00 2024-04-21 07:00
    Ожидаемый вывод
    1 1 2 0.1042
    2 3 1 0.1667
    3 4 5 1.0
Решение
Как проверяется решение

Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.

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