Задача курса
Проверка качества данных в pandas без изменения DataFrame
Курс «NumPy и pandas: практический тренажёр» · урок «Итоговый практикум — часть 1: подготовка одной таблицы»
Условие
Аудит качества таблицы заказов: read-only проверка без мутаций
Аналитик хочет убедиться, что таблица заказов прошла подготовку корректно, не изменяя её. Для этого нужна функция-аудитор, которая читает DataFrame и возвращает словарь диагностических показателей.
Что уже дано
stdin не используется. Печатать через print в stdout ничего не нужно.
Проверяющая система вызывает audit_prepared_orders(df), передавая готовый pd.DataFrame. Функция должна быть определена в вашем коде. Никаких файлов и глобальных переменных система не создаёт.
Для вызова функции проверяющая система использует DataFrames с четырьмя столбцами:
'order_id'— целые числа;'status'— строки (object);'order_date'— может бытьdatetime64или строковым столбцом;'amount'— числа с плавающей точкой.
Что нужно сделать
Реализуйте функцию audit_prepared_orders(df: pd.DataFrame) -> dict, которая:
- Не изменяет исходный DataFrame — никаких
fillna,drop_duplicates,str.lowerили других мутирующих операций. - Возвращает словарь со следующими ключами (все значения — скаляры или булевы):
| Ключ | Тип | Смысл |
|---|---|---|
'has_required_columns' |
bool |
все четыре столбца 'order_id', 'status', 'order_date', 'amount' присутствуют в df.columns |
'total_missing' |
int |
суммарное число пропусков во всём DataFrame (df.isna().sum().sum()) |
'duplicate_order_ids' |
int |
число строк, помеченных как дубли по 'order_id' с keep='first' (то есть df.duplicated(subset=['order_id'], keep='first').sum()) |
'status_normalized' |
bool |
все значения в столбце 'status' совпадают с результатом .str.strip().str.lower() (то есть нет значений с лишними пробелами или заглавными буквами) |
'order_date_is_datetime' |
bool |
dtype столбца 'order_date' начинается с 'datetime64' |
'is_ready' |
bool |
True тогда и только тогда, когда все остальные пять условий выполнены одновременно: has_required_columns равно True, total_missing равно 0, duplicate_order_ids равно 0, status_normalized равно True, order_date_is_datetime равно True |
Ввод и вывод
stdin не используется. Печатать через print в stdout ничего не нужно.
Проверяющая система вызывает audit_prepared_orders(df) с позиционным аргументом и проверяет возвращаемый словарь:
- тип возвращаемого значения —
dict; - все шесть ключей присутствуют;
- значения вычислены по формулам, описанным выше;
- исходный DataFrame после вызова функции не изменён.
Пример использования
import pandas as pd
df_ready = pd.DataFrame({
'order_id': [1, 2, 3],
'status': ['pending', 'done', 'failed'],
'order_date': pd.to_datetime(['2024-01-01', '2024-01-02', '2024-01-03']),
'amount': [100.0, 200.0, 50.0],
})
result = audit_prepared_orders(df_ready)
print(result['has_required_columns'])
print(result['total_missing'])
print(result['duplicate_order_ids'])
print(result['status_normalized'])
print(result['order_date_is_datetime'])
print(result['is_ready'])
Результат:
True 0 0 True True True
