Очистка заказов в pandas: даты, пропуски и дубли
Выгрузка заказов содержит разные написания статусов, даты строками, пропуски в суммах и повторные идентификаторы. Соберите обработку в одну функцию prepare_orders. Условие задаёт порядок операций и правило сохранения записи при удалении дублей.
Пайплайн подготовки таблицы заказов по спецификации
Точка входа: prepare_orders.
Вы получаете «сырой» DataFrame с заказами. По спецификации нужно выполнить ровно четыре шага подготовки и вернуть результат.
Спецификация:
- Нормализовать столбец
'status': убрать пробелы по краям (.str.strip()) и привести к нижнему регистру (.str.lower()). - Привести строковый столбец
'order_date'кdatetime64черезpd.to_datetimeсformat='%Y-%m-%d'. - Заполнить пропуски в столбце
'amount'значением0.0черезfillna. - Удалить дубли по столбцу
'order_id', оставив первое вхождение (keep='first').
Что уже дано
Проверяющая система вызывает функцию prepare_orders(df), передавая ей готовый pd.DataFrame. Функция должна быть определена в вашем коде. Никаких файлов и глобальных переменных система не создаёт.
Что нужно сделать
Реализуйте функцию prepare_orders(df: pd.DataFrame) -> pd.DataFrame, которая:
- принимает один аргумент
df— исходный DataFrame со столбцами'order_id','status','order_date','amount'; - выполняет четыре шага по спецификации;
- возвращает подготовленный DataFrame.
Исходный DataFrame изменять необязательно — можно работать с копией или напрямую.
Ввод и вывод
stdin не используется. Печатать через print в stdout ничего не нужно.
Проверяющая система вызывает prepare_orders(df) и проверяет возвращаемое значение:
- тип возвращаемого значения —
pd.DataFrame; - каждый аргумент передаётся как позиционный:
prepare_orders(df); - проверяются
shape,dtypeстолбцов и конкретные значения черезassert.
Пример использования
example_df = pd.DataFrame({
'order_id': [1, 2, 2, 3],
'status': [' Pending ', 'DONE', ' done ', 'Failed '],
'order_date': ['2024-01-01', '2024-01-02', '2024-01-02', '2024-01-03'],
'amount': [100.0, None, 999.0, 50.0],
})
result = prepare_orders(example_df)
print(result['order_id'].tolist())
print(result['status'].tolist())
print(result['amount'].tolist())
print(str(result['order_date'].dtype).startswith('datetime64'))
Результат:
[1, 2, 3]
['pending', 'done', 'failed']
[100.0, 0.0, 50.0]
True
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Pandas fillna: почему исходная таблица не изменилась
- Итоговый практикум — часть 1: подготовка одной таблицы — задача по NumPy и pandas
- Очистка pandas: dropna, str.replace и удаление дублей
- pandas: исправьте очистку таблицы транзакций
- Качество данных в pandas: пропуски, дубли и типы без изменений
- pandas: количество пропусков по столбцам — задача
