Sukeldumine filtreerimisse, manipuleerimisse ja toimimisse
Mõelge tagasi viimasele korrale, kui töötasite kenasti vormindatud andmekogumiga. Hästi nimetatud veerud, minimaalsed puuduvad väärtused ja korralik korraldus. See on meeldiv tunne – peaaegu vabastav – saada õnnistatud andmetega, mida te ei pea puhastama ja muutma.
Noh, see on tore, kuni väljute oma unenäost ja jätkate teie ees olevate katkiste ridade ja mõttetute siltide lootusetu segaduse kallal nokitsemist.
Sellist asja nagu puhtad andmed (algsel kujul) pole olemas. Kui olete andmeteadlane, teate seda. Kui te alles alustate, peaksite sellega leppima. Nendega tõhusaks töötamiseks peate oma andmeid muutma.
Räägime kolmest viisist, kuidas seda teha.
Filtreerimine - kuid õigesti selgitatud
Räägime filtreerimisest – aga veidi sügavamalt, kui olete harjunud tegema. Tõhus filtreerimine on üks levinumaid ja kasulikumaid andmete teisendustoiminguid iga andmeteadlase jaoks kohustuslik oskus. Kui tunnete Pandasid, on see tõenäoliselt üks esimesi toiminguid, mille õppisite tegema.
Vaatame üle, kasutades minu lemmik, veidralt mitmekülgset näidet: õpilaste hinnete DataFrame, mida nimetatakse sobivalt grades
:
Filtreerime välja kõik hinded, mis on alla 90, sest sel päeval oleme otsustanud olla halva väljaõppega õpetajad, kes teenindavad ainult parimaid õpilasi (palun ärge seda kunagi tehke). Standardne koodirida selle saavutamiseks on järgmine:
hinded[hinnete ['Skoor'] >= 90]
Nii jääbki meile Jack ja Hermione. Lahe. Aga mis siin täpsemalt juhtus? Miks kas ülaltoodud koodirida töötab? Sukeldume veidi sügavamale, vaadates ülaltoodud välimistes sulgudes oleva väljendi väljundit:
hinded ['Skoor'] >= 90
Ah olgu. See on loogiline. Näib, et see koodirida tagastab Pandase seeria objekti, mis sisaldab Boole'i ( True
/ False
) väärtused, mille määrab >= 90
tagastatakse iga üksiku rea kohta. See on peamine vaheetapp. Hiljem suunatakse see tõeväärtuste seeria välimistesse sulgudesse ja filtreerib kõik read vastavalt.
Lõpetamise huvides mainin ka, et sama käitumist saab saavutada kasutades loc
märksõna:
grades.loc[grades['Skoor'] >= 90]
On mitmeid põhjuseid, miks me võime seda kasutada loc
(millest üks on see, et see võimaldab meil tegelikult filtreerida ridu ja veerge ühe toiminguga), kuid see avab Pandora Pandade laeka, mis on parem jätta mõnele teisele artiklile.
Praegu on oluline õppimiseesmärk järgmine: kui me Pandasse filtreerime, ei ole segane süntaks mingi imelik maagia. Peame selle lihtsalt jaotama kaheks komponendiks: 1) meie tingimusele vastavate ridade Boole'i seeria hankimine ja 2) seeria kasutamine kogu DataFrame'i välja filtreerimiseks.
Miks see kasulik on, võite küsida? Üldiselt põhjustab see tõenäoliselt segadust tekitavaid vigu, kui kasutate toiminguid, ilma et mõistaksite, kuidas need tegelikult töötavad. Filtreerimine on kasulik ja uskumatult levinud toiming ning nüüd teate, kuidas see toimib.
Liigume edasi.
Lambda funktsioonide ilu
Mõnikord nõuavad teie andmed muudatusi, mis lihtsalt pole Panda funktsioonidesse sisse ehitatud. Nii nagu proovite, ei leia ükski Stack Overflow küürimine ega usin Panda dokumentatsiooni uurimine teie probleemile lahendust.
Sisestage lambda funktsioonid – kasulik keelefunktsioon, mis integreerub kaunilt Pandadega.
Kiire ülevaatena lambdade tööpõhimõte on järgmine:
>>> lisa_funktsioon = lambda x, y: x + y
>>> lisa_funktsioon(2, 3)
5
Lambda funktsioonid ei erine tavalistest funktsioonidest, välja arvatud asjaolu, et neil on täpsem süntaks:
- Funktsiooni nimi võrdusmärgist vasakul
- .
lambda
võrdusmärgist paremal olev märksõna (sarnaseltdef
märksõna traditsioonilises Pythoni funktsiooni definitsioonis, annab see Pythonile teada, et me määratleme funktsiooni). - Parameeter(id) pärast
lambda
märksõna, koolonist vasakul. - Tagastab väärtuse koolonist paremal.
Nüüd siis rakendame lambda funktsioone realistlikule olukorrale.
Andmekogumitel on sageli oma vormingu veidrused, mis on iseloomulikud andmete sisestamise ja kogumise variatsioonidele. Selle tulemusena võib teie töötavatel andmetel olla veidralt spetsiifilisi probleeme, millega peate tegelema. Näiteks vaadake allolevat lihtsat andmekogumit, mis salvestab inimeste nimed ja sissetulekud. Nimetagem seda monies
.
Nüüd, selle ettevõtte Master Data Highnesses'ina, on meile antud ülisalajast teavet: kõigile selles ettevõttes makstakse 10% tõstmist ja lisaks veel 1000 dollarit. See on tõenäoliselt liiga spetsiifiline arvutus, et leida konkreetset meetodit, kuid see on lambda-funktsiooniga piisavalt lihtne:
update_income = lambda number: arv + (arv * .10) + 1000
Seejärel peame kasutama seda funktsiooni Pandadega apply
funktsioon, mis võimaldab rakendada funktsiooni valitud seeria igale elemendile:
rahad['Uus sissetulek'] = raha['Sissetulek'].apply(update_income)
raha
Ja oleme valmis! Geniaalne uus DataFrame, mis koosneb täpselt sellest teabest, mida vajasime, ja seda kõike kahes koodireas. Selle veelgi kokkuvõtlikumaks muutmiseks oleksime võinud isegi lambda funktsiooni sees määratleda apply
otse — lahe näpunäide, mida tasub meeles pidada.
Jätan siinkohal mõtte lihtsaks.
Lambdad on väga kasulikud ja seetõttu peaksite neid kasutama. Nautige!
Seeria stringide manipuleerimise funktsioonid
Eelmises jaotises rääkisime lambda funktsioonide mitmekülgsusest ja kõigist lahedatest asjadest, mida need aitavad teil andmetega saavutada. See on suurepärane, kuid peaksite olema ettevaatlik, et mitte end ära lasta. On uskumatult tavaline, et satud nii ühest tuttavast asjade tegemise viisist, et jätad kasutamata lihtsamad otseteed, millega Python on programmeerijaid õnnistanud. See kehtib muidugi rohkem kui lihtsalt lambdade kohta, kuid me jääme selle juurde praegu.
Näiteks oletame, et meil on järgmine DataFrame names
mis salvestab inimeste ees- ja perekonnanimed:
Nüüd otsustame oma andmebaasi ruumipiirangu tõttu, et inimese kogu perekonnanime salvestamise asemel on tõhusam salvestada lihtsalt tema viimane esitäht. Seega peame muutma 'Last Name'
veerus vastavalt. Lambdade puhul võib meie katse seda teha umbes järgmine:
nimed['Perenimi'] = nimed['Perenimi'].apply(lambda s: s[:1])
nimed
See ilmselgelt töötab, kuid see on pisut kohmakas ja seetõttu mitte nii Pythonic, kui see võiks olla. Õnneks on Pandas stringidega manipuleerimise funktsioonide iluga veel üks, elegantsem viis (järgmise koodirea jaoks lihtsalt jätkake ja eeldage, et me pole juba muutnud 'Last Name'
veerg ülaltoodud koodiga):
names['Perenimi'] = nimed['Perenimi'].str[:1]
nimed
Ta-da! The .str
Pandase seeria atribuut võimaldab meil liita kõik seeria stringid määratud stringoperatsiooniga, just nagu töötaksime iga stringiga eraldi.
Aga oota, läheb paremaks. Alates .str
võimaldab meil seeria kaudu tõhusalt juurde pääseda stringi tavapärasele funktsionaalsusele, samuti saame rakendada mitmesuguseid stringifunktsioone, mis aitavad andmeid kiiresti töödelda! Oletame näiteks, et otsustame teisendada mõlemad veerud väiketähtedeks. Järgmine kood täidab seda tööd:
names['Eesnimi'] = nimed['Eesnimi'].str.lower()
names['Perenimi'] = nimed['Perenimi'].str.lower()
nimed
Palju lihtsam kui oma lambda-funktsioonide määratlemine ja selle sees olevate stringifunktsioonide kutsumine. Mitte, et ma lambdasid ei armastaks – aga igal asjal on oma koht ja lihtsus peaks Pythonis alati esikohale seadma.
Olen siin käsitlenud vaid mõnda näidet, kuid Teie käsutuses on suur hulk stringifunktsioone [1].
Kasutage neid rikkalikult. Nad on suurepärased.
Viimased mõtted ja kokkuvõte
Siin on teile väike andmete teisendamise petuleht:
- Filtreerige nii, nagu mõtlete. Õppige, mis tegelikult toimub, et teaksite, mida teete.
- Armasta oma lambdasid. Need aitavad teil andmeid hämmastaval viisil manipuleerida.
- Pandad armastavad keelpille sama palju kui sina. Sisseehitatud funktsioone on palju – võite seda ka kasutada.
Siin on üks viimane nõuanne: andmekogumi filtreerimiseks pole "õiget" viisi. See sõltub nii olemasolevatest andmetest kui ka ainulaadsest probleemist, mida soovite lahendada. Kuigi pole kindlat meetodit, mida saaksite iga kord järgida, on teie käsutuses kasulik kogum tööriistu. Selles artiklis käsitlesin neist kolme.
Soovitan teil välja minna ja leida rohkem.
viited
[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas
Põhiandmete teisendamine pandades nende kolme kasuliku tehnikaga, uuesti avaldatud allikast https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-three-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— 4 https://towardsdatascience.com/feed kaudu
<!–
->
- Bitcoin
- bizbuildermike
- blockchain
- plokiahela vastavus
- blockchain konverents
- Blockchaini konsultandid
- coinbase
- coingenius
- üksmeel
- krüptokonverents
- krüpto mineerimine
- cryptocurrency
- Detsentraliseeritud
- Defi
- Digitaalsed varad
- ethereum
- masinõpe
- mitte vahetatav märk
- Platon
- plato ai
- Platoni andmete intelligentsus
- Platvormplokk
- PlatoData
- platogaming
- hulknurk
- tõend osaluse kohta
- W3
- sephyrnet