Hantera dubbletter av värden i en Pandas DataFrame

Hantera dubbletter av värden i en Pandas DataFrame

Beskrivning

Som dataanalytiker är det vårt ansvar att säkerställa dataintegritet för att få korrekta och pålitliga insikter. Datarensning spelar en viktig roll i denna process, och dubbletter av värden är bland de vanligaste problemen som dataanalytiker stöter på. Dubblettvärden kan potentiellt ge felaktiga insikter. Därför är det avgörande att ha effektiva metoder för att hantera dubbletter av värden. I den här artikeln kommer vi att lära oss hur du identifierar och hanterar dubbletter av värden, samt bästa praxis för att hantera dubbletter.

Identifiera dubbletter av värden

Det första steget i att hantera dubbletter av värden är att identifiera dem. Att identifiera dubbletter av värden är ett viktigt steg i datarensningen. Pandas erbjuder flera metoder för att identifiera dubbletter av värden inom en dataram. I det här avsnittet kommer vi att diskutera duplicated() funktion och value_counts() funktion för att identifiera dubbletter av värden.

usin duplicerad()

Smakämnen duplicated() funktion är en Pandas biblioteksfunktion som söker efter dubbletter av rader i en DataFrame. Utgången av duplicated() funktion är en boolesk serie med samma längd som indataramen, där varje element indikerar om motsvarande rad är en dubblett eller inte.

Låt oss överväga ett enkelt exempel på duplicated() fungera:

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)

Produktion:

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

I exemplet ovan skapade vi en DataFrame som innehåller namnen på eleverna och deras totala poäng. Vi åberopade duplicated() på DataFrame, som genererade en boolesk serie med False representerar unika värden och True representerar dubbla värden.

I det här exemplet anses den första förekomsten av värdet vara unik. Men vad händer om vi vill att det sista värdet ska betraktas som unikt och vi inte vill ta hänsyn till alla kolumner när vi identifierar dubbletter av värden? Här kan vi ändra duplicated() funktion genom att ändra parametervärdena.

Parametrar: Subset och Keep

Smakämnen duplicated() funktionen erbjuder anpassningsalternativ genom sina valfria parametrar. Den har två parametrar, som beskrivs nedan:

  • subset: Den här parametern gör det möjligt för oss att ange delmängden av kolumner som ska beaktas vid dubblettdetektering. Delmängden är inställd på None som standard, vilket innebär att varje kolumn i DataFrame beaktas. För att ange kolumnnamn kan vi förse delmängden med en lista med kolumnnamn.

    Här är ett exempel på hur du använder delmängdsparametern:

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

    Produktion:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: Det här alternativet låter oss välja vilken instans av dubblettraden som ska markeras som en dubblett. De möjliga värdena för keep är:

    • "first": Detta är standardvärdet för keep alternativ. Den identifierar alla dubbletter utom den första förekomsten, med tanke på att det första värdet är unikt.
    • "last": Det här alternativet identifierar den senaste förekomsten som ett unikt värde. Alla andra händelser kommer att betraktas som dubbletter.
    • False: Detta alternativ markerar varje instans som ett dubblettvärde.

Här är ett exempel på hur du använder keep parameter:


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

Produktion:

0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
Visualisera dubbletter av värden

Smakämnen value_counts() funktion är den andra metoden för att identifiera dubbletter. De value_counts() funktion räknar antalet gånger varje unikt värde visas i en kolumn. Genom att tillämpa value_counts() funktion till en specifik kolumn, kan frekvensen för varje värde visualiseras.

Här är ett exempel på hur du använder value_counts() fungera:

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)

Produktion:

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

Låt oss nu visualisera dubbletter av värden med ett stapeldiagram. Vi kan effektivt visualisera frekvensen av dubbletter av värden med hjälp av ett stapeldiagram.


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

dubbletter av värden

Hantera dubbletter av värden

Efter att ha identifierat dubbla värden är det dags att ta itu med dem. I det här avsnittet kommer vi att utforska olika strategier för att ta bort och uppdatera dubbletter av värden med hjälp av pandorna drop_duplicates() och replace() funktioner. Dessutom kommer vi att diskutera aggregering av data med dubbletter av värden med hjälp av groupby() funktion.

Ta bort dubbletter av värden

