Gestionarea valorilor duplicate într-un cadru de date Pandas

Gestionarea valorilor duplicate într-un cadru de date Pandas

Introducere

În calitate de analist de date, este responsabilitatea noastră să asigurăm integritatea datelor pentru a obține informații precise și de încredere. Curățarea datelor joacă un rol vital în acest proces, iar valorile duplicate sunt printre cele mai frecvente probleme cu care se confruntă analiștii de date. Valorile duplicate pot denatura statisticile. Prin urmare, este crucial să existe metode eficiente pentru a trata valorile duplicat. În acest articol, vom învăța cum să identificăm și să gestionăm valorile duplicate, precum și cele mai bune practici pentru gestionarea duplicaturilor.

Identificarea valorilor duplicate

Primul pas în gestionarea valorilor duplicate este identificarea acestora. Identificarea valorilor duplicate este un pas important în curățarea datelor. Pandas oferă mai multe metode de identificare a valorilor duplicate într-un cadru de date. În această secțiune, vom discuta despre duplicated() funcție și value_counts() funcţie de identificare a valorilor duplicate.

Usin duplicat()

duplicated() funcția este o funcție de bibliotecă Pandas care verifică rândurile duplicate într-un DataFrame. Ieșirea lui duplicated() funcția este o serie booleană cu aceeași lungime ca și DataFrame de intrare, unde fiecare element indică dacă rândul corespunzător este sau nu un duplicat.

Să luăm în considerare un exemplu simplu de duplicated() funcţie:

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)

ieșire:

0 False
1 False
2 False
3 False
4 False
5 True
dtype: bool

În exemplul de mai sus, am creat un DataFrame care conține numele studenților și scorurile lor totale. Am invocat duplicated() pe DataFrame, care a generat o serie booleană cu False reprezentând valori unice şi True reprezentând valori duplicate.

În acest exemplu, prima apariție a valorii este considerată unică. Totuși, ce se întâmplă dacă dorim ca ultima valoare să fie considerată unică și nu vrem să luăm în considerare toate coloanele atunci când identificăm valorile duplicate? Aici, putem modifica duplicated() funcţionează prin modificarea valorilor parametrilor.

Parametri: Subset și Keep

duplicated() funcția oferă opțiuni de personalizare prin parametrii săi opționali. Are doi parametri, așa cum este descris mai jos:

  • subset: Acest parametru ne permite să specificăm subsetul de coloane de luat în considerare în timpul detectării dublelor. Subsetul este setat la None implicit, ceea ce înseamnă că fiecare coloană din DataFrame este luată în considerare. Pentru a specifica numele coloanelor, putem furniza subsetului o listă de nume de coloane.

    Iată un exemplu de utilizare a parametrului subset:

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

    ieșire:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: Această opțiune ne permite să alegem ce instanță a rândului duplicat ar trebui să fie marcată ca duplicat. Valorile posibile pentru păstrare sunt:

    • "first": Aceasta este valoarea implicită pentru keep opțiune. Identifică toate duplicatele, cu excepția primei apariții, considerând că prima valoare este unică.
    • "last": Această opțiune identifică ultima apariție ca valoare unică. Toate celelalte apariții vor fi considerate duplicate.
    • False: Această opțiune etichetează fiecare instanță ca valoare duplicată.

Iată un exemplu de utilizare a keep parametru:


df_duplicates = df.duplicated(keep='last')
print(df_duplicates)

ieșire:

0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
Vizualizați valori duplicate

value_counts() funcția este a doua abordare pentru identificarea duplicatelor. The value_counts() funcția numără de câte ori apare fiecare valoare unică într-o coloană. Prin aplicarea value_counts() funcţie de o anumită coloană, frecvenţa fiecărei valori poate fi vizualizată.

Iată un exemplu de utilizare a value_counts() funcţie:

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)

ieșire:

Mark 2
Ali 1
Bob 1
John 1
Johny 1
Name: StudentName, dtype: int64

Să vizualizăm acum valorile duplicate cu un grafic cu bare. Putem vizualiza în mod eficient frecvența valorilor duplicate folosind o diagramă cu bare.


name_counts.plot(kind='bar')
plt.xlabel('Student Name')
plt.ylabel('Frequency')
plt.title('Duplicate Name Frequencies')
plt.show()

valori duplicate

Gestionarea valorilor duplicate

După identificarea valorilor duplicate, este timpul să le abordăm. În această secțiune, vom explora diverse strategii pentru eliminarea și actualizarea valorilor duplicate folosind panda drop_duplicates() și replace() funcții. În plus, vom discuta despre agregarea datelor cu valori duplicate folosind groupby() Funcția.

Eliminarea valorilor duplicate

