pandas: исправьте очистку таблицы транзакций

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

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

Найди и исправь: три ошибки в пайплайне подготовки таблицы транзакций

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

Спецификация подготовки:

  1. Нормализовать столбец 'channel': убрать пробелы по краям (.str.strip()) и привести к нижнему регистру (.str.lower()).
  2. Привести строковый столбец 'created_at' к datetime64 через pd.to_datetime с format='%Y-%m-%d'.
  3. Заполнить пропуски в столбце 'amount' значением 0.0 через fillna — результат присвоить обратно в столбец.
  4. Удалить дубли по столбцу 'txn_id', оставив первое вхождение (keep='first').

Три ошибки в коде:

  1. При нормализации 'channel' применён только .str.lower() — шаг .str.strip() пропущен.
  2. Результат fillna(0.0) не присвоен обратно в df['amount'] — пропуски остаются.
  3. В drop_duplicates не указан subset=['txn_id'] — удаляются только полностью одинаковые строки.

Что уже дано

В редакторе находится функция prepare_transactions(df) со сломанным кодом. Проверяющая система вызывает эту функцию, передавая ей готовый pd.DataFrame. Никаких файлов и глобальных переменных система не создаёт.

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

Исправьте ровно три ошибки в функции prepare_transactions, чтобы она:

  • принимала df — DataFrame со столбцами 'txn_id', 'channel', 'created_at', 'amount';
  • выполняла четыре шага спецификации в указанном порядке;
  • возвращала подготовленный pd.DataFrame.

Не добавляйте новые шаги и не меняйте порядок существующих.

Ввод и вывод

stdin не используется. Печатать через print в stdout ничего не нужно.

Проверяющая система вызывает prepare_transactions(df) и проверяет возвращаемое значение:

  • тип — pd.DataFrame;
  • аргумент передаётся позиционно;
  • проверяются shape, dtype столбцов, отсутствие пропусков в 'amount', уникальность 'txn_id' и конкретные значения 'channel'.

Пример использования

example_df = pd.DataFrame({
 'txn_id': [11, 12, 12, 13],
 'channel': [' Online ', 'RETAIL', ' retail ', 'Mobile '],
 'created_at': ['2024-02-01', '2024-02-02', '2024-02-02', '2024-02-03'],
 'amount': [10.0, None, 70.0, 5.0],
})
result = prepare_transactions(example_df)
print(result['txn_id'].tolist())
print(result['channel'].tolist())
print(result['amount'].tolist())

Результат:

[11, 12, 13]
['online', 'retail', 'mobile']
[10.0, 0.0, 5.0]
РешениеPython

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

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

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