Ismétlődő értékek kezelése Pandas DataFrame-ben

Ismétlődő értékek kezelése Pandas DataFrame-ben

Bevezetés

Adatelemzőként a mi felelősségünk az adatok integritásának biztosítása, hogy pontos és megbízható betekintést nyerhessünk. Az adattisztítás létfontosságú szerepet játszik ebben a folyamatban, és az adatok megkettőzése az adatelemzők által tapasztalt leggyakoribb problémák közé tartozik. Az ismétlődő értékek potenciálisan félreértelmezhetik a statisztikákat. Ezért alapvető fontosságú, hogy hatékony módszerek álljanak rendelkezésre az ismétlődő értékek kezelésére. Ebben a cikkben megtudjuk, hogyan lehet azonosítani és kezelni az ismétlődő értékeket, valamint a bevált módszereket az ismétlődések kezelésére.

Az ismétlődő értékek azonosítása

Az ismétlődő értékek kezelésének első lépése az azonosításuk. Az ismétlődő értékek azonosítása az adatok tisztításának fontos lépése. A Pandas többféle módszert kínál az adatkereten belüli ismétlődő értékek azonosítására. Ebben a részben a duplicated() funkció és value_counts() funkció az ismétlődő értékek azonosítására.

Alvás duplikált ()

A duplicated() A függvény egy Pandas könyvtárfüggvény, amely ellenőrzi, hogy vannak-e ismétlődő sorok a DataFrame-ben. A kimenet a duplicated() A függvény egy logikai sorozat, amely ugyanolyan hosszúságú, mint a bemeneti DataFrame, ahol minden elem jelzi, hogy a megfelelő sor duplikált-e vagy sem.

Tekintsünk egy egyszerű példát a duplicated() funkció:

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

A fenti példában létrehoztunk egy DataFrame-et, amely tartalmazza a tanulók nevét és összpontszámát. hivatkoztunk duplicated() a DataFrame-en, amely logikai sorozatot generált False egyedi értékeket képviselő és True duplikált értékeket képvisel.

Ebben a példában az érték első előfordulása tekinthető egyedinek. De mi van akkor, ha azt szeretnénk, hogy az utolsó értéket egyedinek tekintsük, és nem akarjuk az összes oszlopot figyelembe venni az ismétlődő értékek azonosításakor? Itt módosíthatjuk a duplicated() funkciót a paraméterértékek módosításával.

Paraméterek: Subset és Keep

A duplicated() funkció testreszabási lehetőségeket kínál az opcionális paraméterein keresztül. Két paramétere van, az alábbiak szerint:

  • subset: Ez a paraméter lehetővé teszi számunkra, hogy meghatározzuk az oszlopok azon részhalmazát, amelyet figyelembe kell venni a párhuzamos észlelés során. Az alhalmaz a következőre van állítva None alapértelmezés szerint, ami azt jelenti, hogy a DataFrame minden oszlopát figyelembe veszi. Az oszlopnevek megadásához az alhalmazt elláthatjuk oszlopnevek listájával.

    Íme egy példa az alhalmaz paraméter használatára:

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

    output:

    0 False
    1 False
    2 False
    3 False
    4 False
    5 True
    dtype: bool
    
  • keep: Ezzel az opcióval kiválaszthatjuk, hogy az ismétlődő sor melyik példányát jelöljük meg ismétlődésként. A tartás lehetséges értékei a következők:

    • "first": Ez az alapértelmezett értéke a keep választási lehetőség. Azonosítja az összes ismétlődést, kivéve az első előfordulást, és az első értéket egyedinek tekinti.
    • "last": Ez a beállítás az utolsó előfordulást egyedi értékként azonosítja. Minden más előfordulás ismétlődésnek minősül.
    • False: Ez a beállítás minden példányt ismétlődő értékként jelöl meg.

Íme egy példa a keep paraméter:


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

output:

0 True
1 False
2 False
3 False
4 False
5 False
dtype: bool
Az ismétlődő értékek megjelenítése

A value_counts() függvény a második módszer a duplikátumok azonosítására. A value_counts() A függvény megszámolja, hogy az egyes egyedi értékek hányszor jelennek meg egy oszlopban. Alkalmazásával a value_counts() függvényt egy adott oszlopra, az egyes értékek gyakorisága megjeleníthető.

Íme egy példa a value_counts() funkció:

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

Vizualizáljuk most az ismétlődő értékeket egy oszlopdiagrammal. Hatékonyan tudjuk megjeleníteni az ismétlődő értékek gyakoriságát oszlopdiagram segítségével.


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

duplikált értékek

Ismétlődő értékek kezelése

Az ismétlődő értékek azonosítása után ideje foglalkozni velük. Ebben a részben különböző stratégiákat fogunk megvizsgálni a duplikált értékek pandák használatával történő eltávolítására és frissítésére drop_duplicates() és a replace() funkciókat. Ezenkívül megvitatjuk az adatok duplikált értékekkel történő összesítését a groupby() funkciót.