Cea mai comună abordare pentru gestionarea duplicatelor este eliminarea acestora din DataFrame. Pentru a elimina înregistrările duplicate din DataFrame, vom folosi drop_duplicates() funcţie. În mod implicit, această funcție păstrează prima instanță a fiecărui rând duplicat și elimină aparițiile ulterioare. Identifică valorile duplicate pe baza tuturor valorilor coloanelor; cu toate acestea, putem specifica coloana care trebuie luată în considerare utilizând parametrii subsetului.

Sintaxa lui drop_duplicates() cu valorile implicite în parametri este după cum urmează:

dataFrame.drop_duplicates(subset=None, keep='first', inplace=False)

subset și keep parametrii au aceeași explicație ca în duplicates(). Dacă setăm al treilea parametru inplace la True, toate modificările vor fi efectuate direct pe DataFrame original, rezultând în revenirea metodei None iar DataFrame-ul original fiind modificat. În mod implicit, inplace is False.

Iată un exemplu de drop_duplicates() funcţie:


df.drop_duplicates(keep='last', inplace=True)
print(df)

ieșire:

 StudentName Score
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

Consultați ghidul nostru practic și practic pentru a învăța Git, cu cele mai bune practici, standarde acceptate de industrie și fisa de cheat incluse. Opriți căutarea pe Google a comenzilor Git și de fapt învăţa aceasta!

În exemplul de mai sus, prima intrare a fost ștearsă, deoarece era o dublură.

Înlocuiți sau actualizați valorile duplicate

A doua metodă de gestionare a duplicatelor implică înlocuirea valorii folosind Pandas replace() funcţie. replace() funcția ne permite să înlocuim anumite valori sau modele dintr-un DataFrame cu valori noi. În mod implicit, înlocuiește toate instanțele valorii. Cu toate acestea, folosind parametrul limită, putem restricționa numărul de înlocuiri.

Iată un exemplu de utilizare a replace() funcţie:


df['StudentName'].replace('Mark', 'Max', limit=1, inplace=True)
print(df)

ieșire:

 StudentName Score
0 Max 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

Aici, limita a fost folosită pentru a înlocui prima valoare. Dacă vrem să înlocuim ultima apariție? În acest caz, vom combina duplicated() și replace() funcții. Folosind duplicated(), vom indica ultima instanță a fiecărei valori duplicate, obținem numărul rândului folosind loc funcția, apoi înlocuiți-o folosind replace() funcţie. Iată un exemplu de utilizare duplicated() și replace() funcţionează împreună.


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)

ieșire:

 StudentName Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Max 45

Funcții personalizate pentru înlocuiri complexe

În unele cazuri, gestionarea valorilor duplicate necesită înlocuiri mai complexe decât simpla eliminare sau actualizare a acestora. Funcțiile personalizate ne permit să creăm reguli de înlocuire specifice, adaptate nevoilor noastre. Folosind panda apply() funcție, putem aplica funcția personalizată datelor noastre.

De exemplu, să presupunem că coloana „StudentName” conține nume duplicate. Scopul nostru este să înlocuim duplicatele folosind o funcție personalizată care adaugă un număr la sfârșitul valorilor duplicate, făcându-le unice.


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)

ieșire:

 StudentName Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark_1 45

Agregați date cu valori duplicate

Datele care conțin valori duplicate pot fi agregate pentru a rezuma și a obține informații din date. Pandasii groupby() funcția vă permite să agregați date cu valori duplicate. Prin folosirea groupby() funcție, puteți grupa una sau mai multe coloane și puteți calcula media, mediana sau suma unei alte coloane pentru fiecare grup.

Iată un exemplu de utilizare a groupby() metodă:


grouped = df.groupby(['StudentName']) df_aggregated = grouped.sum()
print(df_aggregated)

ieșire:

 Score
StudentName Ali 65
Bob 76
John 44
Johny 39
Mark 90

Tehnici avansate

Pentru a gestiona scenarii mai complexe și a asigura o analiză precisă, există câteva tehnici avansate pe care le putem folosi. Această secțiune va discuta despre tratarea duplicaturilor neclare, duplicarea datelor din seria temporală și valorile indexului duplicat.

Duplicate neclare

Dublatele neclare sunt înregistrări care nu sunt potriviri exacte, dar sunt similare și pot apărea din diverse motive, inclusiv greșeli de introducere a datelor, greșeli de ortografie și variații de formatare. Vom folosi fuzzywuzzy Biblioteca Python pentru a identifica duplicatele folosind potrivirea similarității șirurilor.

Iată un exemplu de manipulare a valorilor fuzzy:

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))

În acest exemplu, creăm o funcție personalizată find_fuzzy_duplicates care ia ca intrare un DataFrame, un nume de coloană și un prag de similaritate. Funcția iterează prin fiecare rând din DataFrame și îl compară cu rândurile ulterioare folosind fuzz.ratio metoda din fuzzywuzzy bibliotecă. Dacă scorul de similaritate este mai mare sau egal cu pragul, rândurile duplicat sunt adăugate la o listă. În cele din urmă, funcția returnează un DataFrame care conține duplicatele fuzzy.

