Alapadatok átalakítása pandákban ezzel a három hasznos technikával

Merülés a szűrésbe, manipulálásba és működésbe

Fotó Milad Fakurian on Unsplash

Gondoljon vissza arra, amikor legutóbb egy szépen formázott adatkészlettel dolgozott. Jól elnevezett oszlopok, minimális hiányzó értékek és megfelelő szervezés. Jó érzés – szinte felszabadító – olyan adatokkal megáldva lenni, amelyeket nem kell tisztítani és átalakítani.

Nos, addig szép, amíg ki nem zökken az álmodozásból, és nem folytatja az előtted álló törött sorok és értelmetlen címkék reménytelen zűrzavarát.

Nincs olyan, hogy tiszta adat (az eredeti formájában). Ha adattudós vagy, akkor ezt tudod. Ha még csak most kezded, ezt el kell fogadnod. Átalakítania kell adatait, hogy hatékonyan dolgozhasson velük.

Beszéljünk ennek három módjáról.

Szűrés – de megfelelően elmagyarázva

Beszéljünk a szűrésről – de egy kicsit mélyebben, mint azt megszokhattad. Az egyik leggyakoribb és leghasznosabb adatátalakítási műveletként a hatékony szűrés minden adattudós számára kötelező készség. Ha ismeri a pandákat, valószínűleg ez az egyik első művelet, amit megtanult.

Tekintsük át kedvenc, furcsán sokoldalú példámmal: a tanulói osztályzatok DataFrame-jét, amelyet találóan hívnak. grades:

Kép Szerző

A 90 alatti pontszámokat ki fogjuk szűrni, mert ezen a napon úgy döntöttünk, hogy rosszul képzett oktatók leszünk, akik csak a legjobb tanulókat szolgálják ki (kérjük, soha ne tedd ezt). Az ehhez szükséges szabványos kódsor a következő:

osztályzatok[osztályzatok['pontszám'] >= 90]
Kép Szerző

Így maradunk Jacknél és Hermionénél. Menő. De mi történt itt pontosan? Miért működik a fenti kódsor? Merüljünk el egy kicsit mélyebbre, ha megnézzük a fenti külső zárójelben lévő kifejezés kimenetét:

osztályzatok['pontszám'] >= 90
Kép Szerző

AH oké. Ennek van értelme. Úgy tűnik, hogy ez a kódsor egy Pandas sorozat objektumot ad vissza, amely Boolean ( True / False ) értékeket mi határozza meg >= 90 minden egyes sornál visszaadják. Ez a legfontosabb köztes lépés. Ezt követően ez a logikai értéksorozat kerül a külső zárójelbe, és ennek megfelelően szűri az összes sort.

A teljesség kedvéért megemlítem azt is, hogy ugyanez a viselkedés érhető el a loc kulcsszó:

grades.loc[grades['pontszám'] >= 90]
Kép Szerző

Számos oka lehet annak, hogy a használatát választjuk loc (amelyek közül az egyik az, hogy valójában lehetővé teszi a sorok és oszlopok szűrését egyetlen műveleten keresztül), de ez megnyitja a Pandora szelencéjét, a műveleteket, amelyet a legjobb, ha egy másik cikkre hagyunk.

Egyelőre a fontos tanulási cél a következő: amikor Pandákban szűrünk, a zavaró szintaxis nem valami furcsa varázslat. Egyszerűen csak két részre kell bontanunk: 1) a feltételünket kielégítő sorok logikai sorozatát kapjuk, és 2) a sorozat segítségével kiszűrjük a teljes DataFrame-et.

Miért hasznos ez, kérdezheti? Nos, általánosságban elmondható, hogy valószínűleg zavaró hibákhoz vezethet, ha egyszerűen csak műveleteket használ anélkül, hogy megértené, hogyan működnek valójában. A szűrés hasznos és hihetetlenül gyakori művelet, és most már tudja, hogyan működik.

Menjünk tovább.

A lambda-funkciók szépsége

Néha az adatok olyan átalakításokat igényelnek, amelyek egyszerűen nincsenek beépítve a Pandák funkcióiba. Bármennyire is próbálkozik, a Stack Overflow átvizsgálása vagy a Pandas dokumentációjának szorgalmas felkutatása nem tár fel megoldást a problémájára.

Adja meg a lambda függvényeket – egy hasznos nyelvi funkció, amely gyönyörűen integrálható a Pandákkal.

Rövid áttekintésként a lambdák működése a következő:

>>> add_function = lambda x, y: x + y
>>> add_function(2, 3)
5

A lambda függvények nem különböznek a normál függvényektől, kivéve azt a tényt, hogy tömörebb szintaxisuk van:

  • A függvény neve az egyenlőségjeltől balra
  • A lambda kulcsszó az egyenlőségjeltől jobbra (hasonlóan a def kulcsszó egy hagyományos Python-függvénydefinícióban, ezzel tudatja a Python-nal, hogy függvényt definiálunk).
  • Paraméter(ek) után lambda kulcsszó, a kettősponttól balra.
  • Visszatérési érték a kettősponttól jobbra.

Most akkor alkalmazzuk a lambda függvényeket egy reális helyzetre.

Az adatkészleteknek gyakran megvannak a saját formázási sajátosságai, amelyek az adatbevitel és -gyűjtés változataira jellemzőek. Ennek eredményeként az Ön által kezelt adatoknak furcsán konkrét problémái lehetnek, amelyeket orvosolnia kell. Vegyük például az alábbi egyszerű adatkészletet, amely az emberek nevét és jövedelmét tárolja. Nevezzük el monies.

