Håndtering av dupliserte verdier i en Pandas DataFrame

Håndtering av dupliserte verdier i en Pandas DataFrame

Introduksjon

Som dataanalytiker er det vårt ansvar å sikre dataintegritet for å få nøyaktig og pålitelig innsikt. Datarensing spiller en viktig rolle i denne prosessen, og dupliserte verdier er blant de vanligste problemene som dataanalytikere møter. Dupliserte verdier kan potensielt feilrepresentere innsikt. Derfor er det avgjørende å ha effektive metoder for å håndtere dupliserte verdier. I denne artikkelen lærer vi hvordan du identifiserer og håndterer dupliserte verdier, samt beste fremgangsmåter for å administrere duplikater.

Identifisere dupliserte verdier

Det første trinnet i å håndtere dupliserte verdier er å identifisere dem. Å identifisere dupliserte verdier er et viktig skritt i datarensing. Pandas tilbyr flere metoder for å identifisere dupliserte verdier innenfor en dataramme. I denne delen vil vi diskutere duplicated() funksjon og value_counts() funksjon for å identifisere dupliserte verdier.

ø duplisert()

De duplicated() funksjon er en Pandas bibliotekfunksjon som sjekker for dupliserte rader i en DataFrame. Utgangen til duplicated() funksjonen er en boolsk serie med samme lengde som inndata-DataFrame, der hvert element indikerer om den tilsvarende raden er en duplikat eller ikke.

La oss vurdere et enkelt eksempel på duplicated() funksjon:

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)

Utgang:

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

I eksemplet ovenfor opprettet vi en DataFrame som inneholder navnene på elevene og deres totale poengsum. Vi påkalte duplicated() på DataFrame, som genererte en boolsk serie med False som representerer unike verdier og True som representerer dupliserte verdier.

I dette eksemplet anses den første forekomsten av verdien som unik. Men hva om vi vil at den siste verdien skal anses som unik, og vi ikke ønsker å vurdere alle kolonnene når vi identifiserer dupliserte verdier? Her kan vi endre duplicated() funksjon ved å endre parameterverdiene.

Parametere: Subset og Keep

De duplicated() funksjonen tilbyr tilpasningsmuligheter gjennom sine valgfrie parametere. Den har to parametere, som beskrevet nedenfor:

  • subset: Denne parameteren lar oss spesifisere undersettet av kolonner som skal vurderes under duplikatdeteksjon. Delsettet er satt til None som standard, noe som betyr at hver kolonne i DataFrame vurderes. For å spesifisere kolonnenavn kan vi gi undersettet en liste over kolonnenavn.

    Her er et eksempel på bruk av delsettparameteren:

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

    Utgang:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: Dette alternativet lar oss velge hvilken forekomst av duplikatraden som skal merkes som en duplikat. De mulige verdiene for keep er:

    • "first": Dette er standardverdien for keep alternativ. Den identifiserer alle duplikater bortsett fra den første forekomsten, og vurderer den første verdien som unik.
    • "last": Dette alternativet identifiserer den siste forekomsten som en unik verdi. Alle andre hendelser vil bli betraktet som duplikater.
    • False: Dette alternativet merker hver forekomst som en duplikatverdi.

Her er et eksempel på bruk av keep parameter:


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

Utgang:

0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
Visualiser dupliserte verdier

De value_counts() funksjon er den andre tilnærmingen for å identifisere duplikater. De value_counts() funksjonen teller antall ganger hver unike verdi vises i en kolonne. Ved å bruke value_counts() funksjon til en spesifikk kolonne, kan frekvensen til hver verdi visualiseres.

Her er et eksempel på bruk av value_counts() funksjon:

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)

Utgang:

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

La oss nå visualisere dupliserte verdier med et stolpediagram. Vi kan effektivt visualisere frekvensen av dupliserte verdier ved hjelp av et stolpediagram.


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

dupliserte verdier

Håndtering av dupliserte verdier

Etter å ha identifisert dupliserte verdier, er det på tide å adressere dem. I denne delen vil vi utforske ulike strategier for å fjerne og oppdatere dupliserte verdier ved å bruke pandaene drop_duplicates() og replace() funksjoner. I tillegg vil vi diskutere aggregering av data med dupliserte verdier ved å bruke groupby() funksjon.

Fjerner dupliserte verdier

