Статья Автор: Деникина Н.В., Деникин А.В.

Краткий справочник по предобработке

Краткий справочник по предобработке

Это не рецепт, который надо механически повторить. Памятка нужна, чтобы перед каждой командой задать вопрос: какую проблему я исправляю и откуда знаю, что выбранное действие допустимо?

Маршрут работы: обнаружить → объяснить → выбрать действие → исправить → проверить.
 

Сохраняем исходник

df_original = pd.read_csv("marvel_characters_dirty.csv")
df = df_original.copy()

Все преобразования выполняйте над копией. Исходная таблица нужна для сравнения и повторного запуска.
 

Пропуски

Ситуация Решение в лаборатории
нет full_name удалить строку
нет alias Unknown
нет корректной costume_cost медиана корректных значений
нет power, intelligence, first_appearance оставить NaN

Не пытайтесь получить ноль пропусков любой ценой. Честный NaN лучше придуманного числа.


Почему power = 130 нельзя просто заменить на 100?


Строки и категории

s = s.astype("string").str.strip().str.title()

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

Числа, записанные как текст
x = pd.to_numeric(x, errors="coerce")

errors="coerce" превращает непонятные записи в NaN. Для costume_cost сначала удалите запятые-разделители тысяч.


Определите верность утверждений.


Невозможные значения

power и intelligence должны лежать в диапазоне 1–100, стоимость не может быть отрицательной, а год первого появления не может быть позже 2026. Нарушение правила заменяем на NaN, а не подгоняем под ближайшую границу.

Дубликаты

df.duplicated() ищет полные дубли. В этой работе удаляем полные дубли только после нормализации строк.
 

Проверка результата

assert df_clean["power"].dropna().between(1, 100).all()
assert not df_clean.duplicated().any()

В конце нужны два результата: df_clean и audit — короткий отчёт о том, что изменилось.


Восстановите общую логику последовательности обработки.


Печать