Ravnanje s podvojenimi vrednostmi v Pandas DataFrame

Ravnanje s podvojenimi vrednostmi v Pandas DataFrame

Predstavitev

Kot podatkovni analitik je naša odgovornost zagotoviti celovitost podatkov, da pridobimo natančne in zaupanja vredne vpoglede. Čiščenje podatkov igra ključno vlogo v tem procesu, podvojene vrednosti pa so med najpogostejšimi težavami, s katerimi se srečujejo analitiki podatkov. Podvojene vrednosti lahko potencialno napačno predstavijo vpoglede. Zato je ključnega pomena, da imamo učinkovite metode za obravnavo podvojenih vrednosti. V tem članku se bomo naučili, kako prepoznati in obravnavati podvojene vrednosti, ter najboljše prakse za upravljanje dvojnikov.

Prepoznavanje podvojenih vrednosti

Prvi korak pri ravnanju s podvojenimi vrednostmi je njihovo prepoznavanje. Prepoznavanje podvojenih vrednosti je pomemben korak pri čiščenju podatkov. Pandas ponuja več metod za prepoznavanje podvojenih vrednosti znotraj podatkovnega okvira. V tem razdelku bomo razpravljali o duplicated() funkcijo in value_counts() funkcijo za prepoznavanje podvojenih vrednosti.

Usin podvojeno()

O duplicated() je funkcija knjižnice Pandas, ki preverja podvojene vrstice v DataFrame. Izhod iz duplicated() funkcija je logična vrsta z enako dolžino kot vhodni DataFrame, kjer vsak element označuje, ali je ustrezna vrstica dvojnik ali ne.

Oglejmo si preprost primer duplicated() funkcija:

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)

izhod:

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

V zgornjem primeru smo ustvarili DataFrame, ki vsebuje imena študentov in njihove skupne rezultate. Sklicevali smo se duplicated() na DataFrame, ki je ustvaril logično serijo z False ki predstavlja edinstvene vrednote in True ki predstavljajo podvojene vrednosti.

V tem primeru se prva pojavitev vrednosti šteje za edinstveno. Kaj pa, če želimo, da se zadnja vrednost šteje za edinstveno in ne želimo upoštevati vseh stolpcev pri prepoznavanju podvojenih vrednosti? Tukaj lahko spremenimo duplicated() funkcijo s spreminjanjem vrednosti parametrov.

Parametri: podnabor in ohrani

O duplicated() funkcija ponuja možnosti prilagajanja prek izbirnih parametrov. Ima dva parametra, kot je opisano spodaj:

  • subset: Ta parameter nam omogoča, da določimo podnabor stolpcev, ki jih je treba upoštevati med odkrivanjem dvojnikov. Podnabor je nastavljen na None privzeto, kar pomeni, da se upošteva vsak stolpec v DataFrame. Če želite določiti imena stolpcev, lahko podnaboru zagotovimo seznam imen stolpcev.

    Tu je primer uporabe parametra podnabora:

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

    izhod:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: Ta možnost nam omogoča, da izberemo, kateri primerek podvojene vrstice naj bo označen kot dvojnik. Možne vrednosti za ohranitev so:

    • "first": To je privzeta vrednost za keep možnost. Identificira vse dvojnike razen prvega, pri čemer meni, da je prva vrednost edinstvena.
    • "last": Ta možnost identificira zadnjo pojavitev kot edinstveno vrednost. Vsi drugi pojavi se bodo obravnavali kot dvojniki.
    • False: Ta možnost označi vsak primer kot podvojeno vrednost.

Tukaj je primer uporabe keep parameter:


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

izhod:

0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
Vizualizirajte podvojene vrednosti

O value_counts() funkcija je drugi pristop za prepoznavanje dvojnikov. The value_counts() funkcija prešteje, kolikokrat se posamezna edinstvena vrednost pojavi v stolpcu. Z uporabo value_counts() funkcijo v določen stolpec, je mogoče vizualizirati frekvenco vsake vrednosti.

Tukaj je primer uporabe value_counts() funkcija:

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)

izhod:

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

Predstavimo zdaj podvojene vrednosti s paličnim grafom. S paličnim grafikonom lahko učinkovito vizualiziramo pogostost podvojenih vrednosti.


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

podvojene vrednosti

Ravnanje s podvojenimi vrednostmi

Ko odkrijete podvojene vrednosti, je čas, da jih obravnavate. V tem razdelku bomo raziskali različne strategije za odstranjevanje in posodabljanje podvojenih vrednosti z uporabo pand drop_duplicates() in replace() funkcije. Poleg tega bomo razpravljali o združevanju podatkov s podvojenimi vrednostmi z uporabo groupby() Funkcija.

Odstranjevanje podvojenih vrednosti

