Håndtering af duplikerede værdier i en Pandas DataFrame

Håndtering af duplikerede værdier i en Pandas DataFrame

Introduktion

Som dataanalytiker er det vores ansvar at sikre dataintegritet for at opnå nøjagtig og troværdig indsigt. Datarensning spiller en afgørende rolle i denne proces, og duplikerede værdier er blandt de mest almindelige problemer, som dataanalytikere støder på. Dublerede værdier kan potentielt misrepræsentere indsigt. Derfor er det afgørende at have effektive metoder til at håndtere duplikerede værdier. I denne artikel lærer vi, hvordan du identificerer og håndterer duplikerede værdier, samt bedste praksis for håndtering af dubletter.

Identifikation af duplikerede værdier

Det første trin i håndteringen af ​​duplikerede værdier er at identificere dem. Identifikation af duplikerede værdier er et vigtigt skridt i datarensning. Pandas tilbyder flere metoder til at identificere duplikerede værdier inden for en dataramme. I dette afsnit vil vi diskutere duplicated() funktion og value_counts() funktion til at identificere duplikerede værdier.

B rug duplikeret()

duplicated() funktion er en Pandas biblioteksfunktion, der kontrollerer for duplikerede rækker i en DataFrame. Outputtet af duplicated() funktion er en boolesk serie med samme længde som inputdataframen, hvor hvert element angiver, om den tilsvarende række er en duplikat eller ej.

Lad os overveje et simpelt eksempel på duplicated() fungere:

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)

Output:

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

I eksemplet ovenfor oprettede vi en DataFrame, der indeholder navne på elever og deres samlede score. Vi påkaldte duplicated() på DataFrame, som genererede en boolesk serie med False repræsenterer unikke værdier og True repræsenterer duplikerede værdier.

I dette eksempel betragtes den første forekomst af værdien som unik. Men hvad nu hvis vi ønsker, at den sidste værdi skal betragtes som unik, og vi ikke ønsker at tage alle kolonner i betragtning, når vi identificerer duplikerede værdier? Her kan vi ændre duplicated() funktion ved at ændre parameterværdierne.

Parametre: Subset og Keep

duplicated() funktion tilbyder tilpasningsmuligheder gennem sine valgfrie parametre. Den har to parametre, som beskrevet nedenfor:

  • subset: Denne parameter gør det muligt for os at specificere det undersæt af kolonner, der skal tages i betragtning under duplikatdetektion. Undersættet er indstillet til None som standard, hvilket betyder, at hver kolonne i DataFrame tages i betragtning. For at angive kolonnenavne kan vi give undersættet en liste over kolonnenavne.

    Her er et eksempel på brug af undersætparameteren:

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

    Output:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: Denne mulighed giver os mulighed for at vælge, hvilken forekomst af dubletrækken der skal markeres som en dublet. De mulige værdier for keep er:

    • "first": Dette er standardværdien for keep mulighed. Den identificerer alle dubletter undtagen den første forekomst, idet den første værdi betragtes som unik.
    • "last": Denne indstilling identificerer den sidste forekomst som en unik værdi. Alle andre hændelser vil blive betragtet som dubletter.
    • False: Denne indstilling mærker hver forekomst som en dubletværdi.

Her er et eksempel på brug af keep parameter:


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

Output:

0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
Visualiser dublerede værdier

value_counts() funktion er den anden tilgang til at identificere dubletter. Det value_counts() funktion tæller antallet af gange, hver unik værdi vises i en kolonne. Ved at anvende value_counts() funktion til en specifik kolonne, kan frekvensen af ​​hver værdi visualiseres.

Her er et eksempel på brug af value_counts() fungere:

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)

Output:

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

Lad os nu visualisere duplikerede værdier med et søjlediagram. Vi kan effektivt visualisere hyppigheden af ​​duplikerede værdier ved hjælp af et søjlediagram.


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

duplikerede værdier

Håndtering af duplikerede værdier

Efter at have identificeret duplikerede værdier, er det tid til at behandle dem. I dette afsnit vil vi udforske forskellige strategier til at fjerne og opdatere duplikerede værdier ved hjælp af pandaerne drop_duplicates() , replace() funktioner. Derudover vil vi diskutere aggregering af data med duplikerede værdier ved hjælp af groupby() funktion.

Fjernelse af duplikerede værdier

