Omgaan met dubbele waarden in een Panda's DataFrame

Omgaan met dubbele waarden in een Panda's DataFrame

Introductie

Als data-analist is het onze verantwoordelijkheid om de data-integriteit te waarborgen om nauwkeurige en betrouwbare inzichten te verkrijgen. Het opschonen van gegevens speelt een cruciale rol in dit proces en dubbele waarden behoren tot de meest voorkomende problemen die gegevensanalisten tegenkomen. Dubbele waarden kunnen inzichten mogelijk verkeerd voorstellen. Daarom is het cruciaal om efficiรซnte methoden te hebben voor het omgaan met dubbele waarden. In dit artikel leren we hoe we dubbele waarden kunnen identificeren en behandelen, evenals praktische tips voor het beheren van duplicaten.

Dubbele waarden identificeren

De eerste stap bij het omgaan met dubbele waarden is het identificeren ervan. Het identificeren van dubbele waarden is een belangrijke stap bij het opschonen van gegevens. Pandas biedt meerdere methoden voor het identificeren van dubbele waarden binnen een dataframe. In deze paragraaf gaan we in op de duplicated() functie en value_counts() functie voor het identificeren van dubbele waarden.

usin gedupliceerd()

De duplicated() function is een Pandas-bibliotheekfunctie die controleert op dubbele rijen in een DataFrame. De uitvoer van de duplicated() functie is een booleaanse reeks met dezelfde lengte als de invoer DataFrame, waarbij elk element aangeeft of de corresponderende rij al dan niet een duplicaat is.

Laten we eens kijken naar een eenvoudig voorbeeld van de duplicated() functie:

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

In het bovenstaande voorbeeld hebben we een DataFrame gemaakt met de namen van studenten en hun totaalscores. wij riepen duplicated() op het DataFrame, dat een booleaanse reeks genereerde met False vertegenwoordigen unieke waarden en True vertegenwoordigen dubbele waarden.

In dit voorbeeld wordt de eerste keer dat de waarde voorkomt als uniek beschouwd. Wat als we echter willen dat de laatste waarde als uniek wordt beschouwd en we niet alle kolommen in overweging willen nemen bij het identificeren van dubbele waarden? Hier kunnen we de duplicated() functie door de parameterwaarden te wijzigen.

Parameters: subset en behouden

De duplicated() functie biedt aanpassingsmogelijkheden via de optionele parameters. Het heeft twee parameters, zoals hieronder beschreven:

  • subset: Met deze parameter kunnen we de subset van kolommen specificeren waarmee rekening moet worden gehouden tijdens duplicaatdetectie. De subset is ingesteld op None standaard, wat betekent dat er rekening wordt gehouden met elke kolom in het DataFrame. Om kolomnamen op te geven, kunnen we de subset voorzien van een lijst met kolomnamen.

    Hier is een voorbeeld van het gebruik van de parameter subset:

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

    Output:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: Met deze optie kunnen we kiezen welk exemplaar van de gedupliceerde rij als duplicaat moet worden gemarkeerd. De mogelijke waarden voor behouden zijn:

    • "first": Dit is de standaardwaarde voor de keep keuze. Het identificeert alle duplicaten behalve de eerste keer dat de waarde uniek is.
    • "last": Deze optie identificeert het laatste exemplaar als een unieke waarde. Alle andere exemplaren worden als duplicaten beschouwd.
    • False: Deze optie labelt elke instantie als een dubbele waarde.

Hier is een voorbeeld van het gebruik van de 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
Visualiseer dubbele waarden

De value_counts() functie is de tweede benadering voor het identificeren van duplicaten. De value_counts() functie telt het aantal keren dat elke unieke waarde in een kolom voorkomt. Door het toepassen van de value_counts() functie naar een specifieke kolom, kan de frequentie van elke waarde worden gevisualiseerd.

Hier is een voorbeeld van het gebruik van de value_counts() functie:

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

Laten we nu dubbele waarden visualiseren met een staafdiagram. We kunnen de frequentie van dubbele waarden effectief visualiseren met behulp van een staafdiagram.


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

dubbele waarden

Omgaan met dubbele waarden

Na het identificeren van dubbele waarden, is het tijd om ze aan te pakken. In deze sectie zullen we verschillende strategieรซn onderzoeken voor het verwijderen en bijwerken van dubbele waarden met behulp van de panda's drop_duplicates() en replace() functies. Daarnaast bespreken we het aggregeren van gegevens met dubbele waarden met behulp van de groupby() functie.

Dubbele waarden verwijderen

