Sukella suodattamiseen, manipulointiin ja toimintaan
Ajattele viimeistä kertaa, kun työskentelit kauniisti muotoillun tietojoukon kanssa. Hyvin nimetyt sarakkeet, minimaaliset puuttuvat arvot ja oikea järjestys. On mukava tunne – melkein vapauttava – olla siunattu datalla, jota sinun ei tarvitse puhdistaa ja muuttaa.
No, se on mukavaa, kunnes pääset eroon päiväunelmastasi ja jatkat puuhailua edessäsi olevien rikkinäisten rivien ja järjettömien etikettien toivottomassa hämärässä.
Sellaista asiaa kuin puhdas data (alkuperäisessä muodossaan) ei ole olemassa. Jos olet datatieteilijä, tiedät tämän. Jos olet vasta aloittamassa, sinun tulee hyväksyä tämä. Sinun on muutettava tietosi, jotta voit työskennellä niiden kanssa tehokkaasti.
Puhutaanpa kolmesta tavasta tehdä se.
Suodatus - mutta selitetty oikein
Puhutaanpa suodatuksesta – mutta hieman syvällisemmin kuin olet tottunut tekemään. Tehokas suodatus on yksi yleisimmistä ja hyödyllisimmistä tiedonmuunnosoperaatioista jokaisen datatieteilijän pakollinen taito. Jos tunnet Pandat, se on todennäköisesti yksi ensimmäisistä operaatioista, joita opit tekemään.
Käydään läpi suosikkini, oudon monipuolinen esimerkkini: oppilaiden arvosanojen DataFrame, osuvasti ns. grades
:
Suodatamme pois kaikki alle 90 pisteet, koska olemme tänä päivänä päättäneet olla huonosti koulutettuja opettajia, jotka palvelevat vain huippuoppilaita (älä koskaan tee tätä). Standardikoodirivi tämän suorittamiseksi on seuraava:
arvosanat[arvosanat['pisteet'] >= 90]
Jäljelle jää Jack ja Hermione. Viileä. Mutta mitä tässä oikein tapahtui? Miksi toimiiko yllä oleva koodirivi? Sukellaan hieman syvemmälle katsomalla lausekkeen tulosta yllä olevien ulompien sulujen sisällä:
arvosanat['Pistemäärä'] >= 90
Ah, okei. Tuossa on järkeä. Näyttää siltä, että tämä koodirivi palauttaa Pandas-sarjan objektin, jossa on Boolen ( True
/ False
) arvot, jotka määritetään mitä >= 90
palautetaan jokaiselta riviltä. Tämä on tärkein välivaihe. Myöhemmin tämä Boolean-sarja siirtyy ulompiin hakasulkeisiin ja suodattaa kaikki rivit vastaavasti.
Täydennyksen vuoksi mainitsen myös, että sama käyttäytyminen voidaan saavuttaa käyttämällä loc
avainsana:
grades.loc[grades['Pistemäärä'] >= 90]
Saatamme valita käytön useista syistä loc
(joista yksi on se, että sen avulla voimme itse asiassa suodattaa rivejä ja sarakkeita yhdellä toiminnolla), mutta se avaa Pandoran lippaan, joka on parasta jättää toiseen artikkeliin.
Tärkeä oppimistavoite on toistaiseksi tämä: kun suodatamme Pandassa, hämmentävä syntaksi ei ole mitään outoa taikuutta. Meidän on yksinkertaisesti jaettava se kahteen osavaiheeseen: 1) hankittava ehtomme täyttävistä riveistä Boolen sarja ja 2) suodatettava koko DataFrame pois sarjan avulla.
Miksi tämä on hyödyllistä, saatat kysyä? Yleisesti ottaen se johtaa todennäköisesti hämmentävään bugeihin, jos käytät toimintoja ymmärtämättä niiden todellista toimintaa. Suodatus on hyödyllinen ja uskomattoman yleinen toiminto, ja tiedät nyt, kuinka se toimii.
Siirrytään eteenpäin.
Lambdatoimintojen kauneus
Joskus tietosi vaativat muunnoksia, jotka eivät yksinkertaisesti ole Pandan toimintojen sisäänrakennettuja. Yrittäkää kuinka tahansa, mikään määrä Stack Overflow -ohjelmaa tai ahkera Pandas-dokumenttien tutkiminen ei paljasta ratkaisua ongelmaasi.
Anna lambda-toiminnot – hyödyllinen kieliominaisuus, joka integroituu kauniisti Pandaan.
Pikakatsauksena tässä on, kuinka lambdat toimivat:
>>> add_function = lambda x, y: x + y
>>> add_function(2, 3)
5
Lambda-funktiot eivät eroa tavallisista funktioista lukuun ottamatta sitä tosiasiaa, että niillä on tiiviimpi syntaksi:
- Toiminnon nimi yhtäläisyysmerkin vasemmalla puolella
- -
lambda
avainsana yhtäläisyysmerkin oikealla puolella (samalla tavalla kuindef
avainsana perinteisessä Python-funktion määritelmässä, tämä antaa Pythonille tietää, että määrittelemme funktion). - Parametri(t) jälkeen
lambda
avainsana kaksoispisteen vasemmalla puolella. - Palautusarvo kaksoispisteen oikealla puolella.
Sovelletaan nyt sitten lambda-funktioita realistiseen tilanteeseen.
Tietojoukoilla on usein omat muotoilun erityispiirteensä, jotka liittyvät tiedon syöttämisen ja keräämisen vaihteluihin. Tämän seurauksena käsittelemissäsi tiedoissa voi olla oudon erityisiä ongelmia, jotka sinun on ratkaistava. Harkitse esimerkiksi alla olevaa yksinkertaista tietojoukkoa, joka tallentaa ihmisten nimet ja heidän tulonsa. Kutsutaan sitä monies
.
Nyt tämän yrityksen Master Data Highnesseina meille on annettu huippusalaisia tietoja: kaikki tämän yrityksen työntekijät saavat 10 % korotuksen ja 1000 dollarin lisäkorotuksen. Tämä on luultavasti liian spesifinen laskelma tietyn menetelmän löytämiseksi, mutta riittävän yksinkertainen lambda-funktion kanssa:
update_income = lambda-numero: numero + (nm * .10) + 1000
Sitten meidän tarvitsee vain käyttää tätä toimintoa Pandan kanssa apply
funktio, jonka avulla voimme käyttää funktiota jokaiseen valitun sarjan elementtiin:
rahat['New Income'] = rahat['Tuot'].apply(update_income)
rahat
Ja olemme valmiit! Loistava uusi DataFrame, joka koostuu täsmälleen tarvitsemastamme tiedosta, kaikki kahdella koodirivillä. Jotta se olisi vielä ytimekkäämpi, olisimme voineet jopa määritellä lambda-funktion sisällä apply
suoraan – hyvä vinkki, joka kannattaa pitää mielessä.
Pidän asian yksinkertaisena.
Lambdat ovat erittäin hyödyllisiä, joten niitä kannattaa käyttää. Nauttia!
Sarjan merkkijonokäsittelytoiminnot
Edellisessä osiossa puhuimme lambda-toimintojen monipuolisuudesta ja kaikista hienoista asioista, joita ne voivat auttaa sinua saavuttamaan tietosi. Tämä on erinomaista, mutta sinun tulee olla varovainen, ettet hurahdu. On uskomattoman yleistä, että jäät niin kiinni yhteen tuttuun tapaan tehdä asioita, jotka jäävät paitsi yksinkertaisemmista pikanäppäimistä, joilla Python on siunannut ohjelmoijia. Tämä koskee tietysti muutakin kuin lambdaa, mutta pysymme siinä toistaiseksi.
Oletetaan esimerkiksi, että meillä on seuraava DataFrame nimeltään names
joka tallentaa ihmisten etu- ja sukunimet:
Nyt tietokannassamme olevien tilanrajoitusten vuoksi päätämme, että sen sijaan, että tallentaisimme henkilön koko sukunimen, on tehokkaampaa tallentaa hänen viimeinen alkukirjaimensa. Siksi meidän on muutettava 'Last Name'
sarakkeessa vastaavasti. Lambdojen kanssa yrityksemme tehdä niin saattaa näyttää tältä:
nimet['Sukunimi'] = nimet['Sukunimi'].apply(lambda s: s[:1])
nimet
Tämä selkeästi toimii, mutta se on hieman kömpelö, eikä siksi niin pythonic kuin se voisi olla. Onneksi Pandasin merkkijonojen manipulointitoimintojen kauneuden ansiosta on olemassa toinen, tyylikkäämpi tapa (seuraavaa koodiriviä varten, mene eteenpäin ja oleta, ettemme ole jo muuttaneet 'Last Name'
sarake yllä olevalla koodilla):
names['Last Name'] = nimet['Last Name'].str[:1]
nimet
Ta-da! The .str
Pandas-sarjan ominaisuus mahdollistaa sarjan jokaisen merkkijonon yhdistämisen tietyllä merkkijonooperaatiolla, aivan kuin työskennellemme jokaisen merkkijonon kanssa erikseen.
Mutta odota, se paranee. Siitä asti kun .str
Sen avulla voimme tehokkaasti käyttää merkkijonon normaalia toimintaa sarjan kautta, voimme myös käyttää useita merkkijonotoimintoja, jotka auttavat käsittelemään tietojamme nopeasti! Oletetaan esimerkiksi, että päätämme muuntaa molemmat sarakkeet pieniksi kirjaimiksi. Seuraava koodi tekee työn:
names['Etunimi'] = nimet['Etunimi'].str.lower()
nimet['Sukunimi'] = nimet['Sukunimi'].str.lower()
nimet
Paljon yksinkertaisempaa kuin omien lambda-funktioiden määritteleminen ja sen sisällä olevien merkkijonofunktioiden kutsuminen. Ei sillä, että en rakastaisi lambdaja - mutta kaikella on paikkansa, ja yksinkertaisuuden tulisi aina olla etusijalla Pythonissa.
Olen käsitellyt tässä vain muutamia esimerkkejä, mutta laaja kokoelma merkkijonofunktioita on käytettävissäsi [1].
Käytä niitä rohkeasti. Ne ovat erinomaisia.
Viimeiset ajatukset ja yhteenveto
Tässä on sinulle pieni datamuunnoslehti:
- Suodata kuten tarkoitat. Opi mitä todella tapahtuu, jotta tiedät mitä olet tekemässä.
- Rakasta lambdaasi. Ne voivat auttaa sinua käsittelemään tietoja uskomattomilla tavoilla.
- Pandat rakastavat jousia yhtä paljon kuin sinäkin. Sisäänrakennettuja toimintoja on paljon – voit yhtä hyvin käyttää niitä.
Tässä on viimeinen neuvo: ei ole "oikeaa" tapaa suodattaa tietojoukkoa. Se riippuu käytettävissä olevista tiedoista sekä ainutlaatuisesta ongelmasta, jota etsit ratkaistavaksi. Vaikka ei ole asetettua menetelmää, jota voit seurata joka kerta, käytettävissäsi on kuitenkin hyödyllinen kokoelma työkaluja. Tässä artikkelissa keskustelen niistä kolmesta.
Kannustan sinua menemään ulos ja etsimään lisää.
Viitteet
[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas
Master Data Transformation in Panda näiden kolmen hyödyllisen tekniikan avulla Julkaistu uudelleen lähteestä https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-three-useful-techniques-20699f03e51d?source=rss—-7f60cf5620—9c4 XNUMX osoitteessa https://towardsdatascience.com/feed
<!-
->
- Bitcoin
- bizbuildermike
- blockchain
- lohkoketjun noudattaminen
- blockchain-konferenssi
- Blockchain-konsultit
- coinbase
- coingenius
- Yhteisymmärrys
- salauskonferenssi
- kryptointi
- kryptovaluutta
- hajautettu
- defi
- Digitaaliset varat
- ethereum
- koneoppiminen
- ei korvattava tunnus
- Platon
- plato ai
- Platonin tietotieto
- Platoblockchain
- PlatonData
- platopeliä
- Monikulmio
- todiste panoksesta
- W3
- zephyrnet