ieșire:

Fuzzy duplicates:
StudentName Score Mark 45 Mark 45 John 44 Johny 39

În exemplul de mai sus, duplicatele neclare sunt identificate în coloana „StudentName”. Funcția „find_fuzzy_duplicates” compară fiecare pereche de șiruri de caractere folosind fuzzywuzzy ale bibliotecii fuzz.ratio funcția, care calculează un scor de similaritate pe baza distanței Levenshtein. Am setat pragul la 70, ceea ce înseamnă că orice nume cu un raport de potrivire mai mare de 70 va fi considerat o valoare neclară. După identificarea valorilor neclare, le putem gestiona folosind metoda descrisă în secțiunea intitulată „Manevrarea duplicatelor”.

Gestionarea duplicatelor de date din seria temporală

Dublatele pot apărea atunci când mai multe observații sunt înregistrate la același marcaj temporal. Aceste valori pot duce la rezultate părtinitoare dacă nu sunt tratate corespunzător. Iată câteva modalități de a gestiona valorile duplicate în datele din seria temporală.

  • Eliminarea duplicatelor exacte: În această metodă, eliminăm rânduri identice folosind drop_duplicates funcția în Pandas.
  • Marcaje temporale duplicate cu valori diferite: Dacă avem același marcaj temporal, dar valori diferite, putem agrega datele și obținem mai multe informații folosind groupby(), sau putem selecta cea mai recentă valoare și le putem elimina pe celelalte folosind drop_duplicates() cu keep parametrul setat la „ultimul”.

Gestionarea valorilor indexului duplicat

Înainte de a aborda valorile indexului duplicat, să definim mai întâi ce este un index în Pandas. Un index este un identificator unic atribuit fiecărui rând al DataFrame. Pandas atribuie implicit un index numeric începând cu zero. Cu toate acestea, un index poate fi atribuit oricărei coloane sau combinații de coloane. Pentru a identifica duplicatele în coloana Index, putem folosi duplicated() și drop_duplicates() funcţii, respectiv. În această secțiune, vom explora cum să gestionăm duplicatele din coloana Index folosind reset_index().

După cum sugerează și numele său, reset_index() funcția din Pandas este utilizată pentru a reseta indexul unui DataFrame. La aplicarea reset_index() funcția, indexul curent este eliminat automat, ceea ce înseamnă că valorile inițiale ale indexului sunt pierdute. Prin specificarea drop parametru ca False în reset_index() funcție, putem păstra valoarea inițială a indexului în timp ce resetăm indexul.

Iată un exemplu de utilizare 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)

ieșire:

 index Score
0 Mark 45
1 Ali 65
2 Bob 76
3 John 44
4 Johny 39
5 Mark 45

Cele mai bune practici

  • Înțelegeți natura datelor duplicate: Înainte de a lua orice acțiune, este esențial să înțelegeți de ce există valori duplicate și ce reprezintă acestea. Identificați cauza principală și apoi determinați pașii corespunzători pentru a le gestiona.

  • Selectați o metodă adecvată pentru gestionarea duplicatelor: După cum sa discutat în secțiunile anterioare, există mai multe moduri de a gestiona duplicatele. Metoda pe care o alegeți depinde de natura datelor și de analiza pe care doriți să o efectuați.

  • Documentați abordarea: Este vital să documentați procesul de detectare a valorilor duplicate și de abordare a acestora, permițând altora să înțeleagă procesul de gândire.

  • Fă prudență: Ori de câte ori eliminăm sau modificăm date, trebuie să ne asigurăm că eliminarea dublelor nu introduce erori sau părtiniri în analiză. Efectuați teste de sănătate mentală și validați rezultatele fiecărei acțiuni.

  • Păstrați datele originale: Înainte de a efectua orice operațiune asupra datelor, creați o copie de rezervă a datelor originale.

  • Preveniți dublarile viitoare: implementați măsuri pentru a preveni apariția dublurilor în viitor. Aceasta poate include validarea datelor în timpul introducerii datelor, rutine de curățare a datelor sau constrângeri ale bazei de date pentru a impune unicitatea.

Gânduri finale

În analiza datelor, abordarea valorilor duplicate este un pas crucial. Valorile duplicate pot duce la rezultate inexacte. Prin identificarea și gestionarea eficientă a valorilor duplicate, analiștii de date pot obține informații precise și semnificative. Implementarea tehnicilor menționate și respectarea celor mai bune practici va permite analiștilor să păstreze integritatea datelor lor și să extragă informații valoroase din acestea.

Timestamp-ul:

Mai mult de la Stackabuse