Päällekkäisten arvojen käsittely Pandas DataFrame -kehyksessä

Päällekkäisten arvojen käsittely Pandas DataFrame -kehyksessä

esittely

Tietojen analyytikkona meidän vastuullamme on varmistaa tietojen eheys, jotta voimme saada tarkkoja ja luotettavia näkemyksiä. Tietojen puhdistamisella on keskeinen rooli tässä prosessissa, ja päällekkäiset arvot ovat yksi yleisimmistä ongelmista, joita data-analyytikot kohtaavat. Päällekkäiset arvot voivat antaa vääriä tietoja. Siksi on ratkaisevan tärkeää, että meillä on tehokkaat menetelmät päällekkäisten arvojen käsittelemiseksi. Tässä artikkelissa opimme tunnistamaan ja käsittelemään päällekkäisiä arvoja sekä parhaita käytäntöjä kaksoiskappaleiden hallintaan.

Päällekkäisten arvojen tunnistaminen

Ensimmäinen askel päällekkäisten arvojen käsittelyssä on tunnistaa ne. Päällekkäisten arvojen tunnistaminen on tärkeä vaihe tietojen puhdistamisessa. Pandas tarjoaa useita tapoja tunnistaa päällekkäisiä arvoja tietokehyksen sisällä. Tässä osiossa keskustelemme mm duplicated() toiminto ja value_counts() toiminto päällekkäisten arvojen tunnistamiseen.

monistettu ()

- duplicated() Funktio on Pandasin kirjastotoiminto, joka tarkistaa, onko DataFramessa päällekkäisiä rivejä. Tuotos duplicated() funktio on boolen sarja, jonka pituus on sama kuin syötetyn DataFrame:n, jossa jokainen elementti osoittaa, onko vastaava rivi kopio vai ei.

Tarkastellaanpa yksinkertaista esimerkkiä duplicated() toiminto:

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)

lähtö:

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

Yllä olevassa esimerkissä loimme DataFrame-kehyksen, joka sisältää opiskelijoiden nimet ja heidän kokonaispistemääränsä. Me kutsuimme duplicated() DataFrame-kehyksessä, joka loi loogisen sarjan kanssa False edustavat ainutlaatuisia arvoja ja True edustavat päällekkäisiä arvoja.

Tässä esimerkissä arvon ensimmäistä esiintymää pidetään ainutlaatuisena. Mutta entä jos haluamme, että viimeistä arvoa pidetään ainutlaatuisena, emmekä halua ottaa huomioon kaikkia sarakkeita määritettäessä päällekkäisiä arvoja? Täällä voimme muokata duplicated() toimintoa muuttamalla parametriarvoja.

Parametrit: Subset ja Keep

- duplicated() toiminto tarjoaa mukautusvaihtoehtoja valinnaisten parametrien kautta. Siinä on kaksi parametria, kuten alla on kuvattu:

  • subset: Tämän parametrin avulla voimme määrittää sarakkeiden osajoukon, jotka otetaan huomioon päällekkäisyyden havaitsemisen aikana. Osajoukko on asetettu arvoon None oletusarvoisesti, mikä tarkoittaa, että jokainen DataFramen sarake otetaan huomioon. Sarakkeiden nimien määrittämiseksi voimme tarjota osajoukolle luettelon sarakkeiden nimistä.

    Tässä on esimerkki osajoukkoparametrin käytöstä:

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

    lähtö:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: Tämän vaihtoehdon avulla voimme valita, mikä kaksoisrivin esiintymä merkitään kaksoiskappaleeksi. Mahdolliset säilytysarvot ovat:

    • "first": Tämä on oletusarvo keep vaihtoehto. Se tunnistaa kaikki kaksoiskappaleet ensimmäistä esiintymää lukuun ottamatta, koska ensimmäinen arvo on ainutlaatuinen.
    • "last": Tämä vaihtoehto tunnistaa viimeisimmän esiintymän yksilöllisenä arvona. Kaikki muut tapahtumat katsotaan kaksoiskappaleiksi.
    • False: Tämä vaihtoehto merkitsee jokaisen esiintymän kaksoisarvoksi.

