Merülés a szűrésbe, manipulálásba és működésbe
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
:
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]
Í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
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]
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 adef
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
.
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
É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:
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
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
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
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:
- Szűrj úgy, ahogy gondolod. Tanuld meg, mi történik valójában, hogy tudd, mit csinálsz.
- Imádom a lambdákat. Elképesztő módon segíthetnek az adatok kezelésében.
- 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
<!–
->
- Bitcoin
- bizbuildermike
- blockchain
- blokklánc megfelelőség
- blockchain konferencia
- Blockchain tanácsadók
- coinbase
- coingenius
- megegyezés
- kriptokonferencia
- kriptikus bányászat
- cryptocurrency
- decentralizált
- Defi
- Digitális eszközök
- Ethereum
- gépi tanulás
- nem helyettesíthető token
- Plató
- plato ai
- Platón adatintelligencia
- Platoblockchain
- PlatoData
- platogaming
- Poligon
- a tét igazolása
- W3
- zephyrnet