Dubleeritud väärtuste käsitlemine Panda DataFrame'is

Dubleeritud väärtuste käsitlemine Panda DataFrame'is

Sissejuhatus

Andmeanalüütikuna on meie kohustus tagada andmete terviklikkus, et saada täpset ja usaldusväärset teavet. Andmete puhastamine mängib selles protsessis üliolulist rolli ja dubleerivad väärtused on üks levinumaid probleeme, millega andmeanalüütikud kokku puutuvad. Dubleerivad väärtused võivad statistikat valesti esitada. Seetõttu on ülioluline omada tõhusaid meetodeid dubleerivate väärtuste käsitlemiseks. Sellest artiklist õpime, kuidas tuvastada ja käsitleda dubleerivaid väärtusi, samuti duplikaatide haldamise häid tavasid.

Dubleerivate väärtuste tuvastamine

Esimene samm topeltväärtuste käsitlemisel on nende tuvastamine. Dubleerivate väärtuste tuvastamine on andmete puhastamise oluline samm. Pandas pakub andmeraamis dubleerivate väärtuste tuvastamiseks mitut meetodit. Selles jaotises käsitleme duplicated() funktsioon ja value_counts() funktsioon dubleerivate väärtuste tuvastamiseks.

Usin dubleeritud ()

. duplicated() funktsioon on Pandase teegi funktsioon, mis kontrollib DataFrame'i ridade duplikaate. väljund duplicated() funktsioon on tõeväärtusseeria, mis on sama pikkusega kui sisend DataFrame, kus iga element näitab, kas vastav rida on duplikaat või mitte.

Vaatleme lihtsat näidet duplicated() funktsioon:

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)

Väljund:

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

Ülaltoodud näites lõime DataFrame'i, mis sisaldab õpilaste nimesid ja nende koguhinne. Kutsusime välja duplicated() DataFrame'is, mis genereeris tõeväärtusega seeria False esindavad ainulaadseid väärtusi ja True mis esindavad dubleerivaid väärtusi.

Selles näites loetakse väärtuse esmakordne esinemine unikaalseks. Mis saab aga siis, kui soovime, et viimast väärtust peetaks unikaalseks ja me ei soovi dubleerivate väärtuste tuvastamisel kõiki veerge arvesse võtta? Siin saame muuta duplicated() parameetrite väärtusi muutes.

Parameetrid: alamhulk ja säilita

. duplicated() funktsioon pakub valikuliste parameetrite kaudu kohandamisvõimalusi. Sellel on kaks parameetrit, nagu allpool kirjeldatud:

  • subset: see parameeter võimaldab meil määrata veergude alamhulka, mida duplikaattuvastuse ajal arvesse võtta. Alamhulk on seatud väärtusele None vaikimisi, mis tähendab, et DataFrame'i iga veergu võetakse arvesse. Veergude nimede määramiseks saame alamhulga varustada veergude nimede loendiga.

    Siin on näide alamhulga parameetri kasutamisest:

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

    Väljund:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: see suvand võimaldab meil valida, milline duplikaatrea eksemplar tuleks märkida duplikaadiks. Võimalikud säilitusväärtused on järgmised:

    • "first": see on vaikeväärtus keep valik. See tuvastab kõik duplikaadid, välja arvatud esimene esinemine, pidades esimest väärtust ainulaadseks.
    • "last": see suvand tuvastab unikaalse väärtusena viimase esinemise. Kõik muud juhtumid loetakse duplikaatideks.
    • False: see suvand märgistab iga eksemplari duplikaatväärtusena.

Siin on näide selle kasutamisest keep parameetrit:


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

Väljund:

0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
Visualiseerige dubleerivad väärtused

. value_counts() funktsioon on teine ​​​​lähenemine duplikaatide tuvastamiseks. The value_counts() funktsioon loendab, mitu korda iga kordumatu väärtus veerus ilmub. Rakendades value_counts() funktsiooni konkreetsele veerule, saab visualiseerida iga väärtuse sagedust.

Siin on näide selle kasutamisest value_counts() funktsioon:

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)

Väljund:

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

Visualiseerime nüüd topeltväärtusi tulpdiagrammiga. Väärtuste dubleerimise sagedust saame tõhusalt visualiseerida tulpdiagrammi abil.


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

dubleerivad väärtused

Dubleerivate väärtuste käsitlemine

Pärast dubleerivate väärtuste tuvastamist on aeg nendega tegeleda. Selles jaotises uurime erinevaid strateegiaid dubleerivate väärtuste eemaldamiseks ja värskendamiseks pandade abil drop_duplicates() ja replace() funktsioonid. Lisaks arutame dubleerivate väärtustega andmete koondamist, kasutades groupby() funktsiooni.