Najpogostejši pristop za ravnanje z dvojniki je, da jih odstranite iz DataFrame. Za odstranitev podvojenih zapisov iz DataFrame bomo uporabili drop_duplicates() funkcijo. Ta funkcija privzeto obdrži prvi primerek vsake podvojene vrstice in odstrani naslednje pojavitve. Identificira podvojene vrednosti na podlagi vseh vrednosti stolpcev; vendar pa lahko določimo stolpec, ki ga je treba upoštevati, z uporabo parametrov podnabora.

Sintaksa za drop_duplicates() s privzetimi vrednostmi v parametrih je naslednji:

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

O subset in keep parametri imajo enako razlago kot v duplicates(). Če nastavimo tretji parameter inplace do True, bodo vse spremembe izvedene neposredno na izvirnem DataFrame, zaradi česar se bo metoda vrnila None in izvirni DataFrame, ki se spreminja. Privzeto, inplace is False.

Tukaj je primer drop_duplicates() funkcija:


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

izhod:

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

Oglejte si naš praktični, praktični vodnik za učenje Gita z najboljšimi praksami, standardi, sprejetimi v panogi, in priloženo goljufijo. Nehajte Googlati ukaze Git in pravzaprav naučiti it!

V zgornjem primeru je bil prvi vnos izbrisan, ker je bil dvojnik.

Zamenjajte ali posodobite podvojene vrednosti

Druga metoda za obravnavanje dvojnikov vključuje zamenjavo vrednosti z uporabo Pand replace() funkcijo. The replace() nam omogoča zamenjavo določenih vrednosti ali vzorcev v DataFrame z novimi vrednostmi. Privzeto zamenja vse primerke vrednosti. Z uporabo parametra limit pa lahko omejimo število zamenjav.

Tukaj je primer uporabe replace() funkcija:


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

izhod:

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

Tu je bila omejitev uporabljena za zamenjavo prve vrednosti. Kaj pa, če želimo zamenjati zadnjo pojavitev? V tem primeru bomo združili duplicated() in replace() funkcije. Uporaba duplicated(), bomo navedli zadnji primerek vsake podvojene vrednosti, pridobili številko vrstice z uporabo loc in jo nato zamenjajte z replace() funkcijo. Tukaj je primer uporabe duplicated() in replace() deluje skupaj.


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)

izhod:

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

Funkcije po meri za kompleksne zamenjave

V nekaterih primerih obravnavanje podvojenih vrednosti zahteva bolj zapletene zamenjave kot preprosto odstranjevanje ali posodabljanje le-teh. Funkcije po meri nam omogočajo, da ustvarimo posebna pravila za zamenjavo, prilagojena našim potrebam. Z uporabo pand apply() funkcijo, lahko funkcijo po meri uporabimo za naše podatke.

Na primer, predpostavimo, da stolpec »StudentName« vsebuje podvojena imena. Naš cilj je zamenjati dvojnike s funkcijo po meri, ki doda številko na koncu podvojenih vrednosti, zaradi česar so edinstvene.


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)

izhod:

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

Zbirni podatki s podvojenimi vrednostmi

Podatke, ki vsebujejo podvojene vrednosti, je mogoče združiti, da jih povzamemo in pridobimo vpogled v podatke. Pande groupby() vam omogoča združevanje podatkov s podvojenimi vrednostmi. Z uporabo groupby() funkcijo, lahko združite enega ali več stolpcev in izračunate povprečje, mediano ali vsoto drugega stolpca za vsako skupino.

Tukaj je primer uporabe groupby() metoda:


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

izhod:

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

Napredne tehnike

Za obravnavo bolj zapletenih scenarijev in zagotavljanje natančne analize obstaja nekaj naprednih tehnik, ki jih lahko uporabimo. V tem razdelku bomo razpravljali o obravnavanju mehkih dvojnikov, podvajanju podatkov časovnih vrst in podvojenih vrednostih indeksov.

Fuzzy Dvojniki

Nejasni dvojniki so zapisi, ki se ne ujemajo natančno, vendar so si podobni in se lahko pojavijo zaradi različnih razlogov, vključno z napakami pri vnosu podatkov, napačno črkovanimi besedami in različicami oblikovanja. Uporabili bomo fuzzywuzzy Knjižnica Python za prepoznavanje dvojnikov z uporabo ujemanja podobnosti nizov.

Tukaj je primer ravnanja z mehkimi vrednostmi:

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

V tem primeru ustvarimo funkcijo po meri find_fuzzy_duplicates ki kot vhod sprejme DataFrame, ime stolpca in prag podobnosti. Funkcija ponovi vsako vrstico v DataFrame in jo primerja z naslednjimi vrsticami z uporabo fuzz.ratio metoda iz fuzzywuzzy knjižnica. Če je ocena podobnosti večja ali enaka pragu, se podvojene vrstice dodajo na seznam. Končno funkcija vrne DataFrame, ki vsebuje mehke dvojnike.