Den vanligaste metoden för att hantera dubbletter är att ta bort dem från DataFrame. För att eliminera dubbletter av poster från DataFrame kommer vi att använda drop_duplicates() fungera. Som standard behåller den här funktionen den första instansen av varje dubblettrad och tar bort de efterföljande förekomsterna. Den identifierar dubbletter av värden baserat på alla kolumnvärden; Vi kan dock ange vilken kolumn som ska övervägas med hjälp av delmängdsparametrar.

Syntax för drop_duplicates() med standardvärden i parametrar är följande:

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

Smakämnen subset och keep parametrar har samma förklaring som i duplicates(). Om vi ​​ställer in den tredje parametern inplace till True, kommer alla ändringar att utföras direkt på den ursprungliga DataFrame, vilket resulterar i att metoden returnerar None och den ursprungliga DataFrame som modifieras. Som standard, inplace is False.

Här är ett exempel på drop_duplicates() fungera:


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

Produktion:

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

Kolla in vår praktiska, praktiska guide för att lära dig Git, med bästa praxis, branschaccepterade standarder och medföljande fuskblad. Sluta googla Git-kommandon och faktiskt lära Det!

I exemplet ovan raderades den första posten eftersom den var en dubblett.

Ersätt eller uppdatera dubblettvärden

Den andra metoden för att hantera dubbletter innebär att ersätta värdet med Pandas replace() fungera. De replace() funktion låter oss ersätta specifika värden eller mönster i en DataFrame med nya värden. Som standard ersätter den alla instanser av värdet. Men genom att använda limit-parametern kan vi begränsa antalet ersättningar.

Här är ett exempel på hur du använder replace() fungera:


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

Produktion:

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

Här användes gränsen för att ersätta det första värdet. Vad händer om vi vill ersätta den senaste förekomsten? I det här fallet kommer vi att kombinera duplicated() och replace() funktioner. Använder sig av duplicated(), kommer vi att indikera den sista instansen av varje dubblettvärde, skaffa radnumret med hjälp av loc funktionen och ersätt den sedan med replace() fungera. Här är ett exempel på användning duplicated() och replace() fungerar tillsammans.


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)

Produktion:

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

Anpassade funktioner för komplexa ersättningar

I vissa fall kräver hantering av dubbletter av värden mer komplicerade ersättningar än att bara ta bort eller uppdatera dem. Anpassade funktioner gör det möjligt för oss att skapa specifika ersättningsregler skräddarsydda efter våra behov. Genom att använda pandorna apply() funktion, kan vi tillämpa den anpassade funktionen på våra data.

Låt oss till exempel anta att kolumnen "StudentName" innehåller dubbletter av namn. Vårt mål är att ersätta dubbletter med en anpassad funktion som lägger till ett nummer i slutet av dubblettvärden, vilket gör dem unika.


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)

Produktion:

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

Aggregera data med dubbletter av värden

Data som innehåller dubbletter av värden kan aggregeras för att sammanfatta och få insikter från data. Pandas groupby() funktionen låter dig aggregera data med dubbletter av värden. Genom att använda groupby() funktion kan du gruppera en eller flera kolumner och beräkna medelvärdet, medianen eller summan av en annan kolumn för varje grupp.

Här är ett exempel på hur du använder groupby() metod:


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

Produktion:

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

Avancerade tekniker

För att hantera mer komplexa scenarier och säkerställa korrekt analys finns det några avancerade tekniker som vi kan använda. Det här avsnittet kommer att diskutera hantering av otydliga dubbletter, dubblering i tidsseriedata och dubbletter av indexvärden.

Fuzzy dubbletter

Fuzzy dubbletter är poster som inte är exakta matchningar men som är liknande, och de kan uppstå av olika anledningar, inklusive datainmatningsfel, felstavningar och variationer i formateringen. Vi kommer att använda fuzzywuzzy Python-bibliotek för att identifiera dubbletter med hjälp av stränglikhetsmatchning.

Här är ett exempel på hur du hanterar fuzzy värden:

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 det här exemplet skapar vi en anpassad funktion find_fuzzy_duplicates som tar en DataFrame, ett kolumnnamn och en likhetströskel som indata. Funktionen itererar genom varje rad i DataFrame och jämför den med efterföljande rader med hjälp av fuzz.ratio metod från fuzzywuzzy bibliotek. Om likhetspoängen är större än eller lika med tröskeln läggs de dubbla raderna till i en lista. Slutligen returnerar funktionen en DataFrame som innehåller suddiga dubbletter.