Ismétlődő értékek eltávolítása

A duplikációk kezelésének leggyakoribb módja az, hogy eltávolítjuk őket a DataFrame-ből. Az ismétlődő rekordok DataFrame-ből való eltávolításához a drop_duplicates() funkció. Alapértelmezés szerint ez a függvény megtartja minden ismétlődő sor első példányát, és eltávolítja a későbbi előfordulásokat. Az összes oszlopérték alapján azonosítja az ismétlődő értékeket; azonban részhalmaz paraméterekkel megadhatjuk a figyelembe veendő oszlopot.

szintaxisa drop_duplicates() a paraméterek alapértelmezett értékeivel a következő:

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

A subset és a keep A paramétereknek ugyanaz a magyarázata, mint itt duplicates(). Ha beállítjuk a harmadik paramétert inplace nak nek True, minden módosítás közvetlenül az eredeti DataFrame-en történik, ami a metódus visszatérését eredményezi None és az eredeti DataFrame módosítás alatt áll. Alapértelmezés szerint, inplace is False.

Íme egy példa a drop_duplicates() funkció:


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

Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!

A fenti példában az első bejegyzést törölték, mivel ismétlődő volt.

Cserélje ki vagy frissítse az ismétlődő értékeket

A duplikátumok kezelésének második módja az érték cseréje a Pandákkal replace() funkció. A replace() A funkció lehetővé teszi, hogy egy DataFrame-ben meghatározott értékeket vagy mintákat új értékekkel cseréljünk le. Alapértelmezés szerint lecseréli az érték összes példányát. A limit paraméter használatával azonban korlátozhatjuk a cserék számát.

Íme egy példa a replace() funkció:


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

Itt a határértéket az első érték helyettesítésére használták. Mi van, ha le akarjuk cserélni az utolsó előfordulást? Ebben az esetben kombináljuk a duplicated() és a replace() funkciókat. Használata duplicated(), minden ismétlődő érték utolsó példányát jelezzük, a sorszámot a következővel kapjuk meg loc funkciót, majd cserélje ki a gombbal replace() funkció. Íme egy példa a használatára duplicated() és a replace() együtt működik.


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

Egyedi funkciók összetett cserékhez

Egyes esetekben az ismétlődő értékek kezelése bonyolultabb cseréket igényel, mint azok egyszerű eltávolítása vagy frissítése. Az egyedi funkciók lehetővé teszik számunkra, hogy egyedi csereszabályokat hozzunk létre az igényeinknek megfelelően. A pandák használatával apply() függvényt, az egyéni függvényt alkalmazhatjuk adatainkra.

Tegyük fel például, hogy a „StudentName” oszlop ismétlődő neveket tartalmaz. Célunk az ismétlődések cseréje egy egyéni függvény használatával, amely számot fűz a duplikált értékek végéhez, egyedivé téve azokat.


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

Összesített adatok duplikált értékekkel

Az ismétlődő értékeket tartalmazó adatok összesíthetők az adatok összegzése és az adatokból való betekintés érdekében. A pandák groupby() A funkció lehetővé teszi az adatok duplikált értékekkel történő összesítését. Használatával a groupby() függvény segítségével csoportosíthat egy vagy több oszlopot, és minden csoporthoz kiszámíthatja egy másik oszlop átlagát, mediánját vagy összegét.

Íme egy példa a groupby() eljárás:


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

output:

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

Speciális technikák

A bonyolultabb forgatókönyvek kezeléséhez és a pontos elemzés biztosításához használhatunk néhány fejlett technikát. Ez a rész a fuzzy ismétlődések, az idősoros adatok megkettőzésének és az ismétlődő indexértékek kezelését tárgyalja.

Fuzzy Azonosak

A homályos ismétlődések olyan rekordok, amelyek nem pontosan egyeznek, de hasonlóak, és különböző okok miatt fordulhatnak elő, beleértve az adatbeviteli hibákat, az elírásokat és a formázási eltéréseket. Használjuk a fuzzywuzzy Python-könyvtár az ismétlődések azonosításához karakterlánc-hasonlósági egyeztetéssel.

Íme egy példa a fuzzy értékek kezelésére:

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

Ebben a példában egyéni függvényt hozunk létre find_fuzzy_duplicates amely egy DataFrame-et, egy oszlopnevet és egy hasonlósági küszöböt vesz fel bemenetként. A függvény a DataFrame minden sorában iterál, és összehasonlítja azokat a következő sorokkal a segítségével fuzz.ratio módszer a fuzzywuzzy könyvtár. Ha a hasonlósági pontszám nagyobb vagy egyenlő, mint a küszöb, az ismétlődő sorok hozzáadódnak egy listához. Végül a függvény a fuzzy duplikátumokat tartalmazó DataFrame-et ad vissza.

