Качество данных в pandas: пропуски, дубли и типы без изменений
Проверку качества данных можно выполнить без очистки исходного DataFrame. isna().sum() считает пропуски по столбцам, а duplicated(subset=[...]).sum() — повторные строки по выбранному ключу с учётом keep.
Проверка и исправление — разные операции
Если задача требует только диагностику, не заменяйте пропуски и не удаляйте дубли: это изменит данные, которые нужно оценить. Отдельно проверьте наличие обязательных столбцов и их типы. Чтобы убедиться, что аудит ничего не изменил, можно сравнить таблицу с её копией через pd.testing.assert_frame_equal.
Пример на других данных
import pandas as pd
df = pd.DataFrame({"sku": [11, 11, 12], "price": [100.0, None, 80.0]})
before = df.copy(deep=True)
print(int(df.isna().sum().sum()))
print(int(df.duplicated(subset=["sku"]).sum()))
pd.testing.assert_frame_equal(df, before)
print("Таблица не изменилась")
Результат:
1 1 Таблица не изменилась
Решите задачу
Ниже — условие и редактор Python с проверкой без регистрации. Пример выше показывает приём на других данных; для задачи соблюдайте её формат ввода и результата. Курс NumPy и pandas помогает пройти темы по порядку.
Аудит качества таблицы заказов: 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
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Pandas fillna: почему исходная таблица не изменилась
- Итоговый практикум — часть 1: подготовка одной таблицы — задача по NumPy и pandas
- Очистка заказов в pandas: даты, пропуски и дубли
- Очистка pandas: dropna, str.replace и удаление дублей
- pandas: исправьте очистку таблицы транзакций
- pandas: количество пропусков по столбцам — задача