Den vanligste tilnærmingen for å håndtere duplikater er å fjerne dem fra DataFrame. For å eliminere dupliserte poster fra DataFrame, vil vi bruke drop_duplicates() funksjon. Som standard beholder denne funksjonen den første forekomsten av hver duplikatrad og fjerner de påfølgende forekomstene. Den identifiserer dupliserte verdier basert på alle kolonneverdier; Vi kan imidlertid spesifisere kolonnen som skal vurderes ved å bruke delsettparametere.

Syntaks av drop_duplicates() med standardverdier i parametere er som følger:

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

De subset og keep parametere har samme forklaring som i duplicates(). Hvis vi setter den tredje parameteren inplace til True, vil alle modifikasjoner bli utført direkte på den originale DataFrame, noe som resulterer i at metoden returnerer None og den originale DataFrame blir endret. Som standard, inplace is False.

Her er et eksempel på drop_duplicates() funksjon:


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

Utgang:

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

Sjekk ut vår praktiske, praktiske guide for å lære Git, med beste praksis, bransjeaksepterte standarder og inkludert jukseark. Slutt å google Git-kommandoer og faktisk lære den!

I eksemplet ovenfor ble den første oppføringen slettet siden den var en duplikat.

Erstatt eller oppdater dupliserte verdier

Den andre metoden for å håndtere duplikater innebærer å erstatte verdien ved å bruke Pandaene replace() funksjon. De replace() funksjonen lar oss erstatte spesifikke verdier eller mønstre i en DataFrame med nye verdier. Som standard erstatter den alle forekomster av verdien. Ved å bruke grenseparameteren kan vi imidlertid begrense antallet erstatninger.

Her er et eksempel på bruk av replace() funksjon:


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

Utgang:

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

Her ble grensen brukt til å erstatte den første verdien. Hva om vi ønsker å erstatte den siste forekomsten? I dette tilfellet vil vi kombinere duplicated() og replace() funksjoner. Ved hjelp av duplicated(), vil vi indikere den siste forekomsten av hver duplikatverdi, få radnummeret ved å bruke loc funksjonen, og erstatt den deretter med replace() funksjon. Her er et eksempel på bruk duplicated() og 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)

Utgang:

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

Egendefinerte funksjoner for komplekse erstatninger

I noen tilfeller krever håndtering av dupliserte verdier mer intrikate erstatninger enn bare å fjerne eller oppdatere dem. Egendefinerte funksjoner gjør det mulig for oss å lage spesifikke erstatningsregler skreddersydd til våre behov. Ved å bruke pandaene apply() funksjon, kan vi bruke den tilpassede funksjonen på dataene våre.

La oss for eksempel anta at "StudentName"-kolonnen inneholder dupliserte navn. Målet vårt er å erstatte duplikater ved å bruke en egendefinert funksjon som legger til et tall på slutten av dupliserte verdier, noe som gjør dem unike.


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)

Utgang:

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

Samle data med dupliserte verdier

Data som inneholder dupliserte verdier kan samles for å oppsummere og få innsikt fra dataene. Pandaene groupby() funksjon lar deg samle data med dupliserte verdier. Ved å bruke groupby() funksjon, kan du gruppere en eller flere kolonner og beregne gjennomsnittet, medianen eller summen av en annen kolonne for hver gruppe.

Her er et eksempel på bruk av groupby() metode:


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

Utgang:

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

Avanserte teknikker

For å håndtere mer komplekse scenarier og sikre nøyaktig analyse, er det noen avanserte teknikker vi kan bruke. Denne delen vil diskutere håndtering av uklare duplikater, duplisering i tidsseriedata og dupliserte indeksverdier.

Fuzzy Duplikater

Uklare duplikater er poster som ikke er eksakte treff, men som ligner, og de kan oppstå av ulike årsaker, inkludert inndatafeil, feilstavinger og variasjoner i formatering. Vi vil bruke fuzzywuzzy Python-bibliotek for å identifisere duplikater ved å bruke strenglikhetsmatching.

Her er et eksempel på håndtering av uklare verdier:

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 eksemplet lager vi en egendefinert funksjon find_fuzzy_duplicates som tar en DataFrame, et kolonnenavn og en likhetsterskel som input. Funksjonen itererer gjennom hver rad i DataFrame og sammenligner den med påfølgende rader ved å bruke fuzz.ratio metoden fra fuzzywuzzy bibliotek. Hvis likhetspoengsummen er større enn eller lik terskelen, legges de dupliserte radene til en liste. Til slutt returnerer funksjonen en DataFrame som inneholder uklare duplikater.

