Põhiandmete teisendamine pandades nende kolme kasuliku tehnikaga

Sukeldumine filtreerimisse, manipuleerimisse ja toimimisse

Foto: Milad Fakurian on Unsplash

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:

Pilt Autorilt

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]
Pilt Autorilt

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
Pilt Autorilt

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]
Pilt Autorilt

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 (sarnaselt def 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.

Pilt Autorilt

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
Pilt Autorilt

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:

Pilt Autorilt

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
Pilt Autorilt

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
Pilt Autorilt

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
Pilt Autorilt

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:

  1. Filtreerige nii, nagu mõtlete. Õppige, mis tegelikult toimub, et teaksite, mida teete.
  2. Armasta oma lambdasid. Need aitavad teil andmeid hämmastaval viisil manipuleerida.
  3. 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

<!–

->

Ajatempel:

Veel alates Blockchaini konsultandid