Обробка повторюваних значень у Pandas DataFrame

Обробка повторюваних значень у Pandas DataFrame

Вступ

Як аналітик даних, ми несемо відповідальність за забезпечення цілісності даних для отримання точної та надійної інформації. Очищення даних відіграє важливу роль у цьому процесі, а повторювані значення є одними з найпоширеніших проблем, з якими стикаються аналітики даних. Повторювані значення можуть потенційно спотворити статистичні дані. Тому вкрай важливо мати ефективні методи боротьби з повторюваними значеннями. У цій статті ми дізнаємося, як визначати та обробляти повторювані значення, а також найкращі методи керування дублікатами.

Виявлення повторюваних значень

Першим кроком у обробці повторюваних значень є їх ідентифікація. Виявлення повторюваних значень є важливим кроком у очищенні даних. Pandas пропонує кілька методів виявлення повторюваних значень у фреймі даних. У цьому розділі ми обговоримо duplicated() функція і value_counts() функція для визначення повторюваних значень.

Usin дубльований()

Команда duplicated() це функція бібліотеки Pandas, яка перевіряє повторювані рядки у DataFrame. Вихід duplicated() функція — це логічний ряд такої ж довжини, що й вхідний DataFrame, де кожен елемент вказує, чи є відповідний рядок дублікатом.

Розглянемо простий приклад 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() змінюючи значення параметрів.

Параметри: Subset і Keep

Команда duplicated() функція пропонує варіанти налаштування за допомогою своїх додаткових параметрів. Він має два параметри, як описано нижче:

  • subset: цей параметр дає нам змогу вказати підмножину стовпців, які слід враховувати під час виявлення дублікатів. Підмножина встановлена ​​на None за замовчуванням, тобто враховується кожен стовпець у DataFrame. Щоб указати імена стовпців, ми можемо надати підмножині список імен стовпців.

    Ось приклад використання параметра subset:

    
    df_duplicates = df.duplicated(subset=['StudentName'])
    

    вихід:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • 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() функція є другим підходом для ідентифікації дублікатів. The 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 функцію в Pandas.
  • Повторювані мітки часу з різними значеннями: якщо ми маємо однакову позначку часу, але різні значення, ми можемо агрегувати дані та отримати більше інформації за допомогою groupby()або ми можемо вибрати найновіше значення та видалити інші за допомогою drop_duplicates() з keep для параметра встановлено значення «останній».

Обробка повторюваних значень індексу

Перш ніж розглядати повторювані значення індексу, давайте спочатку визначимо, що таке індекс у Pandas. Індекс — це унікальний ідентифікатор, призначений кожному рядку DataFrame. За замовчуванням Pandas призначає числовий індекс, починаючи з нуля. Однак індекс можна призначити будь-якому стовпцю або комбінації стовпців. Щоб визначити дублікати в стовпці Index, ми можемо використовувати duplicated() та drop_duplicates() функції відповідно. У цьому розділі ми розглянемо, як обробляти дублікати в стовпці Index за допомогою 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

Кращі практики

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

  • Виберіть відповідний метод обробки дублікатів: Як обговорювалося в попередніх розділах, існує кілька способів обробки дублікатів. Вибір методу залежить від характеру даних і аналізу, який ви збираєтеся виконати.

  • Документуйте підхід: життєво важливо задокументувати процес виявлення повторюваних значень і вирішення їх, дозволяючи іншим зрозуміти процес мислення.

  • З обережністю до вправ: щоразу, коли ми видаляємо або змінюємо дані, ми повинні переконатися, що видалення дублікатів не вносить помилок або упередженості в аналіз. Проведіть тести на осудність і перевірте результати кожної дії.

  • Збережіть вихідні дані: Перш ніж виконувати будь-яку операцію з даними, створіть резервну копію вихідних даних.

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

Заключні думки

У аналізі даних усунення повторюваних значень є вирішальним кроком. Повторювані значення можуть призвести до неточних результатів. Ефективно виявляючи повторювані значення та керуючи ними, аналітики даних можуть отримувати точну та важливу інформацію. Застосування згаданих методів і дотримання найкращих практик дозволить аналітикам зберегти цілісність своїх даних і отримати з них цінну інформацію.

Часова мітка:

Більше від Stackabuse