Tässä on esimerkki keep parametri:


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

lähtö:

0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
Visualisoi päällekkäiset arvot

- value_counts() toiminto on toinen tapa tunnistaa kaksoiskappaleet. The value_counts() funktio laskee, kuinka monta kertaa kukin yksilöllinen arvo näkyy sarakkeessa. Soveltamalla value_counts() funktion tiettyyn sarakkeeseen, kunkin arvon taajuus voidaan visualisoida.

Tässä on esimerkki value_counts() toiminto:

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)

lähtö:

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

Visualisoidaan nyt päällekkäiset arvot pylväskaaviolla. Pylväskaavion avulla voimme tehokkaasti visualisoida päällekkäisten arvojen esiintymistiheyden.


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

päällekkäiset arvot

Päällekkäisten arvojen käsittely

Kun kaksoisarvot on tunnistettu, on aika käsitellä niitä. Tässä osiossa tutkimme erilaisia ​​strategioita päällekkäisten arvojen poistamiseksi ja päivittämiseksi pandojen avulla drop_duplicates() ja replace() toimintoja. Lisäksi keskustelemme tietojen yhdistämisestä päällekkäisillä arvoilla käyttämällä groupby() toiminto.

Päällekkäisten arvojen poistaminen

Yleisin tapa käsitellä kaksoiskappaleita on poistaa ne DataFramesta. Päällekkäisten tietueiden poistamiseksi DataFramesta käytämme drop_duplicates() toiminto. Oletusarvoisesti tämä toiminto säilyttää jokaisen kaksoisrivin ensimmäisen esiintymän ja poistaa seuraavat esiintymät. Se tunnistaa päällekkäiset arvot kaikkien sarakkeiden arvojen perusteella; voimme kuitenkin määrittää tarkasteltavan sarakkeen käyttämällä osajoukkoparametreja.

Kohteen syntaksi drop_duplicates() parametrien oletusarvoilla on seuraava:

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

- subset ja keep parametreilla on sama selitys kuin kohdassa duplicates(). Jos asetamme kolmannen parametrin inplace että True, kaikki muutokset suoritetaan suoraan alkuperäiselle DataFrame-kehykselle, mikä johtaa menetelmän palauttamiseen None ja alkuperäistä DataFramea muokataan. Oletuksena, inplace is False.

Tässä on esimerkki drop_duplicates() toiminto:


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

lähtö:

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

Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!

Yllä olevassa esimerkissä ensimmäinen merkintä poistettiin, koska se oli kaksoiskappale.

Korvaa tai päivitä päällekkäiset arvot

Toinen menetelmä kaksoiskappaleiden käsittelemiseksi sisältää arvon korvaamisen Pandoilla replace() toimia. replace() -funktion avulla voimme korvata tietyt arvot tai kuviot DataFramessa uusilla arvoilla. Oletusarvoisesti se korvaa kaikki arvon esiintymät. Raja-parametria käyttämällä voimme kuitenkin rajoittaa vaihtojen määrää.

Tässä on esimerkki replace() toiminto:


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

lähtö:

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

Tässä rajaa käytettiin korvaamaan ensimmäinen arvo. Entä jos haluamme korvata viimeisen esiintymän? Tässä tapauksessa yhdistämme duplicated() ja replace() toimintoja. Käyttämällä duplicated(), osoitamme kunkin arvon kaksoiskappaleen viimeisen esiintymän, hankimme rivinumeron käyttämällä loc -toimintoa ja vaihda se sitten käyttämällä replace() toiminto. Tässä on esimerkki käytöstä duplicated() ja replace() toimii yhdessä.


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)

lähtö:

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

Mukautetut toiminnot monimutkaisiin korvauksiin

Joissakin tapauksissa päällekkäisten arvojen käsittely vaatii monimutkaisempia korvauksia kuin pelkkä niiden poistaminen tai päivittäminen. Mukautettujen toimintojen avulla voimme luoda erityisiä tarpeisiimme räätälöityjä vaihtosääntöjä. Pandoja käyttämällä apply() -funktion avulla voimme soveltaa mukautettua toimintoa tietoihimme.

