Master datatransformation i pandaer med disse tre nyttige teknikker

Et dyk ned i filtrering, manipulation og funktion

Photo by Milad Fakurian on Unsplash

Tænk tilbage på sidste gang, du arbejdede med et pænt formateret datasæt. Velnavngivne kolonner, minimale manglende værdier og korrekt organisation. Det er en dejlig følelse - næsten befriende - at blive velsignet med data, som du ikke behøver at rense og transformere.

Nå, det er rart, indtil du slipper ud af din dagdrøm og genoptager at pille ved den håbløse spol af ødelagte rækker og useriøse etiketter foran dig.

Der er ikke sådan noget som rene data (i dens oprindelige form). Hvis du er dataforsker, ved du det. Hvis du lige er startet, bør du acceptere dette. Du bliver nødt til at transformere dine data for at kunne arbejde med dem effektivt.

Lad os tale om tre måder at gøre det på.

Filtrering - men korrekt forklaret

Lad os tale om filtrering - men lidt dybere, end du måske er vant til at gøre. Som en af ​​de mest almindelige og nyttige datatransformationsoperationer er effektiv filtrering et must-have for enhver dataforsker. Hvis du kender Pandas, er det sandsynligvis en af ​​de første operationer, du har lært at udføre.

Lad os gennemgå mit foretrukne, underligt alsidige eksempel: en DataFrame med elevkarakterer, passende kaldet grades:

Billede af forfatter

Vi vil frafiltrere enhver score under 90, for på denne dag har vi besluttet at være dårligt uddannede undervisere, der kun henvender sig til de bedste elever (vær venlig aldrig at gøre dette faktisk). Standardkoden for at opnå dette er som følger:

karakterer[karakterer['Score'] >= 90]
Billede af forfatter

Det efterlader os med Jack og Hermione. Fedt nok. Men hvad skete der præcist her? Hvorfor virker ovenstående kodelinje? Lad os dykke lidt dybere ved at se på outputtet af udtrykket inde i de ydre parenteser ovenfor:

karakterer['Score'] >= 90
Billede af forfatter

Ah, okay. Det giver mening. Det ser ud til, at denne kodelinje returnerer et Pandas Series-objekt, der indeholder Boolean ( True / False ) værdier bestemt af hvad >= 90 returneres for hver enkelt række. Dette er det vigtigste mellemtrin. Bagefter er det denne serie af Booleans, der bliver sendt ind i de ydre parenteser og filtrerer alle rækkerne i overensstemmelse hermed.

Af hensyn til færdiggørelsen vil jeg også nævne, at den samme adfærd kan opnås ved at bruge loc søgeord:

grades.loc[grades['Score'] >= 90]
Billede af forfatter

Der er en række grunde til, at vi kan vælge at bruge loc (hvoraf den ene er, at den faktisk tillader os at filtrere rækker og kolonner gennem en enkelt operation), men det åbner op for en Pandoras æske med Pandas-operationer, der bedst overlades til en anden artikel.

For nu er det vigtige læringsmål dette: Når vi filtrerer i Pandas, er den forvirrende syntaks ikke en slags underlig magi. Vi skal simpelthen opdele det i dets to komponenttrin: 1) få en boolsk serie af rækkerne, som opfylder vores betingelse, og 2) bruge serien til at filtrere hele DataFrame fra.

Hvorfor er dette nyttigt, spørger du måske? Tja, generelt set vil det sandsynligvis føre til forvirrende fejl, hvis du bare bruger operationer uden at forstå, hvordan de rent faktisk fungerer. Filtrering er en nyttig og utrolig almindelig operation, og du ved nu, hvordan det fungerer.

Lad os gå videre.

Skønheden ved Lambda-funktioner

Nogle gange kræver dine data transformationer, der simpelthen ikke er indbygget i Pandas funktionalitet. Prøv som du måske kan, ingen mængde af skuring af Stack Overflow eller flittig udforskning af Pandas-dokumentationen afslører en løsning på dit problem.

Indtast lambda-funktioner — en nyttig sprogfunktion, der integreres smukt med pandaer.

Som en hurtig gennemgang, her er, hvordan lambdaer fungerer:

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

Lambda-funktioner er ikke anderledes end almindelige funktioner, bortset fra at de har en mere kortfattet syntaks:

  • Funktionsnavn til venstre for lighedstegnet
  • lambda nøgleordet til højre for lighedstegnet (på samme måde som def nøgleord i en traditionel Python-funktionsdefinition, lader dette Python vide, at vi definerer en funktion).
  • Parameter(e) efter lambda søgeord til venstre for kolon.
  • Returværdi til højre for kolon.

Lad os nu anvende lambda-funktioner til en realistisk situation.

Datasæt har ofte deres egne formateringsegenskaber, der er specifikke for variationer i dataindtastning og indsamling. Som følge heraf kan de data, du arbejder med, have mærkeligt specifikke problemer, som du skal løse. Overvej for eksempel det simple datasæt nedenfor, som gemmer folks navne og deres indkomst. Lad os kalde det monies.