izhod:

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

V zgornjem primeru so mehki dvojniki identificirani v stolpcu »StudentName«. Funkcija 'find_fuzzy_duplicates' primerja vsak par nizov z uporabo fuzzywuzzy knjižnice fuzz.ratio funkcijo, ki izračuna oceno podobnosti na podlagi Levenshteinove razdalje. Prag smo nastavili na 70, kar pomeni, da bo vsako ime z razmerjem ujemanja, večjim od 70, obravnavano kot mehka vrednost. Ko identificiramo mehke vrednosti, jih lahko upravljamo z uporabo metode, opisane v razdelku z naslovom »Ravnanje s podvojenimi podatki«.

Ravnanje s podvojenimi podatki časovnih vrst

Do dvojnikov lahko pride, če je več opazovanj zabeleženih ob istem časovnem žigu. Te vrednosti lahko povzročijo pristranske rezultate, če z njimi ne ravnate pravilno. Tukaj je nekaj načinov za obravnavanje podvojenih vrednosti v podatkih časovne vrste.

  • Odstranjevanje natančnih dvojnikov: Pri tej metodi odstranimo enake vrstice z uporabo drop_duplicates funkcijo v Pandas.
  • Podvojeni časovni žigi z različnimi vrednostmi: Če imamo isti časovni žig, vendar različne vrednosti, lahko združimo podatke in pridobimo boljši vpogled z groupby()ali pa lahko izberemo najnovejšo vrednost in odstranimo druge z uporabo drop_duplicates() s keep parameter nastavljen na 'zadnji'.

Ravnanje s podvojenimi vrednostmi indeksa

Preden obravnavamo podvojene vrednosti indeksa, najprej definirajmo, kaj je indeks v Pandas. Indeks je enoličen identifikator, dodeljen vsaki vrstici DataFrame. Pandas privzeto dodeli številski indeks, ki se začne pri nič. Vendar pa lahko indeks dodelite kateremu koli stolpcu ali kombinaciji stolpcev. Za identifikacijo dvojnikov v stolpcu Indeks lahko uporabimo duplicated() in drop_duplicates() funkcije oz. V tem razdelku bomo raziskali, kako obravnavati dvojnike v stolpcu Indeks z uporabo reset_index().

Kot že ime pove, reset_index() funkcija v Pandas se uporablja za ponastavitev indeksa DataFrame. Pri nanosu na reset_index() funkcijo, se trenutni indeks samodejno zavrže, kar pomeni, da se začetne vrednosti indeksa izgubijo. Z določitvijo drop parameter kot False v reset_index() funkcijo, lahko med ponastavitvijo indeksa ohranimo prvotno vrednost indeksa.

Tukaj je primer uporabe 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)

izhod:

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

Najboljše prakse

  • Razumeti naravo podvojenih podatkov: Preden ukrepate, je ključno razumeti, zakaj obstajajo podvojene vrednosti in kaj predstavljajo. Ugotovite glavni vzrok in nato določite ustrezne korake za njihovo odpravo.

  • Izberite ustrezno metodo za ravnanje s dvojniki: Kot smo razpravljali v prejšnjih razdelkih, obstaja več načinov za obravnavanje dvojnikov. Metoda, ki jo izberete, je odvisna od narave podatkov in analize, ki jo želite izvesti.

  • Dokumentirajte pristop: Ključnega pomena je dokumentirati postopek odkrivanja podvojenih vrednosti in njihovega obravnavanja, da bi drugim omogočili razumevanje miselnega procesa.

  • Bodite previdni: Kadar koli odstranimo ali spremenimo podatke, moramo zagotoviti, da izločitev dvojnikov v analizo ne povzroči napak ali pristranskosti. Izvedite teste razumnosti in potrdite rezultate vsakega dejanja.

  • Ohranite izvirne podatke: Preden izvedete kakršno koli operacijo s podatki, ustvarite varnostno kopijo izvirnih podatkov.

  • Preprečite prihodnje dvojnike: Izvedite ukrepe za preprečevanje podvajanja v prihodnosti. To lahko vključuje preverjanje veljavnosti podatkov med vnosom podatkov, rutine čiščenja podatkov ali omejitve baze podatkov za uveljavljanje edinstvenosti.

Končna thoughts

Pri analizi podatkov je obravnavanje podvojenih vrednosti ključni korak. Podvojene vrednosti lahko povzročijo netočne rezultate. Z učinkovitim odkrivanjem in upravljanjem podvojenih vrednosti lahko analitiki podatkov pridobijo natančne in pomembne informacije. Izvajanje omenjenih tehnik in upoštevanje najboljših praks bo analitikom omogočilo, da ohranijo celovitost svojih podatkov in iz njih pridobijo dragocene vpoglede.

Časovni žig:

Več od Stackabuse