Den mest almindelige tilgang til håndtering af dubletter er at fjerne dem fra DataFrame. For at fjerne duplikerede poster fra DataFrame, vil vi bruge drop_duplicates() fungere. Som standard beholder denne funktion den første forekomst af hver dubletrække og fjerner de efterfølgende forekomster. Den identificerer duplikerede værdier baseret på alle kolonneværdier; vi kan dog angive den kolonne, der skal overvejes, ved hjælp af undersætparametre.

Syntaks af drop_duplicates() med standardværdier i parametre er som følger:

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

subset , keep parametre har samme forklaring som i duplicates(). Hvis vi indstiller den tredje parameter inplace til True, vil alle ændringer blive udført direkte på den originale DataFrame, hvilket resulterer i, at metoden vender tilbage None og den originale DataFrame bliver ændret. Som standard, inplace is False.

Her er et eksempel på drop_duplicates() fungere:


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

Output:

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

Tjek vores praktiske, praktiske guide til at lære Git, med bedste praksis, brancheaccepterede standarder og inkluderet snydeark. Stop med at google Git-kommandoer og faktisk lærer det!

I ovenstående eksempel blev den første post slettet, da den var en dublet.

Erstat eller opdater dublerede værdier

Den anden metode til håndtering af dubletter involverer udskiftning af værdien ved hjælp af Pandas replace() fungere. Det replace() funktion giver os mulighed for at erstatte specifikke værdier eller mønstre i en DataFrame med nye værdier. Som standard erstatter den alle forekomster af værdien. Men ved at bruge grænseparameteren kan vi begrænse antallet af erstatninger.

Her er et eksempel på brug af replace() fungere:


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

Output:

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

Her blev grænsen brugt til at erstatte den første værdi. Hvad hvis vi vil erstatte den sidste forekomst? I dette tilfælde vil vi kombinere duplicated() , replace() funktioner. Ved brug af duplicated(), vil vi angive den sidste forekomst af hver dubletværdi, få rækkenummeret ved hjælp af loc funktion, og udskift den derefter ved hjælp af replace() fungere. Her er et eksempel på brug duplicated() , replace() fungerer sammen.


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)

Output:

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

Brugerdefinerede funktioner til komplekse udskiftninger

I nogle tilfælde kræver håndtering af duplikerede værdier mere indviklede udskiftninger end blot at fjerne eller opdatere dem. Brugerdefinerede funktioner gør det muligt for os at skabe specifikke erstatningsregler, der er skræddersyet til vores behov. Ved at bruge pandaerne apply() funktion, kan vi anvende den tilpassede funktion på vores data.

Lad os f.eks. antage, at kolonnen "StudentName" indeholder duplikerede navne. Vores mål er at erstatte dubletter ved hjælp af en brugerdefineret funktion, der tilføjer et tal i slutningen af ​​duplikerede værdier, hvilket gør dem unikke.


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)

Output:

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

Saml data med duplikerede værdier

Data, der indeholder duplikerede værdier, kan aggregeres for at opsummere og få indsigt fra dataene. Pandaerne groupby() funktion giver dig mulighed for at aggregere data med duplikerede værdier. Ved at bruge groupby() funktion, kan du gruppere en eller flere kolonner og beregne middelværdien, medianen eller summen af ​​en anden kolonne for hver gruppe.

Her er et eksempel på brug af groupby() metode:


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

Output:

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

Avancerede teknikker

For at håndtere mere komplekse scenarier og sikre præcise analyser er der nogle avancerede teknikker, som vi kan bruge. Dette afsnit vil diskutere håndtering af uklare dubletter, duplikering i tidsseriedata og duplikerede indeksværdier.

Fuzzy dubletter

Fuzzy dubletter er poster, der ikke er nøjagtige matches, men som ligner hinanden, og de kan forekomme af forskellige årsager, herunder datainputfejl, stavefejl og variationer i formatering. Vi vil bruge fuzzywuzzy Python-bibliotek til at identificere dubletter ved hjælp af strenglighedsmatching.

Her er et eksempel på håndtering af fuzzy værdier:

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

I dette eksempel opretter vi en brugerdefineret funktion find_fuzzy_duplicates der tager en DataFrame, et kolonnenavn og en lighedstærskel som input. Funktionen itererer gennem hver række i DataFrame og sammenligner den med efterfølgende rækker ved hjælp af fuzz.ratio metode fra fuzzywuzzy bibliotek. Hvis lighedsscoren er større end eller lig med tærsklen, føjes de duplikerede rækker til en liste. Endelig returnerer funktionen en DataFrame, der indeholder de uklare dubletter.