Dubleerivate väärtuste eemaldamine

Kõige tavalisem meetod duplikaatide käsitlemiseks on nende eemaldamine DataFrame'ist. Duplikaatkirjete eemaldamiseks DataFrame'ist kasutame drop_duplicates() funktsiooni. Vaikimisi säilitab see funktsioon iga duplikaatrea esimese eksemplari ja eemaldab järgnevad esinemised. See tuvastab kõigi veergude väärtuste põhjal dubleerivad väärtused; siiski saame määrata vaadeldava veeru alamhulga parameetrite abil.

Süntaks of drop_duplicates() parameetrite vaikeväärtustega on järgmine:

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

. subset ja keep parameetritel on sama seletus, mis jaotises duplicates(). Kui seame kolmanda parameetri inplace et True, tehakse kõik muudatused otse algses DataFrame'is, mille tulemuseks on meetodi tagastamine None ja algset DataFrame'i muudetakse. Algselt, inplace is False.

Siin on näide sellest drop_duplicates() funktsioon:


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

Väljund:

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

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

Ülaltoodud näites kustutati esimene kirje, kuna see oli duplikaat.

Asendage või värskendage dubleerivaid väärtusi

Teine duplikaatide käsitlemise meetod hõlmab väärtuse asendamist Pandade abil replace() funktsioon. The replace() funktsioon võimaldab meil asendada DataFrame'i teatud väärtused või mustrid uute väärtustega. Vaikimisi asendab see väärtuse kõik eksemplarid. Piirparameetrit kasutades saame aga asenduste arvu piirata.

Siin on näide selle kasutamisest replace() funktsioon:


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

Väljund:

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

Siin kasutati piirmäära esimese väärtuse asendamiseks. Mis siis, kui tahame asendada viimase esinemise? Sel juhul ühendame duplicated() ja replace() funktsioonid. Kasutades duplicated(), näitame iga korduva väärtuse viimase eksemplari, saame rea numbri, kasutades loc funktsiooni ja seejärel asendage see nupuga replace() funktsiooni. Siin on näide kasutamisest duplicated() ja replace() toimib koos.


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)

Väljund:

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

Kohandatud funktsioonid keerukate asenduste jaoks

Mõnel juhul nõuab dubleerivate väärtuste käsitlemine keerukamaid asendusi kui lihtsalt nende eemaldamine või värskendamine. Kohandatud funktsioonid võimaldavad meil luua konkreetseid asendusreegleid, mis on kohandatud meie vajadustele. Pandasid kasutades apply() funktsiooni, saame oma andmetele kohandatud funktsiooni rakendada.

Oletame näiteks, et veerg „StudentName” sisaldab dubleerivaid nimesid. Meie eesmärk on asendada duplikaadid, kasutades kohandatud funktsiooni, mis lisab duplikaatväärtuste lõppu numbri, muutes need ainulaadseks.


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)

Väljund:

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

Dubleerivate väärtustega koondandmed

Dubleerivaid väärtusi sisaldavaid andmeid saab koondada, et teha kokkuvõtteid ja saada andmetest ülevaadet. Pandad groupby() funktsioon võimaldab teil andmeid dubleerivate väärtustega koondada. Kasutades groupby() funktsiooni abil saate rühmitada ühe või mitu veergu ja arvutada iga rühma jaoks teise veeru keskmise, mediaani või summa.

Siin on näide selle kasutamisest groupby() meetod:


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

Väljund:

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

Arenenud tehnikad

Keerulisemate stsenaariumide käsitlemiseks ja täpse analüüsi tagamiseks saame kasutada mõningaid täiustatud tehnikaid. Selles jaotises käsitletakse hägusate duplikaatide, aegridade andmete dubleerimist ja indeksi väärtuste dubleerimist.

Fuzzy duplikaadid

Hägud duplikaadid on kirjed, mis ei ole täpsed vasted, kuid on sarnased ning võivad tekkida erinevatel põhjustel, sealhulgas andmesisesitusvead, õigekirjavead ja vormingu variatsioonid. Me kasutame fuzzywuzzy Pythoni teek duplikaatide tuvastamiseks stringide sarnasuse sobitamise abil.

Siin on näide häguste väärtuste käsitlemisest:

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

Selles näites loome kohandatud funktsiooni find_fuzzy_duplicates mis võtab sisendiks DataFrame'i, veeru nime ja sarnasuse läve. Funktsioon itereerib läbi DataFrame'i iga rea ​​ja võrdleb seda järgmiste ridadega, kasutades fuzz.ratio meetodist fuzzywuzzy raamatukogu. Kui sarnasuse skoor on lävest suurem või sellega võrdne, lisatakse topeltread loendisse. Lõpuks tagastab funktsioon DataFrame'i, mis sisaldab häguseid duplikaate.