De meest gebruikelijke benadering voor het afhandelen van duplicaten is om ze uit het DataFrame te verwijderen. Om dubbele records uit het DataFrame te verwijderen, gebruiken we de drop_duplicates() functie. Deze functie behoudt standaard de eerste instantie van elke gedupliceerde rij en verwijdert de daaropvolgende exemplaren. Het identificeert dubbele waarden op basis van alle kolomwaarden; we kunnen echter de kolom specificeren die moet worden overwogen met behulp van subsetparameters.

Syntaxis van drop_duplicates() met standaardwaarden in parameters is als volgt:

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

De subset en keep parameters hebben dezelfde uitleg als in duplicates(). Als we de derde parameter instellen inplace naar True, worden alle wijzigingen rechtstreeks op het originele DataFrame uitgevoerd, waardoor de methode terugkeert None en het oorspronkelijke DataFrame wordt gewijzigd. Standaard, inplace is False.

Hier is een voorbeeld van de drop_duplicates() functie:


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

Bekijk onze praktische, praktische gids voor het leren van Git, met best-practices, door de industrie geaccepteerde normen en bijgevoegd spiekbriefje. Stop met Googlen op Git-commando's en eigenlijk leren het!

In het bovenstaande voorbeeld is het eerste item verwijderd omdat het een duplicaat was.

Vervang of update dubbele waarden

De tweede methode voor het afhandelen van duplicaten is het vervangen van de waarde met behulp van de Panda's replace() functie. De replace() functie stelt ons in staat om specifieke waarden of patronen in een DataFrame te vervangen door nieuwe waarden. Standaard vervangt het alle instanties van de waarde. Door de limietparameter te gebruiken, kunnen we echter het aantal vervangingen beperken.

Hier is een voorbeeld van het gebruik van de replace() functie:


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

Hier werd de limiet gebruikt om de eerste waarde te vervangen. Wat als we de laatste instantie willen vervangen? In dit geval combineren we de duplicated() en replace() functies. Gebruik makend van duplicated(), we zullen het laatste exemplaar van elke dubbele waarde aangeven, het rijnummer verkrijgen met behulp van de loc functie, en vervang het dan met behulp van de replace() functie. Hier is een voorbeeld van gebruiken duplicated() en replace() functies samen.


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

Aangepaste functies voor complexe vervangingen

In sommige gevallen vereist het afhandelen van dubbele waarden ingewikkelder vervangingen dan het simpelweg verwijderen of bijwerken ervan. Aangepaste functies stellen ons in staat om specifieke vervangingsregels te creรซren die zijn afgestemd op onze behoeften. Door de panda's te gebruiken apply() functie, kunnen we de aangepaste functie toepassen op onze gegevens.

Laten we bijvoorbeeld aannemen dat de kolom "StudentName" dubbele namen bevat. Ons doel is om duplicaten te vervangen met behulp van een aangepaste functie die een nummer toevoegt aan het einde van dubbele waarden, waardoor ze uniek worden.


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

Verzamel gegevens met dubbele waarden

Gegevens met dubbele waarden kunnen worden samengevoegd om de gegevens samen te vatten en er inzichten uit te halen. De panda's groupby() Met de functie kunt u gegevens samenvoegen met dubbele waarden. Door gebruik te maken van de groupby() functie kunt u een of meer kolommen groeperen en voor elke groep het gemiddelde, de mediaan of de som van een andere kolom berekenen.

Hier is een voorbeeld van het gebruik van de groupby() methode:


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

Output:

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

Geavanceerde technieken

Om complexere scenario's aan te kunnen en nauwkeurige analyse te garanderen, zijn er enkele geavanceerde technieken die we kunnen gebruiken. In deze sectie wordt het omgaan met vage duplicaten, duplicatie in tijdreeksgegevens en dubbele indexwaarden besproken.

Fuzzy Duplicates

Fuzzy duplicaten zijn records die geen exacte overeenkomsten zijn, maar wel vergelijkbaar zijn, en ze kunnen om verschillende redenen voorkomen, waaronder fouten bij het invoeren van gegevens, spelfouten en variaties in opmaak. We zullen de gebruiken fuzzywuzzy Python-bibliotheek om duplicaten te identificeren met behulp van stringovereenkomsten.

Hier is een voorbeeld van het omgaan met vage waarden:

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

In dit voorbeeld maken we een aangepaste functie find_fuzzy_duplicates die een DataFrame, een kolomnaam en een gelijkheidsdrempel als invoer heeft. De functie herhaalt elke rij in het DataFrame en vergelijkt deze met volgende rijen met behulp van de fuzz.ratio methode uit de fuzzywuzzy bibliotheek. Als de gelijkenisscore groter is dan of gelijk is aan de drempel, worden de dubbele rijen toegevoegd aan een lijst. Ten slotte retourneert de functie een DataFrame met de vage duplicaten.

Output:

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

