Задача курса
pandas CategoricalDtype: значения вне шкалы и NaN
Курс «NumPy и pandas: практический тренажёр» · урок «Категориальные столбцы: CategoricalDtype и упорядоченная сортировка»
Условие
Категориальный тип и значения вне шкалы: NaN при astype и категориальная сортировка
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая работает с таблицей задач и демонстрирует поведение CategoricalDtype при наличии значений, не входящих в список категорий.
- Читает из
stdinцелое числоn— количество строк. - Читает следующие
nстрок; каждая содержит два токена через пробел:task_id(целое число) иstatus(строка без пробелов). Пример строки:1 открыта. - Строит
pd.DataFrameс именемdfиз словаря списков с ключами'task_id'(int) и'status'(str). - Шаг A. Подсчёт значений вне шкалы. Создаёт множество допустимых значений
valid = {'открыта', 'в_работе', 'закрыта'}. Считает количество строк, гдеstatusне входит вvalid, через булеву маску. Выводитoutside=<k>— целое число. - Шаг B. Создание и применение CategoricalDtype. Создаёт
cat_dtype = pd.CategoricalDtype(categories=['открыта', 'в_работе', 'закрыта'], ordered=True)и присваивает тип столбцуdf['status']черезastype. Результат сохраняет обратно вdf['status']. - Шаг C. Подсчёт NaN после astype. Выводит
nan_after=<k>— количество NaN вdf['status']после преобразования (значения вне шкалы стали NaN). - Шаг D. Сортировка. Сортирует
dfпо'status'черезdf.sort_values('status'), сохраняет вdf_sorted. Выводит значенияdf_sorted['status'].tolist()как строку Python (включаяnan-значения, которые окажутся в конце или начале — pandas помещает их последними по умолчанию). - Шаг E. Проверка dtype и ordered. Выводит
str(df['status'].dtype)иstr(df['status'].cat.ordered)— каждое на отдельной строке.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Формат ввода
n task_id1 status1 task_id2 status2 ...
Формат вывода
Пять строк:
outside=<k>
nan_after=<k>
<df_sorted['status'].tolist() как строка Python>
<dtype>
<cat.ordered>
Примеры
Пример 1
- Ввод
6 1 открыта 2 в_работе 3 закрыта 4 отложена 5 открыта 6 закрыта
- Ожидаемый результат
outside=1 nan_after=1 ['открыта', 'открыта', 'в_работе', 'закрыта', 'закрыта', nan] category True
Попробуйте решить
РешениеPython
Без регистрации · результат не сохраняется