output:

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

A fenti példában a fuzzy ismétlődések a „StudentName” oszlopban vannak azonosítva. A "find_fuzzy_duplicates" függvény összehasonlítja az egyes karakterláncpárokat a fuzzywuzzy könyvtáré fuzz.ratio függvény, amely a Levenshtein távolság alapján hasonlósági pontszámot számít ki. A küszöbértéket 70-re állítottuk, ami azt jelenti, hogy a 70-nél nagyobb egyezési arányú név homályos értéknek minősül. A fuzzy értékek azonosítása után kezelhetjük azokat a „Duplikátumok kezelése” című részben ismertetett módszerrel.

Idősoros adatmásolatok kezelése

Ismétlődések fordulhatnak elő, ha több megfigyelést rögzítenek ugyanabban az időbélyegben. Ezek az értékek torz eredményekhez vezethetnek, ha nem kezelik megfelelően. Íme néhány módszer az idősoros adatok ismétlődő értékeinek kezelésére.

  • Pontos másolatok eldobása: Ebben a módszerben eltávolítjuk az azonos sorokat a drop_duplicates funkció a Pandákban.
  • Megkettőzött időbélyegek különböző értékekkel: Ha azonos időbélyeggel, de különböző értékekkel rendelkezünk, összesíthetjük az adatokat, és több betekintést nyerhetünk a groupby(), vagy kiválaszthatjuk a legújabb értéket, és eltávolíthatjuk a többit a használatával drop_duplicates() a ... val keep paraméter értéke 'last'.

Ismétlődő indexértékek kezelése

Mielőtt az ismétlődő indexértékekkel foglalkoznánk, először határozzuk meg, mi az index a Pandákban. Az index egy egyedi azonosító, amely a DataFrame minden sorához van hozzárendelve. A Pandák alapértelmezés szerint nullától kezdődő numerikus indexet rendelnek hozzá. Egy index azonban bármely oszlophoz vagy oszlopkombinációhoz rendelhető. Az Index oszlopban található ismétlődések azonosításához használhatjuk a duplicated() és a drop_duplicates() funkciókat, ill. Ebben a részben megvizsgáljuk, hogyan kezeljük az Index oszlopban található ismétlődéseket a használatával reset_index().

Ahogy a neve is mutatja, a reset_index() A Pandas funkciója a DataFrame indexének visszaállítására szolgál. Alkalmazása során a reset_index() funkció esetén az aktuális indexet a rendszer automatikusan eldobja, ami azt jelenti, hogy a kezdeti indexértékek elvesznek. Megadva a drop paraméter as False a reset_index() függvényében megtarthatjuk az eredeti indexértéket, miközben visszaállítjuk az indexet.

Íme egy példa a használatára 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

  • Ismerje meg a duplikált adatok természetét: Mielőtt bármilyen intézkedést megtenne, alapvető fontosságú, hogy megértse, miért léteznek duplikált értékek, és mit képviselnek. Határozza meg a kiváltó okot, majd határozza meg a megfelelő lépéseket a kezelésükhöz.

  • Válassza ki a megfelelő módszert a másolatok kezelésére: Amint azt az előző szakaszokban tárgyaltuk, többféleképpen is kezelheti a másolatokat. A választott módszer az adatok természetétől és az elvégzendő elemzéstől függ.

  • Dokumentálja a megközelítést: Létfontosságú az ismétlődő értékek észlelésének és kezelésének folyamatának dokumentálása, hogy mások megértsék a gondolkodási folyamatot.

  • Óvatosan járjon el: Amikor adatokat távolítunk el vagy módosítunk, gondoskodnunk kell arról, hogy az ismétlődések kiküszöbölése ne okozzon hibákat vagy torzítást az elemzésben. Végezzen józansági teszteket, és érvényesítse az egyes műveletek eredményeit.

  • Őrizze meg az eredeti adatokat: Mielőtt bármilyen műveletet végezne az adatokon, készítsen biztonsági másolatot az eredeti adatokról.

  • Előzze meg a jövőbeli ismétlődéseket: Intézkedések végrehajtása az ismétlődések jövőbeni előfordulásának megakadályozására. Ez magában foglalhatja az adatellenőrzést az adatbevitel során, az adattisztítási rutinokat vagy az egyediséget kényszerítő adatbázis-megszorításokat.

Záró gondolatok

Az adatelemzés során az ismétlődő értékek kezelése döntő lépés. Az ismétlődő értékek pontatlan eredményekhez vezethetnek. Az ismétlődő értékek hatékony azonosításával és kezelésével az adatelemzők pontos és jelentős információkhoz juthatnak. Az említett technikák alkalmazása és a legjobb gyakorlatok követése lehetővé teszi az elemzők számára, hogy megőrizzék adataik integritását, és értékes betekintést nyerjenek belőlük.

Időbélyeg:

Még több Stackabus