Oletetaan esimerkiksi, että "StudentName"-sarake sisältää päällekkäisiä nimiä. Tavoitteemme on korvata kaksoiskappaleet mukautetulla funktiolla, joka lisää numeron päällekkäisten arvojen loppuun, mikä tekee niistä ainutlaatuisia.


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)

lähtö:

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

Kokoa data päällekkäisillä arvoilla

Päällekkäisiä arvoja sisältävät tiedot voidaan koota yhteenvedon tekemiseksi ja tiedoista oivallusten saamiseksi. Pandat groupby() -toiminnon avulla voit koota tietoja päällekkäisillä arvoilla. Käyttämällä groupby() -funktiolla voit ryhmitellä yhden tai useamman sarakkeen ja laskea toisen sarakkeen keskiarvon, mediaanin tai summan kullekin ryhmälle.

Tässä on esimerkki groupby() menetelmä:


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

lähtö:

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

Kehittynyt tekniikka

Jotta voimme käsitellä monimutkaisempia skenaarioita ja varmistaa tarkan analyysin, voimme käyttää joitain kehittyneitä tekniikoita. Tässä osiossa käsitellään sumeiden kaksoiskappaleiden, aikasarjatietojen ja päällekkäisten indeksiarvojen käsittelyä.

Fuzzy Kopiot

Sumeat kaksoiskappaleet ovat tietueita, jotka eivät täsmää, mutta ovat samankaltaisia, ja ne voivat johtua useista syistä, kuten tietojen syöttövirheistä, kirjoitusvirheistä ja muotoilun vaihteluista. Tulemme käyttämään fuzzywuzzy Python-kirjasto tunnistaa kaksoiskappaleet käyttämällä merkkijonojen samankaltaisuussovitusta.

Tässä on esimerkki sumeiden arvojen käsittelystä:

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

Tässä esimerkissä luomme mukautetun funktion find_fuzzy_duplicates joka ottaa syötteenä DataFramen, sarakkeen nimen ja samankaltaisuuskynnyksen. Funktio toistuu DataFramen jokaisen rivin läpi ja vertaa sitä seuraaviin riveihin käyttämällä fuzz.ratio menetelmä fuzzywuzzy kirjasto. Jos samankaltaisuuspiste on suurempi tai yhtä suuri kuin kynnys, päällekkäiset rivit lisätään luetteloon. Lopuksi funktio palauttaa DataFramen, joka sisältää sumeat kaksoiskappaleet.

lähtö:

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

Yllä olevassa esimerkissä sumeat kaksoiskappaleet tunnistetaan "StudentName" -sarakkeessa. Funktio "find_fuzzy_duplicates" vertaa kutakin merkkijonoparia käyttämällä fuzzywuzzy kirjaston fuzz.ratio funktio, joka laskee samankaltaisuuspisteen Levenshteinin etäisyyden perusteella. Olemme asettaneet kynnysarvoksi 70, mikä tarkoittaa, että mitä tahansa nimeä, jonka vastaavuussuhde on suurempi kuin 70, pidetään sumeana arvona. Kun olemme tunnistaneet sumeat arvot, voimme hallita niitä osiossa "Kopioiden käsittely" kuvatulla menetelmällä.

Aikasarjatietojen kaksoiskappaleiden käsittely

Kaksoiskappaleita voi esiintyä, kun useita havaintoja tallennetaan samaan aikaleimaan. Nämä arvot voivat johtaa puolueellisiin tuloksiin, jos niitä ei käsitellä oikein. Tässä on muutamia tapoja käsitellä päällekkäisiä arvoja aikasarjatiedoissa.

  • Tarkkojen kaksoiskappaleiden pudottaminen: Tässä menetelmässä poistamme identtiset rivit käyttämällä drop_duplicates toimii Pandasissa.
  • Päällekkäiset aikaleimat eri arvoilla: Jos meillä on sama aikaleima mutta eri arvot, voimme koota tiedot ja saada enemmän tietoa käyttämällä groupby(), tai voimme valita uusimman arvon ja poistaa muut käyttämällä drop_duplicates() jossa keep parametrin arvoksi on asetettu "viimeinen".

