Задача курса

Проверка качества данных в 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, которая:

  1. Не изменяет исходный DataFrame — никаких fillna, drop_duplicates, str.lower или других мутирующих операций.
  2. Возвращает словарь со следующими ключами (все значения — скаляры или булевы):
Ключ Тип Смысл
'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

Попробуйте решить

РешениеPython
Без регистрации · результат не сохраняется