Введение
Как аналитик данных, мы несем ответственность за обеспечение целостности данных для получения точной и достоверной информации. Очистка данных играет жизненно важную роль в этом процессе, и повторяющиеся значения являются одной из наиболее распространенных проблем, с которыми сталкиваются аналитики данных. Повторяющиеся значения могут потенциально искажать понимание. Поэтому очень важно иметь эффективные методы для работы с повторяющимися значениями. В этой статье мы узнаем, как идентифицировать повторяющиеся значения и обрабатывать их, а также познакомимся с рекомендациями по управлению дубликатами.
Идентификация повторяющихся значений
Первым шагом в обработке повторяющихся значений является их идентификация. Выявление повторяющихся значений — важный шаг в очистке данных. Pandas предлагает несколько методов для выявления повторяющихся значений в фрейме данных. В этом разделе мы обсудим duplicated()
функции и value_counts()
функция выявления повторяющихся значений.
Усин дублируется()
Ассоциация duplicated()
function — это библиотечная функция Pandas, которая проверяет наличие повторяющихся строк в DataFrame. Результат duplicated()
Функция представляет собой логический ряд той же длины, что и входной кадр данных, где каждый элемент указывает, является ли соответствующая строка дубликатом.
Рассмотрим простой пример duplicated()
функция:
import pandas as pd data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) df_duplicates = df.duplicated()
print(df_duplicates)
Вывод:
0 False
1 False
2 False
3 False
4 False
5 True
dtype: bool
В приведенном выше примере мы создали DataFrame, содержащий имена студентов и их общие баллы. Мы вызвали duplicated()
на DataFrame, который сгенерировал логический ряд с False
представляющие уникальные ценности и True
представляющие повторяющиеся значения.
В этом примере первое вхождение значения считается уникальным. Однако что, если мы хотим, чтобы последнее значение считалось уникальным, и мы не хотим учитывать все столбцы при идентификации повторяющихся значений? Здесь мы можем изменить duplicated()
функции путем изменения значений параметров.
Параметры: подмножество и сохранение
Ассоциация duplicated()
Функция предлагает параметры настройки через свои необязательные параметры. Он имеет два параметра, как описано ниже:
-
subset
: этот параметр позволяет нам указать подмножество столбцов, которые следует учитывать при обнаружении дубликатов. Подмножество установлено наNone
по умолчанию, что означает, что учитывается каждый столбец в DataFrame. Чтобы указать имена столбцов, мы можем предоставить подмножеству список имен столбцов.Вот пример использования параметра подмножества:
df_duplicates = df.duplicated(subset=['StudentName'])
Вывод:
0 False 1 False 2 False 3 False 4 False 5 True dtype: bool
-
keep
: этот параметр позволяет нам выбрать, какой экземпляр повторяющейся строки должен быть помечен как дубликат. Возможные значения для keep:"first"
: это значение по умолчанию дляkeep
вариант. Он идентифицирует все дубликаты, кроме первого вхождения, считая первое значение уникальным."last"
: Этот параметр идентифицирует последнее вхождение как уникальное значение. Все остальные вхождения будут считаться дубликатами.False
: этот параметр помечает каждый экземпляр как повторяющееся значение.
Вот пример использования keep
Параметр:
df_duplicates = df.duplicated(keep='last')
print(df_duplicates)
Вывод:
0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
Визуализируйте повторяющиеся значения
Ассоциация value_counts()
Функция — это второй подход к выявлению дубликатов. value_counts()
Функция подсчитывает, сколько раз каждое уникальное значение появляется в столбце. Применяя value_counts()
функцию для определенного столбца, можно визуализировать частоту каждого значения.
Вот пример использования value_counts()
функция:
import matplotlib.pyplot as plt
import pandas as pd data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) name_counts = df['StudentName'].value_counts()
print(name_counts)
Вывод:
Mark 2
Ali 1
Bob 1
John 1
Johny 1
Name: StudentName, dtype: int64
Давайте теперь визуализируем повторяющиеся значения с помощью гистограммы. Мы можем эффективно визуализировать частоту повторяющихся значений с помощью гистограммы.
name_counts.plot(kind='bar')
plt.xlabel('Student Name')
plt.ylabel('Frequency')
plt.title('Duplicate Name Frequencies')
plt.show()
Обработка повторяющихся значений
После выявления повторяющихся значений пришло время их устранить. В этом разделе мы рассмотрим различные стратегии удаления и обновления повторяющихся значений с помощью команды pandas. drop_duplicates()
и replace()
функции. Кроме того, мы обсудим агрегирование данных с повторяющимися значениями с помощью groupby()
функции.
Удаление повторяющихся значений
Наиболее распространенный подход к обработке дубликатов — удаление их из DataFrame. Чтобы исключить повторяющиеся записи из DataFrame, мы будем использовать drop_duplicates()
функция. По умолчанию эта функция сохраняет первый экземпляр каждой повторяющейся строки и удаляет последующие вхождения. Он идентифицирует повторяющиеся значения на основе всех значений столбца; однако мы можем указать столбец, который следует учитывать, используя параметры подмножества.
Синтаксис drop_duplicates()
со значениями по умолчанию в параметрах выглядит следующим образом:
dataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
Ассоциация subset
и keep
параметры имеют то же объяснение, что и в duplicates()
. Если мы установим третий параметр inplace
в True
, все изменения будут выполняться непосредственно в исходном DataFrame, в результате чего метод вернет None
и исходный DataFrame модифицируется. По умолчанию, inplace
is False
.
Вот пример drop_duplicates()
функция:
df.drop_duplicates(keep='last', inplace=True)
print(df)
Вывод:
StudentName Score
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45
Ознакомьтесь с нашим практическим руководством по изучению Git с рекомендациями, принятыми в отрасли стандартами и прилагаемой памяткой. Перестаньте гуглить команды Git и на самом деле изучить это!
В приведенном выше примере первая запись была удалена, поскольку она была дубликатом.
Замена или обновление повторяющихся значений
Второй метод обработки дубликатов включает замену значения с помощью функции Pandas. replace()
функция. replace()
Функция позволяет нам заменять определенные значения или шаблоны в DataFrame новыми значениями. По умолчанию он заменяет все экземпляры значения. Однако, используя параметр limit, мы можем ограничить количество замен.
Вот пример использования replace()
функция:
df['StudentName'].replace('Mark', 'Max', limit=1, inplace=True)
print(df)
Вывод:
StudentName Score
0 Max 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45
Здесь ограничение использовалось для замены первого значения. Что, если мы хотим заменить последнее вхождение? В этом случае мы объединим duplicated()
и replace()
функции. С использованием duplicated()
, мы укажем последний экземпляр каждого повторяющегося значения, получим номер строки с помощью loc
функцию, а затем замените ее с помощью replace()
функция. Вот пример использования duplicated()
и replace()
функции вместе.
last_occurrences = df.duplicated(subset='StudentName', keep='first') last_occurrences_rows = df[last_occurrences] df.loc[last_occurrences, 'StudentName'] = df.loc[last_occurrences, 'StudentName'].replace('Mark', 'Max') print(df)
Вывод:
StudentName Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Max 45
Пользовательские функции для сложных замен
В некоторых случаях обработка повторяющихся значений требует более сложных замен, чем их простое удаление или обновление. Пользовательские функции позволяют нам создавать специальные правила замены, адаптированные к нашим потребностям. С помощью панд apply()
функцию, мы можем применить пользовательскую функцию к нашим данным.
Например, предположим, что столбец «StudentName» содержит повторяющиеся имена. Наша цель — заменить дубликаты с помощью пользовательской функции, которая добавляет число в конце повторяющихся значений, делая их уникальными.
def add_number(name, counts): if name in counts: counts[name] += 1 return f'{name}_{counts[name]}' else: counts[name] = 0 return name name_counts = {} df['is_duplicate'] = df.duplicated('StudentName', keep=False)
df['StudentName'] = df.apply(lambda x: add_number(x['StudentName'], name_counts) if x['is_duplicate'] else x['StudentName'], axis=1)
df.drop('is_duplicate', axis=1, inplace=True)
print(df)
Вывод:
StudentName Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark_1 45
Агрегированные данные с повторяющимися значениями
Данные, содержащие повторяющиеся значения, можно агрегировать, чтобы обобщить и получить представление о данных. Панды groupby()
Функция позволяет агрегировать данные с повторяющимися значениями. С помощью groupby()
можно сгруппировать один или несколько столбцов и вычислить среднее значение, медиану или сумму другого столбца для каждой группы.
Вот пример использования groupby()
Метод:
grouped = df.groupby(['StudentName']) df_aggregated = grouped.sum()
print(df_aggregated)
Вывод:
Score
StudentName Ali 65
Bob 76
John 44
Johny 39
Mark 90
Дополнительные методы
Чтобы справиться с более сложными сценариями и обеспечить точный анализ, мы можем использовать некоторые передовые методы. В этом разделе мы обсудим работу с нечеткими дубликатами, дублирование данных временных рядов и дублирование значений индекса.
Нечеткие дубликаты
Нечеткие дубликаты — это записи, которые не являются точными совпадениями, но похожи, и они могут возникать по разным причинам, включая ошибки при вводе данных, орфографические ошибки и различия в форматировании. Мы будем использовать fuzzywuzzy
Библиотека Python для выявления дубликатов с использованием сопоставления строк.
Вот пример обработки нечетких значений:
import pandas as pd
from fuzzywuzzy import fuzz def find_fuzzy_duplicates(dataframe, column, threshold): duplicates = [] for i in range(len(dataframe)): for j in range(i+1, len(dataframe)): similarity = fuzz.ratio(dataframe[column][i], dataframe[column][j]) if similarity >= threshold: duplicates.append(dataframe.iloc[[i, j]]) if duplicates: duplicates_df = pd.concat(duplicates) return duplicates_df else: return pd.DataFrame() data = { 'StudentName': ['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark'], 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data) threshold = 70 fuzzy_duplicates = find_fuzzy_duplicates(df, 'StudentName', threshold)
print("Fuzzy duplicates:")
print(fuzzy_duplicates.to_string(index=False))
В этом примере мы создаем пользовательскую функцию find_fuzzy_duplicates
который принимает DataFrame, имя столбца и порог сходства в качестве входных данных. Функция перебирает каждую строку в DataFrame и сравнивает ее с последующими строками, используя метод fuzz.ratio
метод из fuzzywuzzy
библиотека. Если показатель сходства больше или равен пороговому значению, повторяющиеся строки добавляются в список. Наконец, функция возвращает DataFrame, содержащий нечеткие дубликаты.
Вывод:
Fuzzy duplicates:
StudentName Score Mark 45 Mark 45 John 44 Johny 39
В приведенном выше примере нечеткие дубликаты идентифицируются в столбце «Имя ученика». Функция find_fuzzy_duplicates сравнивает каждую пару строк, используя fuzzywuzzy
библиотека fuzz.ratio
Функция, которая вычисляет показатель сходства на основе расстояния Левенштейна. Мы установили пороговое значение 70, что означает, что любое имя с коэффициентом соответствия выше 70 будет считаться нечетким значением. После определения нечетких значений мы можем управлять ими, используя метод, описанный в разделе «Обработка дубликатов».
Обработка дубликатов данных временных рядов
Дубликаты могут возникать, когда несколько наблюдений записываются с одной и той же отметкой времени. Эти значения могут привести к необъективным результатам, если с ними не обращаться должным образом. Вот несколько способов обработки повторяющихся значений в данных временных рядов.
- Удаление точных дубликатов: в этом методе мы удаляем одинаковые строки с помощью
drop_duplicates
функция в пандах. - Дублирование временных меток с разными значениями: если у нас одинаковая метка времени, но разные значения, мы можем агрегировать данные и получить больше информации, используя
groupby()
, или мы можем выбрать самое последнее значение и удалить остальные, используяdrop_duplicates()
сkeep
параметр установлен на «последний».
Обработка повторяющихся значений индекса
Прежде чем обращаться к повторяющимся значениям индекса, давайте сначала определим, что такое индекс в Pandas. Индекс — это уникальный идентификатор, назначаемый каждой строке DataFrame. Pandas по умолчанию присваивает числовой индекс, начинающийся с нуля. Однако индекс может быть присвоен любому столбцу или комбинации столбцов. Чтобы идентифицировать дубликаты в столбце Index, мы можем использовать duplicated()
и drop_duplicates()
функции соответственно. В этом разделе мы рассмотрим, как обрабатывать дубликаты в столбце индекса, используя reset_index()
.
Как следует из названия, reset_index()
Функция в Pandas используется для сброса индекса DataFrame. При применении reset_index()
функция, текущий индекс автоматически отбрасывается, что означает потерю начальных значений индекса. Указав drop
параметр как False
в reset_index()
функции, мы можем сохранить исходное значение индекса при сбросе индекса.
Вот пример использования reset_index()
:
import pandas as pd data = { 'Score': [45, 65, 76, 44, 39, 45]
}
df = pd.DataFrame(data, index=['Mark', 'Ali', 'Bob', 'John', 'Johny', 'Mark']) df.reset_index(inplace=True)
print(df)
Вывод:
index Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45
Лучшие практики
-
Понимание природы повторяющихся данных: прежде чем предпринимать какие-либо действия, важно понять, почему существуют повторяющиеся значения и что они представляют. Определите основную причину, а затем определите соответствующие шаги для ее устранения.
-
Выберите подходящий метод для обработки дубликатов: Как обсуждалось в предыдущих разделах, существует несколько способов обработки дубликатов. Выбранный вами метод зависит от характера данных и анализа, который вы хотите выполнить.
-
Документируйте подход: Очень важно задокументировать процесс обнаружения повторяющихся значений и их устранения, чтобы другие могли понять ход мысли.
-
Будьте осторожны при выполнении упражнений: Всякий раз, когда мы удаляем или изменяем данные, мы должны следить за тем, чтобы удаление дубликатов не приводило к ошибкам или предвзятости в анализе. Проведите тесты на работоспособность и проверьте результаты каждого действия.
-
Сохраните исходные данные: Перед выполнением любой операции с данными создайте резервную копию исходных данных.
-
Предотвратите будущие дубликаты: Примите меры для предотвращения появления дубликатов в будущем. Это может включать проверку данных во время ввода данных, процедуры очистки данных или ограничения базы данных для обеспечения уникальности.
Заключение
В анализе данных устранение повторяющихся значений является важным шагом. Повторяющиеся значения могут привести к неточным результатам. Эффективно выявляя повторяющиеся значения и управляя ими, аналитики данных могут получать точную и важную информацию. Внедрение упомянутых методов и следование лучшим практикам позволит аналитикам сохранить целостность своих данных и извлечь из них ценную информацию.
- SEO-контент и PR-распределение. Получите усиление сегодня.
- ЭВМ Финанс. Единый интерфейс для децентрализованных финансов. Доступ здесь.
- Квантум Медиа Групп. ИК/PR усиление. Доступ здесь.
- ПлатонАйСтрим. Анализ данных Web3. Расширение знаний. Доступ здесь.
- Источник: https://stackabuse.com/handling-duplicate-values-in-a-pandas-dataframe/
- :имеет
- :является
- :нет
- :куда
- 1
- 11
- 12
- 20
- 70
- 8
- 9
- a
- выше
- точный
- Действие
- на самом деле
- добавленный
- Дополнительно
- адрес
- адресация
- продвинутый
- После
- агрегирование
- цель
- Все
- Позволяющий
- позволяет
- среди
- an
- анализ
- аналитик
- Аналитики
- и
- Другой
- любой
- появляется
- Применить
- Применение
- подхода
- соответствующий
- МЫ
- гайд
- AS
- назначенный
- At
- автоматически
- Восстановление
- бар
- основанный
- BE
- до
- не являетесь
- ниже
- ЛУЧШЕЕ
- лучшие практики
- смещение
- пристрастный
- зерно
- граница
- но
- by
- вычислять
- исчисляет
- CAN
- случаев
- случаев
- Вызывать
- График
- Проверки
- Выберите
- Уборка
- Column
- Колонки
- сочетание
- объединять
- Общий
- комплекс
- постигать
- Проводить
- Рассматривать
- считается
- принимая во внимание
- ограничения
- содержит
- соответствующий
- Создайте
- создали
- решающее значение
- Текущий
- изготовленный на заказ
- настройка
- данным
- анализ данных
- ввод данных
- База данных
- занимавшийся
- По умолчанию
- зависит
- описано
- обнаружение
- Определять
- различный
- непосредственно
- обсуждать
- обсуждается
- расстояние
- документ
- приносит
- Дон
- дубликаты
- в течение
- каждый
- фактически
- эффективный
- эффективно
- элемент
- ликвидировать
- уничтожение
- включить
- позволяет
- конец
- обеспечивать соблюдение
- обеспечивать
- запись
- равный
- ошибки
- пример
- Кроме
- существовать
- объяснение
- Больше
- извлечение
- несколько
- в заключение
- Во-первых,
- Фокус
- после
- следующим образом
- Что касается
- частота
- от
- функция
- Функции
- будущее
- Gain
- генерируется
- идти
- цель
- график
- большой
- группы
- инструкция
- обрабатывать
- Управляемость
- практический
- Есть
- здесь
- зависать
- Как
- How To
- Однако
- HTTPS
- i
- идентичный
- идентифицированный
- идентификатор
- идентифицирует
- определения
- идентифицирующий
- if
- осуществлять
- Осуществляющий
- важную
- in
- неточный
- включают
- включены
- В том числе
- индекс
- указывать
- указывает
- информация
- начальный
- вход
- понимание
- размышления
- пример
- целостность
- в
- вводить
- Введение
- вызывается
- вопросы
- IT
- ЕГО
- John
- Сохранить
- Этикетки
- Фамилия
- вести
- УЧИТЬСЯ
- изучение
- Длина
- позволять
- LG
- Библиотека
- ОГРАНИЧЕНИЯ
- Список
- потерянный
- Создание
- управлять
- управления
- отметка
- с пометкой
- Совпадение
- согласование
- Matplotlib
- Макс
- Май..
- значить
- смысл
- означает
- меры
- упомянутый
- метод
- методы
- ошибки
- изменения
- модифицировало
- изменять
- БОЛЕЕ
- самых
- с разными
- должен
- имя
- имена
- природа
- потребности
- Новые
- сейчас
- номер
- получать
- происходящий
- of
- Предложения
- on
- ONE
- операция
- Опция
- Опции
- or
- оригинал
- Другое
- Другое
- наши
- внешний
- изложенные
- выходной
- пара
- панд
- параметр
- параметры
- паттеранами
- Выполнять
- выполнены
- выполнения
- Платон
- Платон Интеллектуальные данные
- ПлатонДанные
- играет
- возможное
- потенциально
- практическое
- практиками
- необходимость
- предотвращать
- предыдущий
- процесс
- должным образом
- обеспечивать
- Питон
- соотношение
- причины
- последний
- записанный
- учет
- удаление
- удаление
- замещать
- замена
- представлять
- представляющий
- требуется
- соответственно
- ответственность
- ограничивать
- в результате
- Итоги
- сохранять
- возвращение
- Возвращает
- кольцо
- Роли
- корень
- РЯД
- условиями,
- s
- то же
- Сценарии
- Гол
- Во-вторых
- Раздел
- разделах
- Серии
- набор
- Shadow
- лист
- должен
- значительный
- аналогичный
- просто
- просто
- с
- некоторые
- конкретный
- Стекабьюс
- стандартов
- Начало
- Шаг
- Шаги
- Stop
- стратегий
- строка
- "Студент"
- Студенты
- последующее
- суммировать
- с учетом
- принимает
- с
- снижения вреда
- тестов
- чем
- который
- Ассоциация
- Будущее
- их
- Их
- тогда
- Там.
- следовательно
- Эти
- они
- В третьих
- этой
- мысль
- порог
- Через
- время
- Временные ряды
- раз
- отметка времени
- титулованный
- в
- вместе
- Всего
- переход
- заслуживающий доверия
- два
- понимать
- созданного
- уникальность
- Обновление ПО
- обновление
- us
- использование
- используемый
- через
- VALIDATE
- Проверка
- ценный
- ценностное
- Наши ценности
- различный
- Ve
- жизненный
- хотеть
- законопроект
- способы
- we
- ЧТО Ж
- Что
- когда
- когда бы ни
- будь то
- который
- в то время как
- зачем
- будете
- в
- X
- Ты
- зефирнет
- нуль