Et dyk ned i filtrering, manipulation og funktion
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
:
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]
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
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]
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 somdef
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
.
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
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:
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
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
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
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:
- Filtrer som du mener det. Lær, hvad der virkelig foregår, så du ved, hvad du laver.
- Elsker dine lambdaer. De kan hjælpe dig med at manipulere data på fantastiske måder.
- 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
<!–
->
- Bitcoin
- bizbuildermike
- blockchain
- overholdelse af blockchain
- blockchain konference
- Blockchain-konsulenter
- coinbase
- coingenius
- Konsensus
- kryptokonference
- krypto minedrift
- cryptocurrency
- decentral
- Defi
- Digitale aktiver
- ethereum
- machine learning
- ikke fungibelt symbol
- plato
- platon ai
- Platon Data Intelligence
- Platonblockchain
- PlatoData
- platogaming
- Polygon
- bevis for indsatsen
- W3
- zephyrnet