Вступ
Як аналітик даних, ми несемо відповідальність за забезпечення цілісності даних для отримання точної та надійної інформації. Очищення даних відіграє важливу роль у цьому процесі, а повторювані значення є одними з найпоширеніших проблем, з якими стикаються аналітики даних. Повторювані значення можуть потенційно спотворити статистичні дані. Тому вкрай важливо мати ефективні методи боротьби з повторюваними значеннями. У цій статті ми дізнаємося, як визначати та обробляти повторювані значення, а також найкращі методи керування дублікатами.
Виявлення повторюваних значень
Першим кроком у обробці повторюваних значень є їх ідентифікація. Виявлення повторюваних значень є важливим кроком у очищенні даних. 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
Кращі практики
-
Зрозумійте природу повторюваних даних: Перш ніж вживати будь-яких дій, важливо зрозуміти, чому існують повторювані значення та що вони представляють. Визначте першопричину, а потім визначте відповідні кроки для їх усунення.
-
Виберіть відповідний метод обробки дублікатів: Як обговорювалося в попередніх розділах, існує кілька способів обробки дублікатів. Вибір методу залежить від характеру даних і аналізу, який ви збираєтеся виконати.
-
Документуйте підхід: життєво важливо задокументувати процес виявлення повторюваних значень і вирішення їх, дозволяючи іншим зрозуміти процес мислення.
-
З обережністю до вправ: щоразу, коли ми видаляємо або змінюємо дані, ми повинні переконатися, що видалення дублікатів не вносить помилок або упередженості в аналіз. Проведіть тести на осудність і перевірте результати кожної дії.
-
Збережіть вихідні дані: Перш ніж виконувати будь-яку операцію з даними, створіть резервну копію вихідних даних.
-
Запобігання дублюванням у майбутньому: Запровадити заходи для запобігання дублюванням у майбутньому. Це може включати перевірку даних під час введення даних, процедури очищення даних або обмеження бази даних для забезпечення унікальності.
Заключні думки
У аналізі даних усунення повторюваних значень є вирішальним кроком. Повторювані значення можуть призвести до неточних результатів. Ефективно виявляючи повторювані значення та керуючи ними, аналітики даних можуть отримувати точну та важливу інформацію. Застосування згаданих методів і дотримання найкращих практик дозволить аналітикам зберегти цілісність своїх даних і отримати з них цінну інформацію.
- Розповсюдження контенту та PR на основі SEO. Отримайте посилення сьогодні.
- EVM Фінанси. Уніфікований інтерфейс для децентралізованих фінансів. Доступ тут.
- Quantum Media Group. ІЧ/ПР посилений. Доступ тут.
- PlatoAiStream. Web3 Data Intelligence. Розширення знань. Доступ тут.
- джерело: https://stackabuse.com/handling-duplicate-values-in-a-pandas-dataframe/
- : має
- :є
- : ні
- :де
- 1
- 11
- 12
- 20
- 70
- 8
- 9
- a
- вище
- точний
- дію
- насправді
- доданий
- Додатково
- адреса
- адресація
- просунутий
- після
- агрегуючий
- мета
- ВСІ
- Дозволити
- дозволяє
- серед
- an
- аналіз
- аналітик
- аналітики
- та
- Інший
- будь-який
- з'являється
- Застосовувати
- Застосування
- підхід
- відповідний
- ЕСТЬ
- стаття
- AS
- призначений
- At
- автоматично
- резервна копія
- бар
- заснований
- BE
- перед тим
- буття
- нижче
- КРАЩЕ
- передового досвіду
- зміщення
- упереджений
- боб
- border
- але
- by
- обчислювати
- обчислює
- CAN
- випадок
- випадків
- Викликати
- Графік
- Перевірки
- Вибирати
- Очищення
- Колонка
- Колони
- поєднання
- об'єднувати
- загальний
- комплекс
- осягнути
- Проводити
- Вважати
- вважається
- беручи до уваги
- обмеження
- містить
- Відповідний
- створювати
- створений
- вирішальне значення
- Поточний
- виготовлений на замовлення
- настройка
- дані
- аналіз даних
- введення даних
- Database
- справу
- дефолт
- залежить
- описаний
- Виявлення
- Визначати
- різний
- безпосередньо
- обговорювати
- обговорювалися
- відстань
- документ
- робить
- Дон
- дублікати
- під час
- кожен
- фактично
- ефективний
- продуктивно
- елемент
- усунутий
- усуваючи
- включіть
- дозволяє
- кінець
- примусове виконання
- забезпечувати
- запис
- рівним
- помилки
- приклад
- Крім
- існувати
- пояснення
- дослідити
- витяг
- кілька
- в кінці кінців
- Перший
- Сфокусувати
- після
- слідує
- для
- частота
- від
- функція
- Функції
- майбутнє
- Отримувати
- генерується
- Git
- мета
- графік
- великий
- Group
- керівництво
- обробляти
- Обробка
- практичний
- Мати
- тут
- hover
- Як
- How To
- Однак
- HTTPS
- i
- однаковий
- ідентифікований
- ідентифікатор
- ідентифікує
- ідентифікувати
- ідентифікує
- if
- здійснювати
- реалізації
- важливо
- in
- неточні
- включати
- включені
- У тому числі
- індекс
- вказувати
- вказує
- інформація
- початковий
- вхід
- розуміння
- розуміння
- екземпляр
- цілісність
- в
- вводити
- Вступ
- викликали
- питання
- IT
- ЙОГО
- Джон
- тримати
- етикетки
- останній
- вести
- УЧИТЬСЯ
- вивчення
- довжина
- дозволяти
- LG
- бібліотека
- МЕЖА
- список
- втрачений
- Робить
- управляти
- управління
- позначити
- позначено
- матч
- узгодження
- matplotlib
- Макс
- Може..
- значити
- сенс
- засоби
- заходи
- згаданий
- метод
- методика
- помилки
- Поправки
- модифікований
- змінювати
- більше
- найбільш
- множинний
- повинен
- ім'я
- Імена
- природа
- потреби
- Нові
- зараз
- номер
- отримувати
- трапляються
- of
- Пропозиції
- on
- ONE
- операція
- варіант
- Опції
- or
- оригінал
- Інше
- інші
- наші
- з
- викладені
- вихід
- пара
- панди
- параметр
- параметри
- моделі
- Виконувати
- виконується
- виконанні
- plato
- Інформація про дані Платона
- PlatoData
- відіграє
- це можливо
- потенційно
- Практичний
- практики
- необхідність
- запобігати
- попередній
- процес
- правильно
- забезпечувати
- Python
- співвідношення
- Причини
- останній
- записаний
- облік
- видаляти
- видалення
- замінювати
- заміна
- представляти
- представляє
- Вимагається
- відповідно
- відповідальність
- обмежити
- в результаті
- результати
- зберігати
- повернення
- Умови повернення
- кільце
- Роль
- корінь
- ROW
- Правила
- s
- то ж
- сценарії
- рахунок
- другий
- розділ
- розділам
- Серія
- комплект
- тінь
- лист
- Повинен
- значний
- аналогічний
- простий
- просто
- з
- деякі
- конкретний
- Stackabuse
- стандартів
- Починаючи
- Крок
- заходи
- Стоп
- стратегії
- рядок
- студент
- Студентам
- наступні
- підсумовувати
- з урахуванням
- приймає
- взяття
- методи
- Тести
- ніж
- Що
- Команда
- Майбутнє
- їх
- Їх
- потім
- Там.
- отже
- Ці
- вони
- третій
- це
- думка
- поріг
- через
- час
- Часовий ряд
- times
- відмітка часу
- під назвою
- до
- разом
- Усього:
- перехід
- заслуговуючий довіри
- два
- розуміти
- створеного
- унікальність
- Оновити
- оновлення
- us
- використання
- використовуваний
- використання
- ПЕРЕВІР
- перевірка достовірності
- Цінний
- значення
- Цінності
- різний
- Ve
- життєво важливий
- хотіти
- було
- способи
- we
- ДОБРЕ
- Що
- коли
- коли б ні
- Чи
- який
- в той час як
- чому
- волі
- з
- в
- X
- Ти
- зефірнет
- нуль