Output:

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

I ovenstående eksempel er fuzzy dubletter identificeret i kolonnen "StudentName". Funktionen 'find_fuzzy_duplicates' sammenligner hvert par strenge ved hjælp af fuzzywuzzy biblioteks fuzz.ratio funktion, som beregner en lighedsscore baseret på Levenshtein-afstanden. Vi har sat tærsklen til 70, hvilket betyder, at ethvert navn med et matchforhold på mere end 70 vil blive betragtet som en uklar værdi. Efter at have identificeret uklare værdier, kan vi administrere dem ved hjælp af metoden beskrevet i afsnittet med titlen "Håndtering af dubletter."

Håndtering af tidsseriedataduplikater

Dubletter kan forekomme, når flere observationer registreres på samme tidsstempel. Disse værdier kan føre til skæve resultater, hvis de ikke håndteres korrekt. Her er et par måder at håndtere duplikerede værdier i tidsseriedata.

  • Slet nøjagtige dubletter: I denne metode fjerner vi identiske rækker ved hjælp af drop_duplicates funktion i pandaer.
  • Dublerede tidsstempler med forskellige værdier: Hvis vi har det samme tidsstempel, men forskellige værdier, kan vi samle dataene og få mere indsigt vha. groupby(), eller vi kan vælge den seneste værdi og fjerne de andre vha drop_duplicates() med keep parameter sat til 'sidste'.

Håndtering af duplikerede indeksværdier

Før vi adresserer duplikerede indeksværdier, lad os først definere, hvad et indeks er i Pandas. Et indeks er en unik identifikator, der er tildelt hver række i DataFrame. Pandas tildeler som standard et numerisk indeks, der starter ved nul. Et indeks kan dog tildeles enhver kolonne- eller kolonnekombination. For at identificere dubletter i kolonnen Indeks kan vi bruge duplicated() , drop_duplicates() funktioner, hhv. I dette afsnit vil vi undersøge, hvordan du håndterer dubletter i kolonnen Indeks vha reset_index().

Som navnet antyder, er reset_index() funktion i Pandas bruges til at nulstille en DataFrames indeks. Ved anvendelse af reset_index() funktion, kasseres det aktuelle indeks automatisk, hvilket betyder, at de oprindelige indeksværdier går tabt. Ved at specificere drop parameter som False i reset_index() funktion, kan vi bevare den oprindelige indeksværdi, mens vi nulstiller indekset.

Her er et eksempel på brug 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)

Output:

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

Best Practices

  • Forstå duplikatdatas natur: Før du foretager dig noget, er det afgørende at forstå, hvorfor duplikerede værdier findes, og hvad de repræsenterer. Identificer årsagen, og find derefter de passende trin til at håndtere dem.

  • Vælg en passende metode til håndtering af dubletter: Som diskuteret i tidligere afsnit er der flere måder at håndtere dubletter på. Den metode, du vælger, afhænger af arten af ​​dataene og den analyse, du ønsker at udføre.

  • Dokumentér tilgangen: Det er afgørende at dokumentere processen til at opdage duplikerede værdier og adressere dem, så andre kan forstå tankeprocessen.

  • Udvis forsigtighed: Når vi fjerner eller ændrer data, skal vi sikre, at eliminering af dubletter ikke introducerer fejl eller skævhed i analysen. Udfør fornuftstest og valider resultaterne af hver handling.

  • Bevar de originale data: Før du udfører nogen handling på data, skal du oprette en sikkerhedskopi af de originale data.

  • Forebyg fremtidige dubletter: Implementer foranstaltninger for at forhindre, at dubletter opstår i fremtiden. Dette kan omfatte datavalidering under dataindtastning, datarensningsrutiner eller databasebegrænsninger for at håndhæve unikhed.

Afsluttende tanker

I dataanalyse er adressering af duplikerede værdier et afgørende skridt. Duplikerede værdier kan føre til unøjagtige resultater. Ved at identificere og administrere duplikerede værdier effektivt kan dataanalytikere udlede præcise og væsentlige oplysninger. Implementering af de nævnte teknikker og ved at følge bedste praksis vil gøre det muligt for analytikere at bevare integriteten af ​​deres data og udtrække værdifuld indsigt fra dem.

Tidsstempel:

Mere fra Stablemisbrug