In het bovenstaande voorbeeld worden vage duplicaten geรฏdentificeerd in de kolom "StudentName". De functie 'find_fuzzy_duplicates' vergelijkt elk paar strings met behulp van de fuzzywuzzy bibliotheek fuzz.ratio functie, die een gelijkenisscore berekent op basis van de Levenshtein-afstand. We hebben de drempel ingesteld op 70, wat betekent dat elke naam met een matchratio groter dan 70 wordt beschouwd als een vage waarde. Nadat we vage waarden hebben geรฏdentificeerd, kunnen we ze beheren met behulp van de methode die wordt beschreven in het gedeelte 'Omgaan met duplicaten'.

Duplicaten van tijdreeksgegevens afhandelen

Duplicaten kunnen optreden wanneer meerdere waarnemingen op dezelfde tijdstempel worden geregistreerd. Deze waarden kunnen leiden tot vertekende resultaten als ze niet op de juiste manier worden gehanteerd. Hier volgen enkele manieren om dubbele waarden in tijdreeksgegevens te verwerken.

  • Exacte duplicaten laten vallen: Bij deze methode verwijderen we identieke rijen met behulp van de drop_duplicates functie in Panda's.
  • Dupliceer tijdstempels met verschillende waarden: Als we hetzelfde tijdstempel maar verschillende waarden hebben, kunnen we de gegevens samenvoegen en meer inzicht krijgen met behulp van groupby(), of we kunnen de meest recente waarde selecteren en de andere verwijderen met behulp van drop_duplicates() met de keep parameter ingesteld op 'last'.

Omgaan met dubbele indexwaarden

Voordat we dubbele indexwaarden behandelen, moeten we eerst definiรซren wat een index is in Panda's. Een index is een unieke identificatie die is toegewezen aan elke rij van het DataFrame. Pandas wijst standaard een numerieke index toe die begint bij nul. Aan elke kolom of kolomcombinatie kan echter een index worden toegewezen. Om duplicaten in de kolom Index te identificeren, kunnen we de duplicated() en drop_duplicates() respectievelijke functies. In deze sectie zullen we onderzoeken hoe we duplicaten in de Index-kolom kunnen behandelen met behulp van reset_index().

Zoals de naam al aangeeft, is de reset_index() functie in Panda's wordt gebruikt om de index van een DataFrame opnieuw in te stellen. Bij het toepassen van de reset_index() functie, wordt de huidige index automatisch weggegooid, wat betekent dat de initiรซle indexwaarden verloren gaan. Door het specificeren van de drop parameter als False in de reset_index() functie, kunnen we de oorspronkelijke indexwaarde behouden terwijl we de index resetten.

Hier is een voorbeeld van het gebruik van 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

  • Begrijp de aard van dubbele gegevens: Voordat u actie onderneemt, is het cruciaal om te begrijpen waarom dubbele waarden bestaan โ€‹โ€‹en wat ze vertegenwoordigen. Identificeer de hoofdoorzaak en bepaal vervolgens de juiste stappen om deze aan te pakken.

  • Selecteer een geschikte methode voor het afhandelen van duplicaten: Zoals besproken in vorige secties, zijn er meerdere manieren om duplicaten te behandelen. De methode die u kiest, hangt af van de aard van de gegevens en de analyse die u wilt uitvoeren.

  • Documenteer de aanpak: Het is essentieel om het proces voor het detecteren van dubbele waarden en het aanpakken ervan te documenteren, zodat anderen het denkproces kunnen begrijpen.

  • Wees voorzichtig: Telkens wanneer we gegevens verwijderen of wijzigen, moeten we ervoor zorgen dat het verwijderen van duplicaten geen fouten of vooringenomenheid in de analyse introduceert. Voer gezondheidstests uit en valideer de resultaten van elke actie.

  • Bewaar de originele gegevens: Maak een reservekopie van de originele gegevens voordat u een handeling uitvoert op gegevens.

  • Voorkom toekomstige duplicaten: Tref maatregelen om te voorkomen dat er in de toekomst dubbels ontstaan. Dit kan gegevensvalidatie zijn tijdens gegevensinvoer, gegevensopschoningsroutines of databasebeperkingen om uniciteit af te dwingen.

Conclusie

Bij data-analyse is het aanpakken van dubbele waarden een cruciale stap. Dubbele waarden kunnen leiden tot onnauwkeurige resultaten. Door dubbele waarden efficiรซnt te identificeren en te beheren, kunnen gegevensanalisten nauwkeurige en significante informatie afleiden. Door de genoemde technieken te implementeren en best practices te volgen, kunnen analisten de integriteit van hun gegevens behouden en er waardevolle inzichten uit halen.

Tijdstempel:

Meer van Stapelmisbruik