Päällekkäisten indeksiarvojen käsittely

Ennen kuin käsittelet päällekkäisiä indeksiarvoja, määritellään ensin, mikä indeksi on Pandasissa. Indeksi on yksilöllinen tunniste, joka on määritetty jokaiselle DataFrame-riville. Pandas määrittää oletusarvoisesti numeerisen indeksin, joka alkaa nollasta. Indeksi voidaan kuitenkin määrittää mille tahansa sarakkeelle tai sarakeyhdistelmälle. Tunnistaaksemme kaksoiskappaleet Hakemisto-sarakkeessa voimme käyttää duplicated() ja drop_duplicates() toimintoja vastaavasti. Tässä osiossa tutkimme, miten hakemistosarakkeen kaksoiskappaleita käsitellään käyttämällä reset_index().

Kuten nimestä voi päätellä, reset_index() Pandasin toimintoa käytetään DataFramen indeksin nollaamiseen. Sovellettaessa reset_index() -toimintoa, nykyinen indeksi hylätään automaattisesti, mikä tarkoittaa, että alkuperäiset indeksiarvot menetetään. Määrittämällä drop parametri as False vuonna reset_index() -toimintoa, voimme säilyttää alkuperäisen indeksin arvon samalla, kun nollaamme indeksin.

Tässä on esimerkki käytöstä 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)

lähtö:

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

Esimerkkikäytäntöjä

  • Ymmärrä päällekkäisten tietojen luonne: Ennen kuin ryhdyt mihinkään toimiin, on ratkaisevan tärkeää ymmärtää, miksi päällekkäisiä arvoja on olemassa ja mitä ne edustavat. Tunnista perimmäinen syy ja määritä sitten asianmukaiset toimenpiteet niiden käsittelemiseksi.

  • Valitse sopiva menetelmä kaksoiskappaleiden käsittelemiseksi: Kuten aiemmissa osissa kerrottiin, kaksoiskappaleiden käsittelyyn on useita tapoja. Valitsemasi menetelmä riippuu tietojen luonteesta ja analyysistä, jonka aiot suorittaa.

  • Dokumentoi lähestymistapa: On elintärkeää dokumentoida prosessi päällekkäisten arvojen havaitsemiseksi ja niiden käsittelemiseksi, jotta muut voivat ymmärtää ajatusprosessin.

  • Ole varovainen: Aina kun poistamme tai muokkaamme tietoja, meidän on varmistettava, että kaksoiskappaleiden poistaminen ei aiheuta virheitä tai vääristymiä analyysiin. Suorita mielenterveystestejä ja validoi jokaisen toimenpiteen tulokset.

  • Säilytä alkuperäiset tiedot: Luo varmuuskopio alkuperäisistä tiedoista ennen minkään toimenpiteen suorittamista tiedoille.

  • Estä tulevat kaksoiskappaleet: Toteuta toimenpiteitä päällekkäisyyksien estämiseksi tulevaisuudessa. Tämä voi sisältää tietojen validoinnin tietojen syöttämisen aikana, tietojen puhdistusrutiineja tai tietokannan rajoituksia yksilöllisyyden pakottamiseksi.

Loppuajatukset

Tietojen analysoinnissa päällekkäisten arvojen käsitteleminen on ratkaiseva askel. Päällekkäiset arvot voivat johtaa epätarkkoihin tuloksiin. Tunnistamalla ja hallitsemalla päällekkäisiä arvoja tehokkaasti dataanalyytikot voivat saada tarkkoja ja merkittäviä tietoja. Mainittujen tekniikoiden käyttöönotto ja parhaiden käytäntöjen noudattaminen mahdollistavat analyytikot säilyttämään tietonsa eheyden ja poimimaan niistä arvokkaita oivalluksia.

Aikaleima:

Lisää aiheesta Stackabus