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

Пропуски и дубликаты: что считать повтором

Два вопроса, которые задают третьими

Пропуски — пустые ячейки. Они опасны тем, что молчаливы: среднее по столбцу с пропусками посчитается без ошибки, просто по меньшему числу строк, и никто не предупредит.

df.isna().sum()          # пропуски по каждому столбцу
df.isna().sum().sum()    # сколько всего

Дубликаты — повторяющиеся записи. И вот здесь прячется ловушка, на которой попадаются почти все.


duplicated() отвечает не на тот вопрос

Вызов df.duplicated() ищет строки, совпадающие целиком, по всем столбцам сразу. Если два персонажа названы одинаково, но у них разная сила, — это разные строки, и такой повтор он не заметит.

А для работы важен как раз он. Стоит потом посчитать что-нибудь «по имени», и две разные записи тихо сольются в одну.

df.duplicated().sum()                  # повторы по ВСЕМ столбцам
df.duplicated(subset=["имя"]).sum()    # повторы по одному столбцу

По каким столбцам считать повторы — решает задача, а не функция. Если ты собираешься группировать по имени, то и повторы надо искать по имени.



Как проверить себя без готового ответа

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

  • Сумма пропусков по столбцам равна общему числу пропусков.
  • Повторов по одному столбцу не меньше, чем полных повторов строк. Получилось меньше — ошибка в коде.
  • Число уникальных значений плюс число повторов равно числу строк.
  • У столбца-идентификатора (имя, псевдоним) уникальных значений должно быть почти столько же, сколько строк. Если заметно меньше — в таблице есть одноимённые записи, и это надо понять до любых группировок.

Инвариант — вообще самый надёжный способ проверки, когда правильного ответа заранее никто не знает. Именно так проверяют себя в настоящей работе.


df.duplicated().sum() вернул 0. Что из этого следует?

Ты собираешься считать средние характеристики по имени персонажа. По каким столбцам проверить повторы?

Отметь верные утверждения.

В столбце с именами уникальных значений заметно меньше, чем строк. О чём это говорит?
Печать