Billede af forfatter

Nu, som denne virksomheds Master Data Highnesses, har vi fået nogle tophemmelige oplysninger: Alle i denne virksomhed vil få en 10%-forhøjelse plus yderligere $1000. Dette er nok for specifik for en beregning til at finde en specifik metode til, men ligetil nok med en lambda-funktion:

update_income = lambda num: num + (antal * .10) + 1000

Så er alt, hvad vi skal gøre, at bruge denne funktion med pandaerne apply funktion, som lader os anvende en funktion på hvert element i den valgte serie:

penge['Ny indkomst'] = penge['Indkomst'].apply(update_income)
penge
Billede af forfatter

Og vi er færdige! En genial ny DataFrame bestående af præcis den information, vi havde brug for, alt sammen i to linjer kode. For at gøre det endnu mere kortfattet kunne vi endda have defineret lambdafunktionen inde i apply direkte - et fedt tip, der er værd at huske på.

Jeg vil holde pointen her simpel.

Lambdas er ekstremt nyttige, og derfor bør du bruge dem. God fornøjelse!

Serie strengmanipulationsfunktioner

I det foregående afsnit talte vi om lambda-funktionernes alsidighed og alle de fede ting, de kan hjælpe dig med at opnå med dine data. Dette er fremragende, men du skal passe på ikke at lade dig rive med. Det er utroligt almindeligt at blive så fanget af én velkendt måde at gøre ting på, at du går glip af enklere genveje, som Python har velsignet programmører med. Det gælder selvfølgelig mere end bare lambdaer, men det holder vi for øjeblikket.

Lad os for eksempel sige, at vi har følgende DataFrame kaldet names som gemmer folks for- og efternavne:

Billede af forfatter

Nu, på grund af pladsbegrænsninger i vores database, beslutter vi, at i stedet for at gemme en persons hele efternavn, er det mere effektivt blot at gemme deres sidste initial. Derfor er vi nødt til at omdanne 'Last Name' kolonne i overensstemmelse hermed. Med lambdaer kan vores forsøg på at gøre det ligne følgende:

names['Efternavn'] = navne['Efternavn'].apply(lambda s: s[:1])
navne
Billede af forfatter

Dette virker klart, men det er lidt klodset, og derfor ikke så pytonisk, som det kunne være. Heldigvis er der med skønheden ved strengmanipulationsfunktioner i Pandas en anden, mere elegant måde (med henblik på den næste kodelinje skal du bare gå videre og antage, at vi ikke allerede har ændret 'Last Name' kolonne med ovenstående kode):

names['Efternavn'] = navne['Efternavn'].str[:1]
navne
Billede af forfatter

Ta-da! Det .str egenskaben for en Pandas-serie lader os splejse hver streng i serien med en specificeret strengoperation, ligesom hvis vi arbejdede med hver streng individuelt.

Men vent, det bliver bedre. Siden .str giver os effektivt adgang til den normale funktionalitet af en streng gennem serien, kan vi også anvende en række strengfunktioner for at hjælpe med at behandle vores data hurtigt! Lad os for eksempel sige, at vi beslutter at konvertere begge kolonner til små bogstaver. Følgende kode klarer opgaven:

names['First Name'] = names['First Name'].str.lower()
names['Efternavn'] = navne['Efternavn'].str.lower()
navne
Billede af forfatter

Meget mere ligetil end at gå igennem besværet med at definere dine egne lambda-funktioner og kalde strengfunktionerne inde i den. Ikke at jeg ikke elsker lambdaer - men alt har sin plads, og enkelhed bør altid prioriteres i Python.

Jeg har kun dækket nogle få eksempler her, men en stor samling af strengfunktioner er til din rådighed [1].

Brug dem rigeligt. De er fremragende.

Afsluttende tanker og opsummering

Her er et lille snydeark til datatransformation til dig:

  1. Filtrer som du mener det. Lær, hvad der virkelig foregår, så du ved, hvad du laver.
  2. Elsker dine lambdaer. De kan hjælpe dig med at manipulere data på fantastiske måder.
  3. Pandas elsker strenge lige så meget som dig. Der er en masse indbygget funktionalitet - du kan lige så godt bruge det.

Her er et sidste råd: Der er ingen "korrekt" måde at filtrere et datasæt på. Det afhænger af de tilgængelige data såvel som det unikke problem, du ønsker at løse. Men selvom der ikke er nogen fast metode, du kan følge hver gang, er der en nyttig samling af værktøjer, der er værd at have til din rådighed. I denne artikel diskuterede jeg tre af dem.

Jeg opfordrer dig til at gå ud og finde nogle flere.

Referencer

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

Master datatransformation i pandaer med disse tre nyttige teknikker genudgivet fra kilde https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-three-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— 4 via https://towardsdatascience.com/feed

<!–

->

Tidsstempel:

Mere fra Blockchain-konsulenter