Обработка повторяющихся значений в Pandas DataFrame

Обработка повторяющихся значений в Pandas DataFrame

Введение

Как аналитик данных, мы несем ответственность за обеспечение целостности данных для получения точной и достоверной информации. Очистка данных играет жизненно важную роль в этом процессе, и повторяющиеся значения являются одной из наиболее распространенных проблем, с которыми сталкиваются аналитики данных. Повторяющиеся значения могут потенциально искажать понимание. Поэтому очень важно иметь эффективные методы для работы с повторяющимися значениями. В этой статье мы узнаем, как идентифицировать повторяющиеся значения и обрабатывать их, а также познакомимся с рекомендациями по управлению дубликатами.

Идентификация повторяющихся значений

Первым шагом в обработке повторяющихся значений является их идентификация. Выявление повторяющихся значений — важный шаг в очистке данных. 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

Лучшие практики

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

  • Выберите подходящий метод для обработки дубликатов: Как обсуждалось в предыдущих разделах, существует несколько способов обработки дубликатов. Выбранный вами метод зависит от характера данных и анализа, который вы хотите выполнить.

  • Документируйте подход: Очень важно задокументировать процесс обнаружения повторяющихся значений и их устранения, чтобы другие могли понять ход мысли.

  • Будьте осторожны при выполнении упражнений: Всякий раз, когда мы удаляем или изменяем данные, мы должны следить за тем, чтобы удаление дубликатов не приводило к ошибкам или предвзятости в анализе. Проведите тесты на работоспособность и проверьте результаты каждого действия.

  • Сохраните исходные данные: Перед выполнением любой операции с данными создайте резервную копию исходных данных.

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

Заключение

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

Отметка времени:

Больше от Стекабьюс