Produktion:

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

I exemplet ovan identifieras fuzzy dubbletter i kolumnen "StudentName". Funktionen 'find_fuzzy_duplicates' jämför varje par av strängar med hjälp av fuzzywuzzy bibliotek fuzz.ratio funktion, som beräknar ett likhetspoäng baserat på Levenshtein-avståndet. Vi har satt tröskeln till 70, vilket betyder att alla namn med ett matchningsförhållande större än 70 kommer att betraktas som ett fuzzy värde. Efter att ha identifierat otydliga värden kan vi hantera dem med metoden som beskrivs i avsnittet "Hantera dubbletter."

Hantera tidsseriedatadubbletter

Dubletter kan uppstå när flera observationer registreras vid samma tidsstämpel. Dessa värden kan leda till partiska resultat om de inte hanteras korrekt. Här är några sätt att hantera dubbletter av värden i tidsseriedata.

  • Släpp exakta dubbletter: I den här metoden tar vi bort identiska rader med hjälp av drop_duplicates funktion i Pandas.
  • Duplicera tidsstämplar med olika värden: Om vi ​​har samma tidsstämpel men olika värden kan vi aggregera data och få mer insikt med groupby(), eller så kan vi välja det senaste värdet och ta bort de andra med hjälp av drop_duplicates() med keep parameter satt till 'sista'.

Hantera dubbletter av indexvärden

Innan vi tar upp dubbletter av indexvärden, låt oss först definiera vad ett index är i Pandas. Ett index är en unik identifierare som tilldelas varje rad i DataFrame. Pandas tilldelar ett numeriskt index som börjar på noll som standard. Ett index kan dock tilldelas vilken kolumn- eller kolumnkombination som helst. För att identifiera dubbletter i Index-kolumnen kan vi använda duplicated() och drop_duplicates() funktioner, respektive. I det här avsnittet kommer vi att utforska hur du hanterar dubbletter i Index-kolumnen med hjälp av reset_index().

Som namnet antyder, reset_index() funktion i Pandas används för att återställa en DataFrames index. Vid tillämpning av reset_index() funktionen förkastas det aktuella indexet automatiskt, vilket innebär att de initiala indexvärdena går förlorade. Genom att specificera drop parameter som False i reset_index() funktion, kan vi behålla det ursprungliga indexvärdet samtidigt som vi återställer indexet.

Här är ett exempel på användning 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)

Produktion:

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

Best Practices

  • Förstå Duplicate Data's Nature: Innan du vidtar någon åtgärd är det viktigt att förstå varför duplicerade värden finns och vad de representerar. Identifiera grundorsaken och bestäm sedan lämpliga steg för att hantera dem.

  • Välj en lämplig metod för hantering av dubbletter: Som diskuterats i tidigare avsnitt finns det flera sätt att hantera dubbletter. Vilken metod du väljer beror på vilken typ av data och vilken analys du vill utföra.

  • Dokumentera tillvägagångssättet: Det är viktigt att dokumentera processen för att upptäcka dubbla värden och ta itu med dem, så att andra kan förstå tankeprocessen.

  • Var försiktig: Närhelst vi tar bort eller ändrar data måste vi se till att eliminering av dubbletter inte leder till fel eller fördomar i analysen. Genomför förnuftstester och validera resultaten av varje åtgärd.

  • Bevara originaldata: Innan du utför någon operation på data, skapa en säkerhetskopia av originaldata.

  • Förhindra framtida dubbletter: Genomför åtgärder för att förhindra att dubbletter uppstår i framtiden. Detta kan inkludera datavalidering under datainmatning, datarensningsrutiner eller databasbegränsningar för att framtvinga unikhet.

Avslutande tankar

I dataanalys är det ett avgörande steg att ta itu med dubbletter av värden. Dubblettvärden kan leda till felaktiga resultat. Genom att identifiera och hantera dubbletter av värden effektivt kan dataanalytiker härleda exakt och betydande information. Genom att implementera de nämnda teknikerna och följa bästa praxis kommer analytiker att kunna bevara integriteten hos sina data och extrahera värdefulla insikter från den.

Tidsstämpel:

Mer från Stackabuse