Kép Szerző

Most, mint ennek a cégnek a Master Data Highnessei, kaptunk néhány szigorúan titkos információt: ebben a cégben mindenki 10%-os emelést és további 1000 dollárt kap. Ez valószínűleg túl specifikus a számításhoz ahhoz, hogy konkrét módszert találjunk, de egy lambda-függvénnyel elég egyszerű:

frissítés_bevétel = lambda szám: szám + (szám * .10) + 1000

Ezután már csak ezt a funkciót kell használnunk a Pandákkal apply függvény, amellyel a kiválasztott sorozat minden elemére alkalmazhatunk egy függvényt:

monetes['New Income'] = pénzek['Jövedelem'].apply(update_income)
pénzeket
Kép Szerző

És kész! Egy zseniális új DataFrame, amely pontosan azokból az információkból áll, amelyekre szükségünk volt, mindezt két kódsorban. Hogy még tömörebb legyen, akár a lambda függvényt is definiálhattuk volna benne apply közvetlenül – egy jó tipp, amelyet érdemes szem előtt tartani.

A lényeget itt egyszerűvé tenném.

A lambdák rendkívül hasznosak, ezért érdemes használni őket. Élvezd!

Sorozatos karakterlánc-manipulációs függvények

Az előző részben a lambda-funkciók sokoldalúságáról beszéltünk, és mindazokról a nagyszerű dolgokról, amelyekben segíthetnek elérni adatait. Ez kiváló, de vigyázni kell, nehogy elragadjon. Hihetetlenül gyakori, hogy annyira beleragad a dolgok egy-egy ismert módjába, hogy kimarad az egyszerűbb parancsikonokról, amelyekkel a Python megáldotta a programozókat. Ez természetesen nem csak a lambdákra vonatkozik, de egyelőre maradunk ennél.

Tegyük fel például, hogy a következő DataFrame-et hívjuk names amely az emberek kereszt- és vezetéknevét tárolja:

Kép Szerző

Az adatbázisunkban található helykorlátok miatt most úgy döntünk, hogy ahelyett, hogy egy személy teljes vezetéknevét tárolnánk, hatékonyabb az utolsó kezdőbetűjének tárolása. Így át kell alakítanunk a 'Last Name' oszlop ennek megfelelően. A lambdákkal az erre irányuló kísérletünk a következőképpen nézhet ki:

nevek['Vezetéknév'] = nevek['Vezetéknév'].apply(lambda s: s[:1])
nevek
Kép Szerző

Ez egyértelműen működik, de egy kicsit macerás, és ezért nem olyan Pythonic, mint lehetne. Szerencsére a Pandas karakterlánc-manipulációs funkcióinak szépsége mellett van egy másik, elegánsabb mód is (a következő kódsor céljából csak menjünk előre, és tegyük fel, hogy még nem módosítottuk a 'Last Name' oszlop a fenti kóddal):

names['Last Name'] = nevek['Vezetéknév'].str[:1]
nevek
Kép Szerző

Ta-da! A .str A Pandas Series tulajdonsága lehetővé teszi, hogy a sorozat minden karakterláncát egy megadott karakterlánc-művelettel illesszük, mintha az egyes karakterláncokkal külön-külön dolgoznánk.

De várj, jobb lesz. Mivel .str hatékonyan lehetővé teszi számunkra, hogy a sorozaton keresztül hozzáférjünk egy karakterlánc normál működéséhez, és számos karakterlánc-függvényt is alkalmazhatunk adataink gyors feldolgozása érdekében! Tegyük fel például, hogy úgy döntünk, hogy mindkét oszlopot kisbetűssé alakítjuk. A következő kód végzi a feladatot:

names['Keresztnév'] = nevek['Utónév'].str.lower()
names['Vezetéknév'] = nevek['Vezetéknév'].str.lower()
nevek
Kép Szerző

Sokkal egyszerűbb, mint a saját lambda-függvények definiálásával és a benne lévő karakterlánc-függvények meghívásával járó nehézségeken. Nem mintha nem szeretem a lambdákat – de mindennek megvan a maga helye, és a Pythonban mindig az egyszerűségnek kell elsőbbséget élveznie.

Itt csak néhány példát írtam le, de karakterlánc-függvények nagy gyűjteménye áll az Ön rendelkezésére [1].

Használd bőségesen őket. Kiválóak.

Utolsó gondolatok és összefoglaló

Íme egy kis adatátalakítási csalólap az Ön számára:

  1. Szűrj úgy, ahogy gondolod. Tanuld meg, mi történik valójában, hogy tudd, mit csinálsz.
  2. Imádom a lambdákat. Elképesztő módon segíthetnek az adatok kezelésében.
  3. A pandák ugyanúgy szeretik a húrokat, mint te. Rengeteg beépített funkció van – akár használhatod is.

Íme egy utolsó tanács: nincs „helyes” módszer egy adatkészlet szűrésére. Ez a rendelkezésre álló adatoktól, valamint a megoldani kívánt egyedi problémától függ. Bár nincs beállított módszer, amelyet minden alkalommal követhetne, van egy hasznos eszközgyűjtemény, amelyet érdemes a rendelkezésére bocsátani. Ebben a cikkben ezek közül hármat tárgyaltam.

Arra biztatlak, menj ki és keress még valamit.

Referenciák

[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas

Törzsadatok átalakítása pandákban ezzel a három hasznos technikával A következő forrásból újra közzétéve: https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-three-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— 4 a https://towardsdatascience.com/feed oldalon

<!–

->

Időbélyeg:

Még több Blockchain tanácsadók