В этой статье объясняется, как идентифицировать повторяющиеся записи в данных и различные способы решения проблемы наличия повторяющихся записей.
Почему наличие повторяющихся записей в данных является проблемой?
Присутствие повторяющихся значений в данных часто игнорируется многими программистами. Но очень важно иметь дело с повторяющимися записями в данных.
Наличие повторяющихся записей может привести к неправильному анализу данных и принятию решений.
Например, что происходит, когда вы заменяете пропущенные значения (вменение) средними значениями в данных с повторяющимися записями?
В этом случае для вменения может быть использовано неправильное среднее значение. Давайте возьмем пример.
Рассмотрим следующие данные. Данные содержат два столбца: «Имя» и «Вес». Обратите внимание, что значение веса для «Джона» повторяется. Кроме того, значение веса «Стива» отсутствует.
Если кто-то желает приписать недостающее значение веса Стива среднему значению всех весовых значений, то приписание будет выполнено с использованием неправильного среднего значения, т. е.
(98 + 50 + 67 + 66 + 50)/5 = 66.2
Но фактическое среднее значение данных, игнорируя повторяющееся значение, равно
(98 + 50 + 67 + 66)/4 = 70.25
Следовательно, пропущенное значение будет неправильно вменено, если мы не предпримем никаких действий с повторяющимися записями.
Более того, повторяющиеся значения могут даже повлиять на бизнес-решения, принимаемые с использованием таких ошибочных данных.
Таким образом, с дублирующими записями данных следует бороться, чтобы избежать проблем с данными.
Теперь давайте рассмотрим различные методы борьбы с повторяющимися записями в данных.
Выявление повторяющихся значений в данных
Мы можем использовать метод pandas duduced, чтобы идентифицировать строки, которые дублируются в данных.
Теперь давайте разберемся с повторяющимися значениями на примере.
## Importing required libraries import numpy as np import pandas as pd import warnings warnings.filterwarnings('ignore') ## Creating a dataframe Name = ['Mark', 'John', 'Jotaro', 'Mark', 'John', 'Steve'] Weight = [98, 50, 67, 66, 50, np.nan] Height = [170, 175, 172, 170, 175, 166] df = pd.DataFrame() df['Name'] = Name df['Weight'] = Weight df['Height'] = Height df
Выявление повторяющихся значений:
## Identifying the duplicated values (default behavior) df.duplicated()
Мы получаем значение True, если присутствует повторяющаяся запись, и False, если присутствуют уникальные записи.
Обратите внимание, что по умолчанию метод duulated() использует все столбцы для поиска повторяющихся записей. Но мы можем использовать подмножество столбцов и для поиска дубликатов. Для этого метод дублированный() имеет параметр с именем subset. Параметр subset принимает список имен столбцов, которые мы хотим использовать для поиска дубликатов.
## subset parameter of duplicated() method df.duplicated(subset=['Name','Height'])
Кроме того, метод duulated() имеет еще один важный параметр с именем keep. Значение параметра keep определяет, будем ли мы считать первую или последнюю запись уникальной среди всех дублированных записей. У нас также есть возможность считать все повторяющиеся записи неуникальными.
keep = ‘first’: первая запись среди всех повторяющихся записей считается уникальной.
keep = ‘last’: последняя запись во всех повторяющихся записях считается уникальной.
keep = False: все повторяющиеся записи считаются неуникальными.
## keep parameter of duplicated() method df.duplicated(keep='first')
Обратите внимание, что первое повторяющееся значение (с индексом 1) считается уникальным, а все остальные (с индексом 4) — дубликатами.
## keep parameter of duplicated() method df.duplicated(keep='last')
Обратите внимание, что последнее повторяющееся значение (с индексом 4) считается уникальным, а все остальные (с индексом 1) считаются дубликатами.
## keep parameter of duplicated() method df.duplicated(keep=False)
Обратите внимание, что здесь показаны все повторяющиеся записи (с индексом 1 и индексом 4).
Как бороться с повторяющимися записями в данных
Следующим шагом после выявления повторяющихся записей является борьба с ними.
Существует два способа борьбы с повторяющимися записями в данных.
Удаление повторяющихся записей
Начнем с подхода, при котором мы удаляем повторяющиеся записи.
Для этого мы можем использовать метод pandas drop_duulates().
По умолчанию метод drop_duulates() сохраняет первую запись из набора всех повторяющихся записей, а затем удаляет остальные из данных. Кроме того, по умолчанию метод drop_duulates() использует все столбцы для идентификации повторяющихся записей.
Но это поведение по умолчанию можно изменить с помощью двух параметров метода drop_duplications(). Они есть
- сохранить
- подмножество
Они работают точно так же, как работают параметры keep и subset метода duulated().
"""dropping duplicate values using the pandas drop_duplicates() method (default behavior)""" df1 = df.drop_duplicates() df1
"""dropping duplicate values using the pandas drop_duplicates() method with subset and keep parameters (custom behavior)""" df2 = df.drop_duplicates(subset=['Weight'], keep='last') df2
Обновление повторяющихся записей
Иногда нам нужно заменить повторяющиеся записи каким-либо значением. Допустим, мы нашли две повторяющиеся записи, а затем узнали, что человек, получивший данные, случайно указал неправильное имя в одной из повторяющихся записей. Поэтому в таком случае нам бы хотелось указать имя правильного человека. Таким образом, это решит проблему повторяющихся значений.
df.duplicated(keep=False)
Здесь у нас есть повторяющиеся записи по индексам 1 и 4. Теперь, если мы изменили значение столбца «Имя» по индексу 1, у нас больше не будет повторяющихся значений.
## changing the 'Name' value for the first duplicate record df.iloc[1, 0] = 'Dio' df
Мы изменили значение «Имя» для первой повторяющейся записи. Теперь давайте еще раз проверим, есть ли в данных дублированные записи или нет.
df.duplicated()
Теперь у нас нет дубликатов записей.
Спасибо, что прочитали! Если у вас есть какие-либо мысли по поводу статьи, дайте мне знать.
Вы затрудняетесь выбрать, что прочитать дальше? Не волнуйтесь, я знаю статью, которая, я думаю, вам будет интересна.
и еще один…
Шивам Шинде
Хорошего дня!
Ссылки: