Transformarea datelor de bază în Pandas cu aceste trei tehnici utile

O scufundare în filtrare, manipulare și funcționare

Fotografie de Milad Fakurian on Unsplash

Gândiți-vă la ultima dată când ați lucrat cu un set de date frumos formatat. Coloane bine numite, valori lipsă minime și organizare adecvată. Este un sentiment plăcut – aproape eliberator – să fii binecuvântat cu date pe care nu trebuie să le curățați și să le transformați.

Ei bine, e drăguț până când scapi din visul tău cu ochii deschisi și reîncepi să te chinui la zdrobirea fără speranță de rânduri rupte și etichete fără sens în fața ta.

Nu există date curate (în forma sa originală). Dacă ești un cercetător al datelor, știi asta. Dacă abia ai început, ar trebui să accepți asta. Va trebui să vă transformați datele pentru a lucra cu ele în mod eficient.

Să vorbim despre trei moduri de a face acest lucru.

Filtrare - dar explicată corect

Să vorbim despre filtrare, dar puțin mai profund decât ați fi obișnuit să faceți. Fiind una dintre cele mai comune și utile operațiuni de transformare a datelor, filtrarea eficientă este o abilitate obligatorie pentru orice cercetător de date. Dacă cunoști Panda, probabil că este una dintre primele operațiuni pe care ai învățat să le faci.

Să analizăm, folosind exemplul meu preferat, ciudat de versatil: un DataFrame de note ale elevilor, numit în mod adecvat grades:

Imagine după autor

Vom filtra toate scorurile sub 90, pentru că în această zi am decis să fim educatori slab pregătiți, care se adresează doar elevilor de top (te rog să nu faci asta niciodată). Linia standard de cod pentru realizarea acestui lucru este următoarea:

note[note['Scor'] >= 90]
Imagine după autor

Asta ne lasă cu Jack și Hermione. Misto. Dar ce s-a întâmplat mai exact aici? De ce funcționează linia de cod de mai sus? Să ne scufundăm puțin mai adânc, uitându-ne la rezultatul expresiei din interiorul parantezelor exterioare de mai sus:

note['Scor'] >= 90
Imagine după autor

Ah bine. Are sens. Se pare că această linie de cod returnează un obiect Pandas Series care conține Boolean ( True / False ) valori determinate de ce >= 90 returnate pentru fiecare rând individual. Acesta este pasul intermediar cheie. După aceea, această serie de booleeni este trecută în parantezele exterioare și filtrează toate rândurile în consecință.

De dragul finalizării, voi menționa, de asemenea, că același comportament poate fi obținut folosind loc cuvinte cheie:

note.loc[note['Scor'] >= 90]
Imagine după autor

Există o serie de motive pe care am putea alege să le folosim loc (dintre care unul fiind că de fapt ne permite să filtram rânduri și coloane printr-o singură operațiune), dar asta deschide o operație Pandora's Box of Pandas care este mai bine lăsată la alt articol.

Deocamdată, obiectivul important de învățare este acesta: când filtrăm în Pandas, sintaxa confuză nu este un fel de magie ciudată. Trebuie pur și simplu să-l împărțim în cei doi pași componente: 1) obținerea unei serii booleene a rândurilor care ne satisface condiția și 2) utilizarea seriei pentru a filtra întregul DataFrame.

De ce este util acest lucru, te-ai putea întreba? Ei bine, în general, este probabil să ducă la erori confuze dacă utilizați doar operațiuni fără a înțelege cum funcționează de fapt. Filtrarea este o operațiune utilă și incredibil de comună, iar acum știți cum funcționează.

Să mergem mai departe.

Frumusețea funcțiilor Lambda

Uneori, datele dvs. necesită transformări care pur și simplu nu sunt încorporate în funcționalitatea Pandas. Oricât de încercat ai putea, nicio cantitate de curățare Stack Overflow sau de a explora cu sârguință documentația Pandas nu dezvăluie o soluție la problema ta.

Introduceți funcțiile lambda — o caracteristică utilă a limbajului care se integrează frumos cu Pandas.

Ca o recenzie rapidă, iată cum funcționează lambda:

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

Funcțiile lambda nu sunt diferite de funcțiile obișnuite, cu excepția faptului că au o sintaxă mai concisă:

  • Numele funcției în stânga semnului egal
  • lambda cuvântul cheie din dreapta semnului egal (în mod similar cu def cuvânt cheie într-o definiție tradițională a funcției Python, aceasta îi permite lui Python să știe că definim o funcție).
  • Parametru(i) după lambda cuvânt cheie, în partea stângă a două puncte.
  • Returnează valoarea în dreapta punctelor două puncte.

Acum, să aplicăm funcțiile lambda unei situații realiste.

Seturile de date au adesea propriile particularități de formatare, specifice variațiilor în introducerea și colectarea datelor. Drept urmare, datele cu care lucrați ar putea avea probleme ciudat de specifice pe care trebuie să le rezolvați. De exemplu, luați în considerare setul de date simplu de mai jos, care stochează numele oamenilor și veniturile acestora. Să-i spunem monies.

