Очистка заказов в pandas: даты, пропуски и дубли

Выгрузка заказов содержит разные написания статусов, даты строками, пропуски в суммах и повторные идентификаторы. Соберите обработку в одну функцию prepare_orders. Условие задаёт порядок операций и правило сохранения записи при удалении дублей.

Программа курса «NumPy и pandas: практический тренажёр».

Пайплайн подготовки таблицы заказов по спецификации

Точка входа: prepare_orders.

Вы получаете «сырой» DataFrame с заказами. По спецификации нужно выполнить ровно четыре шага подготовки и вернуть результат.

Спецификация:

  1. Нормализовать столбец 'status': убрать пробелы по краям (.str.strip()) и привести к нижнему регистру (.str.lower()).
  2. Привести строковый столбец 'order_date' к datetime64 через pd.to_datetime с format='%Y-%m-%d'.
  3. Заполнить пропуски в столбце 'amount' значением 0.0 через fillna.
  4. Удалить дубли по столбцу '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
РешениеPython

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

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

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