Utgang:

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

I eksemplet ovenfor er uklare duplikater identifisert i kolonnen "StudentName". 'find_fuzzy_duplicates'-funksjonen sammenligner hvert par av strenger ved å bruke fuzzywuzzy bibliotekets fuzz.ratio funksjon, som beregner en likhetspoeng basert på Levenshtein-avstanden. Vi har satt terskelen til 70, noe som betyr at ethvert navn med et samsvarsforhold større enn 70 vil bli ansett som en uklar verdi. Etter å ha identifisert uklare verdier, kan vi administrere dem ved å bruke metoden som er skissert i delen med tittelen "Håndtering av duplikater."

Håndtering av tidsseriedataduplikater

Duplikater kan oppstå når flere observasjoner registreres på samme tidsstempel. Disse verdiene kan føre til partiske resultater hvis de ikke håndteres på riktig måte. Her er noen måter å håndtere dupliserte verdier i tidsseriedata på.

  • Slipper eksakte duplikater: I denne metoden fjerner vi identiske rader ved å bruke drop_duplicates funksjon i pandaer.
  • Dupliserte tidsstempler med forskjellige verdier: Hvis vi har samme tidsstempel, men forskjellige verdier, kan vi samle dataene og få mer innsikt ved å bruke groupby(), eller vi kan velge den nyeste verdien og fjerne de andre ved å bruke drop_duplicates() med keep parameter satt til 'siste'.

Håndtering av dupliserte indeksverdier

Før vi adresserer dupliserte indeksverdier, la oss først definere hva en indeks er i Pandas. En indeks er en unik identifikator som er tilordnet hver rad i DataFrame. Pandas tildeler en numerisk indeks som starter på null som standard. En indeks kan imidlertid tilordnes en hvilken som helst kolonne eller kolonnekombinasjon. For å identifisere duplikater i Indeks-kolonnen kan vi bruke duplicated() og drop_duplicates() funksjoner, henholdsvis. I denne delen vil vi utforske hvordan du håndterer duplikater i Indekskolonnen ved hjelp av reset_index().

Som navnet antyder, har reset_index() funksjonen i Pandas brukes til å tilbakestille en DataFrames indeks. Ved bruk av reset_index() funksjon, blir gjeldende indeks automatisk forkastet, noe som betyr at de første indeksverdiene går tapt. Ved å spesifisere drop parameter som False i reset_index() funksjon, kan vi beholde den opprinnelige indeksverdien mens vi tilbakestiller indeksen.

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

Utgang:

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

Beste praksis

  • Forstå dupliserte datas natur: Før du gjør noe, er det avgjørende å forstå hvorfor dupliserte verdier eksisterer og hva de representerer. Identifiser årsaken og finn deretter de riktige trinnene for å håndtere dem.

  • Velg en passende metode for håndtering av duplikater: Som diskutert i tidligere avsnitt, er det flere måter å håndtere duplikater på. Metoden du velger avhenger av arten av dataene og analysen du har som mål å utføre.

  • Dokumenter tilnærmingen: Det er viktig å dokumentere prosessen for å oppdage dupliserte verdier og adressere dem, slik at andre kan forstå tankeprosessen.

  • Vær forsiktig: Hver gang vi fjerner eller endrer data, må vi sørge for at eliminering av duplikater ikke fører til feil eller skjevheter i analysen. Gjennomfør fornuftstester og valider resultatene av hver handling.

  • Ta vare på de opprinnelige dataene: Før du utfører noen operasjon på data, må du lage en sikkerhetskopi av de originale dataene.

  • Forhindre fremtidige duplikater: Iverksette tiltak for å forhindre at duplikater oppstår i fremtiden. Dette kan inkludere datavalidering under dataregistrering, rutiner for datarensing eller databasebegrensninger for å håndheve unikhet.

Final Thoughts

I dataanalyse er adressering av dupliserte verdier et avgjørende skritt. Dupliserte verdier kan føre til unøyaktige resultater. Ved å identifisere og administrere dupliserte verdier effektivt, kan dataanalytikere utlede presis og betydelig informasjon. Å implementere de nevnte teknikkene og følge beste praksis vil gjøre det mulig for analytikere å bevare integriteten til dataene deres og trekke ut verdifull innsikt fra dem.

Tidstempel:

Mer fra Stackabuse