pandas: исправьте очистку таблицы транзакций
Функция подготовки транзакций уже написана, но пробелы в названиях каналов, пустые суммы и повторы остаются. Исправьте три операции так, чтобы результат соответствовал заданному формату. Проверка выполняется для функции prepare_transactions.
Найди и исправь: три ошибки в пайплайне подготовки таблицы транзакций
В редакторе уже есть функция prepare_transactions, которая должна подготовить таблицу транзакций по спецификации, но содержит ровно три ошибки в трёх независимых строках.
Спецификация подготовки:
- Нормализовать столбец
'channel': убрать пробелы по краям (.str.strip()) и привести к нижнему регистру (.str.lower()). - Привести строковый столбец
'created_at'кdatetime64черезpd.to_datetimeсformat='%Y-%m-%d'. - Заполнить пропуски в столбце
'amount'значением0.0черезfillna— результат присвоить обратно в столбец. - Удалить дубли по столбцу
'txn_id', оставив первое вхождение (keep='first').
Три ошибки в коде:
- При нормализации
'channel'применён только.str.lower()— шаг.str.strip()пропущен. - Результат
fillna(0.0)не присвоен обратно вdf['amount']— пропуски остаются. - В
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]
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Pandas fillna: почему исходная таблица не изменилась
- Итоговый практикум — часть 1: подготовка одной таблицы — задача по NumPy и pandas
- Очистка заказов в pandas: даты, пропуски и дубли
- Очистка pandas: dropna, str.replace и удаление дублей
- Качество данных в pandas: пропуски, дубли и типы без изменений
- pandas: количество пропусков по столбцам — задача
