Este ușor să te încurce sintaxa Pandas pentru a accesa biții individuali din DataFrames. Mai întâi, să vorbim despre rânduri și coloane, iar apoi vom vorbi despre elementele atomice („celule”) însele.
Să presupunem că aveți un DataFrame numit df. Iată cum puteți extrage anumite rânduri și coloane:
- df.loc[i] – accesează rândul cu indexul i
- df.iloc[n] – accesează rândul cu numărul n
- df[c] – accesează coloana c
Al doilea dintre acestea amintește de sintaxa .iloc pe care am învățat-o pentru Series. Cu acesta, specificăm numărul pe care îl dorim, nu indexul/cheia/eticheta. Nu este foarte obișnuit să faci asta, dar se întâmplă. Mai frecventă este prima formă: specificăm rândul pe care îl dorim după indexul său.
Ultimul este complicat, deoarece toată lumea (inclusiv eu, de câteva ori pe săptămână, se pare) presupune că doar tastând (să spunem) „df[’Bart’]” ți-ar oferi rândul Bart. Probabil așa ar trebui să funcționeze, din moment ce Series a funcționat așa. Din păcate, nu: dacă nu specificați nici .loc, nici .iloc, cereți o coloană, nu un rând.
Un alt lucru ciudat este modul în care un singur rând este prezentat pe ecran. Să revenim la setul de date simpson și să accesăm rândul Bart în modul corespunzător (cu .loc):
print(simpsons.loc['Bart'])
▐ species human ▐ age 10 ▐ gender M ▐ fave skateboard ▐ IQ 90 ▐ hair buzz ▐ salary 0 ▐ Name: Bart, dtype: object
Asta mă deranjează. Bart, ca toți ceilalți Simpson, a fost un rând în DataFrame original, dar aici, prezintă informațiile lui Bart pe verticală, nu pe orizontală. Mi se pare deranjant vizual. Motivul pentru care Pandas procedează astfel este că fiecare rând al unui DataFrame este o Series, iar modul în care Pandas afișează Series este vertical. Ne ocupăm cumva.
Apropo, pentru oricare dintre cele trei opțiuni, puteți oferi o listă cu mai multe lucruri pe care le doriți, în loc de un singur lucru. Faceți acest lucru folosind boxe duble:
- df.loc[[i1,i2,i3,… ]] – accesează rândurile cu indici i1, i2, i3 etc.
- df.iloc[[n1,n2,n3,… ]] – accesează rândurile numerotate n1, n2, n3 etc.
- df[[c1,c2,c3,… ]] – accesează numele coloanelor c1, c2, c3, etc.
Exemple
Pentru a vă testa înțelegerea tuturor celor de mai sus, confirmați că înțelegeți următoarele exemple:
print(simpsons.iloc[3])
▐ species human ▐ age 8 ▐ gender F ▐ fave saxophone ▐ IQ 200 ▐ hair curly ▐ salary 0 ▐ Name: Lisa, dtype: object
print(simpsons['age'])
▐ name ▐ Homer 36 ▐ Marge 34 ▐ Bart 10 ▐ Lisa 8 ▐ Maggie 1 ▐ SLH 4 ▐ Name: age, dtype: int64
print(simpsons.loc[['Lisa','Maggie','Bart']])
▐ species age gender fave IQ hair salary ▐ name ▐ Lisa human 8 F saxophone 200.0 curly 0.0 ▐ Maggie human 1 F pacifier 100.0 curly 0.0 ▐ Bart human 10 M skateboard 90.0 buzz 0.0
print(simpsons.iloc[[1,3,4]])
▐ species age gender fave IQ hair salary ▐ name ▐ Marge human 34 F helping others 200.0 stacked tall 0.0 ▐ Lisa human 8 F saxophone 100.0 curly 0.0 ▐ Maggie human 1 F pacifier 90.0 curly 0.0
print(simpsons[['age','fave','IQ']])
▐ age fave IQ ▐ name ▐ Homer 36 beer 74.0 ▐ Marge 34 helping others 120.0 ▐ Bart 10 skateboard 90.0 ▐ Lisa 8 saxophone 200.0 ▐ Maggie 1 pacifier 100.0 ▐ SLH 4 NaN 30.0
De altfel, veți observa cum valorile name sunt tratate diferit față de toate celelalte coloane, deoarece name este indexul DataFrame.În primul rând, name apare întotdeauna, chiar dacă nu este inclus printre coloanele pe care le-am cerut. Pe de altă parte, este afișat în rândul de jos a înregistrărilor Series cu un singur rând și nu în sus cu celelalte valori din acel rând.
Sursa: Stephen Davies, The Crystal Ball – Instruction Manual, Vol. 1: Introduction to Data Science, v. 1.1. Copyright © 2021 Stephen Davies. Licența CC BY-SA 4.0. Traducere și adaptare: Nicolae Sfetcu. © 2024 MultiMedia Publishing, Introducere în Știința Datelor, Volumul 1
Lasă un răspuns