Imagine după autor

Acum, în calitate de Altețe Master Data a acestei companii, ni s-au oferit câteva informații extrem de secrete: toată lumea din această companie va primi o mărire de 10% plus o sumă suplimentară de 1000 USD. Acesta este probabil prea specific unui calcul pentru a găsi o metodă specifică, dar suficient de simplu cu o funcție lambda:

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

Apoi, tot ce trebuie să facem este să folosim această funcție cu Pandas apply funcție, care ne permite să aplicăm o funcție fiecărui element din seria selectată:

monies['New Income'] = monies['Income'].apply(update_income)
bani
Imagine după autor

Și am terminat! Un nou DataFrame genial care constă exact din informațiile de care aveam nevoie, toate în două linii de cod. Pentru a o face și mai concisă, am fi putut chiar defini funcția lambda în interior apply direct — un sfat cool demn de reținut.

Voi păstra ideea aici simplă.

Lambda sunt extrem de utile și, prin urmare, ar trebui să le folosiți. Bucurați-vă!

Funcții de manipulare a șirurilor de serie

În secțiunea anterioară, am vorbit despre versatilitatea funcțiilor lambda și despre toate lucrurile interesante pe care le pot ajuta să le realizați cu datele dvs. Acesta este excelent, dar ar trebui să ai grijă să nu te lași dus. Este incredibil de obișnuit să fii atât de prins într-un mod familiar de a face lucrurile încât să ratezi comenzile rapide mai simple cu care Python le-a binecuvântat programatorilor. Acest lucru se aplică mai mult decât doar lambda, desigur, dar vom rămâne cu asta pentru moment.

De exemplu, să presupunem că avem următorul DataFrame numit names care stochează numele și prenumele persoanelor:

Imagine după autor

Acum, din cauza limitărilor de spațiu din baza noastră de date, decidem că, în loc să stocăm întregul nume de familie al unei persoane, este mai eficient să stocăm pur și simplu ultima inițială. Astfel, trebuie să transformăm 'Last Name' coloană în consecință. În cazul lambdas, încercarea noastră de a face acest lucru ar putea arăta cam așa:

names['Last Name'] = names['Last Name'].aply(lambda s: s[:1])
nume
Imagine după autor

Acest lucru funcționează în mod clar, dar este puțin ciudat și, prin urmare, nu atât de Pythonic pe cât ar putea fi. Din fericire, cu frumusețea funcțiilor de manipulare a șirurilor din Pandas, există o altă modalitate, mai elegantă (în scopul următoarei linii de cod, mergeți mai departe și presupuneți că nu am modificat deja 'Last Name' coloana cu codul de mai sus):

names['Last Name'] = names['Last Name'].str[:1]
nume
Imagine după autor

Ta-da! The .str proprietatea unei Serii Pandas ne permite să îmbinam fiecare șir din serie cu o operațiune de șir specificată, la fel ca și cum am lucra cu fiecare șir individual.

Dar stai, devine mai bine. De cand .str ne permite efectiv să accesăm funcționalitatea normală a unui șir prin intermediul seriei, putem aplica și o serie de funcții șir pentru a ne ajuta să ne procesăm rapid datele! De exemplu, să presupunem că decidem să convertim ambele coloane în litere mici. Următorul cod face treaba:

names['First Name'] = names['First Name'].str.lower()
names['Last Name'] = names['Last Name'].str.lower()
nume
Imagine după autor

Mult mai simplu decât să treci prin necazul de a-ți defini propriile funcții lambda și de a apela funcțiile șir din interiorul acestuia. Nu că nu iubesc lambda - dar totul are locul lui, iar simplitatea ar trebui să aibă întotdeauna prioritate în Python.

Am acoperit doar câteva exemple aici, dar o colecție mare de funcții șir îți stă la dispoziție [1].

Folosiți-le liberal. Sunt excelente.

Gânduri finale și recapitulare

Iată o mică foaie de cheat pentru transformarea datelor pentru tine:

  1. Filtrați așa cum ați fi spus. Află ce se întâmplă cu adevărat, ca să știi ce faci.
  2. Iubește-ți lambda. Ele vă pot ajuta să manipulați datele în moduri uimitoare.
  3. Pandasului iubesc corzile la fel de mult ca tine. Există o mulțime de funcționalități încorporate - ați putea la fel de bine să le utilizați.

Iată un ultim sfat: nu există o modalitate „corectă” de a filtra un set de date. Depinde de datele disponibile, precum și de problema unică pe care doriți să o rezolvați. Cu toate acestea, deși nu există o metodă setată pe care o puteți urma de fiecare dată, există o colecție utilă de instrumente care merită să aveți la dispoziție. În acest articol, am discutat despre trei dintre ele.

Vă încurajez să ieșiți și să găsiți mai multe.

Referinte

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

Transformarea datelor de bază în Pandas cu aceste trei tehnici utile republicate din sursa https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-three-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— 4 prin https://towardsdatascience.com/feed

<!–

->

Timestamp-ul:

Mai mult de la Consultanți Blockchain