Väljund:

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

Ülaltoodud näites on ebaselged duplikaadid tuvastatud veerus „StudentName”. Funktsioon „find_fuzzy_duplicates” võrdleb iga stringipaari kasutades fuzzywuzzy raamatukogu omad fuzz.ratio funktsioon, mis arvutab Levenshteini kauguse põhjal sarnasuse skoori. Oleme seadnud läveks 70, mis tähendab, et iga nime, mille vaste suhe on suurem kui 70, loetakse hägusaks väärtuseks. Pärast hägusate väärtuste tuvastamist saame neid hallata jaotises „Duplikaatide käsitlemine” kirjeldatud meetodil.

Ajaseeriate andmete duplikaatide käsitlemine

Duplikaadid võivad tekkida, kui sama ajatempliga salvestatakse mitu vaatlust. Kui neid väärtusi ei käsitleta õigesti, võivad need viia kallutatud tulemusteni. Siin on mõned viisid aegridade andmete dubleerivate väärtuste käsitlemiseks.

  • Täpsete duplikaatide eemaldamine: Selle meetodi puhul eemaldame identsed read, kasutades drop_duplicates funktsiooni Pandas.
  • Erinevate väärtustega ajatemplite duplikaat: kui meil on sama ajatempel, kuid erinevad väärtused, saame andmed koondada ja saada rohkem teavet, kasutades groupby()või saame valida uusima väärtuse ja eemaldada teised kasutades drop_duplicates() koos keep parameeter seatud väärtusele "viimane".

Dubleerivate indeksi väärtuste käsitlemine

Enne topeltindeksi väärtuste käsitlemist määratleme esmalt, mis on Pandas indeks. Indeks on kordumatu identifikaator, mis on määratud DataFrame'i igale reale. Pandas määrab vaikimisi numbrilise indeksi, mis algab nullist. Indeksi saab aga määrata igale veerule või veerukombinatsioonile. Duplikaatide tuvastamiseks veerus Indeks saame kasutada duplicated() ja drop_duplicates() funktsioonid vastavalt. Selles jaotises uurime, kuidas käsitleda duplikaate veerus Indeks kasutades reset_index().

Nagu nimigi ütleb, reset_index() Pandase funktsiooni kasutatakse DataFrame'i indeksi lähtestamiseks. Rakendades reset_index() funktsiooni korral tühistatakse praegune indeks automaatselt, mis tähendab, et indeksi algväärtused lähevad kaotsi. Määrates drop parameeter as False aasta reset_index() funktsiooni, saame indeksi lähtestamise ajal säilitada algse indeksi väärtuse.

Siin on näide kasutamisest 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)

Väljund:

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

Best Practices

  • Mõistke dubleerivate andmete olemust: Enne mis tahes toimingu tegemist on ülioluline mõista, miks eksisteerivad topeltväärtused ja mida need esindavad. Tuvastage algpõhjus ja seejärel määrake sobivad sammud nende lahendamiseks.

  • Valige duplikaatide käsitlemiseks sobiv meetod: Nagu eelmistes jaotistes kirjeldatud, on duplikaatide käsitlemiseks mitu võimalust. Teie valitud meetod sõltub andmete olemusest ja analüüsist, mida soovite teha.

  • Dokumenteerige lähenemine: On oluline dokumenteerida korduvate väärtuste tuvastamise ja nendega tegelemise protsess, et teised saaksid mõtteprotsessist aru saada.

  • Olge ettevaatlik: Andmete eemaldamisel või muutmisel peame tagama, et duplikaatide kõrvaldamine ei tekitaks analüüsis vigu ega kallutatust. Viige läbi terve mõistuse testid ja kinnitage iga tegevuse tulemused.

  • Säilitage algandmed: Enne andmetega mis tahes toimingu tegemist looge algandmetest varukoopia.

  • Vältige tulevasi duplikaate: rakendage meetmeid, et vältida duplikaatide tekkimist tulevikus. See võib hõlmata andmete valideerimist andmete sisestamise ajal, andmete puhastamise rutiine või andmebaasi piiranguid unikaalsuse jõustamiseks.

Final Thoughts

Andmeanalüüsis on dubleerivate väärtuste käsitlemine ülioluline samm. Väärtuste dubleerimine võib põhjustada ebatäpseid tulemusi. Dubleerivate väärtuste tõhusa tuvastamise ja haldamisega saavad andmeanalüütikud saada täpset ja olulist teavet. Nimetatud tehnikate rakendamine ja parimate tavade järgimine võimaldab analüütikutel säilitada oma andmete terviklikkust ja saada neist väärtuslikke teadmisi.

Ajatempel:

Veel alates Stackabus