Pandas DataFrame este o structură de date Python care poate fi utilizată pentru a crea și manipula tabele. Vă explicăm structura structurii de date și cele mai importante metode și proprietăți ale acesteia.

Cum funcționează Pandas DataFrame?

Pandas DataFrames reprezintă nucleul bibliotecii Python Pandas și permit analiza eficientă și flexibilă a datelor în Python. Un Pandas DataFrame este o structură de date tabelară bidimensională cu rânduri numerotate și coloane etichetate. Această structură permite organizarea datelor într-o formă ușor de înțeles și de manipulat, similară programelor de tip foaie de calcul, precum Excel sau LibreOffice. Fiecare coloană dintr-un DataFrame poate conține diferite tipuri de date Python, ceea ce înseamnă că un DataFrame poate stoca date eterogene – de exemplu, valori numerice, șiruri de caractere și valori booleene într-un singur tabel.

Sfat

Cadrele de date Pandas se bazează pe matrice NumPy, ceea ce permite gestionarea eficientă a datelor și calcularea valorilor. Cu toate acestea, cadrele de date Pandas diferă de structurile de date NumPy în anumite privințe, de exemplu în ceea ce privește eterogenitatea și numărul de dimensiuni. Din acest motiv, structurile de date NumPy sunt potrivite pentru manipularea unor cantități uriașe de valori numerice, iar structurile de date Pandas sunt mai potrivite pentru manipularea generală a datelor.

Structura cadrelor de date Pandas

Un DataFrame are trei componente principale: datele, indicii de rânduri și numele coloanelor. Indicele de rând (sau pur și simplu indicele) identifică în mod unic fiecare rând. În mod implicit, rândurile sunt indexate cu valori numerice, dar acestea pot fi înlocuite cu șiruri de caractere. Este important de reținut că Pandas DataFrames sunt indexate de la zero, ceea ce înseamnă că indicii încep de la 0.

Imagine: The structure of a Pandas DataFrame
Pandas DataFrames have a tabular structure and are therefore very similar to Excel or SQL tables.
Notă

Deși Pandas DataFrames se numără printre cele mai populare și utile structuri de date Python, acestea nu fac parte din limbajul de bază și trebuie importate separat. Acest lucru se realizează folosind linia import pandas sau from pandas import DataFrame de la începutul fișierului. Alternativ, puteți utiliza import pandas as pd dacă doriți să faceți referire la modul cu un nume mai scurt (în acest caz „pd”).

Utilizarea cadrelor de date Pandas

Pandas DataFrames oferă diverse tehnici și metode pentru procesarea, analiza și vizualizarea eficientă a datelor. Mai jos, veți afla despre conceptele și metodele cheie pentru manipularea datelor folosind Pandas DataFrames.

Cum se creează un DataFrame Pandas

Dacă ați salvat deja datele dorite într-o listă Python sau într-un dicționar Python, puteți crea cu ușurință un DataFrame din acestea. Pur și simplu transmiteți structura de date existentă constructorului DataFrame folosind pandas.DataFrame([data]). Modul în care Pandas interpretează datele dvs. va depinde de structura pe care o furnizați. De exemplu, puteți crea un Pandas DataFrames dintr-o listă Python după cum urmează:

import pandas
lists = ["Ahmed", "Beatrice", "Candice", "Donovan", "Elisabeth", "Frank"]
df = pandas.DataFrame(list)
print(df)
# Output:
#            0
# 0     	Ahmed
# 1      	Beatrice
# 2     	Candice
# 3    		Donovan
# 4  	  	Elisabeth
# 5  		Frank
python

După cum se poate observa în exemplul de mai sus, cu liste simple se pot crea doar DataFrames cu o singură coloană, fără etichete. Din acest motiv, se recomandă crearea DataFrames din dicționare care conțin liste. Cheile sunt interpretate ca nume de coloane, iar listele ca date asociate. Exemplul următor ilustrează acest lucru:

import pandas
datA = {
    'Name': ['Arthur', 'Bruno', 'Christoph'],
    'Age': [34, 30, 55],
    'Income': [75000.0, 60000.5, 90000.3],
}
df = pandas.DataFrame(data)
print(df)
# Output:
#         Name  Age   Income
# 0     Arthur     34  75000.0
# 1      Bruno     30  60000.5
# 2  Christoph     55  90000.3
python

Folosind această metodă, DataFrame are imediat formatul dorit și titlurile dorite. Cu toate acestea, dacă nu doriți să vă bazați pe structurile de date Python încorporate, puteți încărca datele dintr-o sursă externă, cum ar fi un fișier CSV sau o bază de date SQL. Pur și simplu apelați funcția Pandas corespunzătoare:

import pandas
import sqlalchemy
# DataFrame of CSV:
csv = pandas.read_csv("csv-data/files.csv")
# DataFrame of SQL:
engine = create_engine('postgresql://username:password@localhost:5432/mydatabase')
sql = pandas.read_sql_query('SELECT * FROM table', engine)
python

Cadrele de date csv și sql din exemplul de mai sus conțin acum toate datele din data.csv și din tabelul SQL table. Când creați un cadru de date dintr-o sursă externă, puteți specifica detalii suplimentare, de exemplu dacă indicii numerici trebuie incluși sau nu în cadrul de date. Aflați mai multe despre argumentele suplimentare ale celor două funcții pe pagina oficială de documentație Pandas DataFrame.

Sfat

Pentru a crea un Pandas DataFrame dintr-un tabel SQL, trebuie să utilizați Pandas împreună cu un modul Python SQL, cum ar fi SQLAlchemy. Stabiliți o conexiune la baza de date utilizând modulul SQL ales și transmiteți-l la read_sql_query().

Cum se afișează datele în Pandas DataFrames

Cu Pandas DataFrames, puteți afișa nu numai întregul tabel, ci și rânduri și coloane individuale. Puteți selecta rânduri și coloane specifice pentru a le vizualiza. Următorul exemplu ilustrează modul de afișare a rândurilor și coloanelor individuale sau multiple:

# Output 0-th line
print(df.loc[0])
# Output lines 3 to 6
print(df.loc[3:6])
# Output lines 3 and 6
print(df.loc[[3, 6]])
# Output "Occupation" column
print(df["Occupation"])
# Output "Occupation" and "Age" columns
print(df[["Occupation", "Age"]])
# Selection of multiple rows and columns
print(df.loc[[3, 6], ['Occupation', 'Age']])
python

În exemplul dat, referirea la o coloană se face folosind numele acesteia între paranteze simple, similar modului în care se accesează valorile în dicționarele Python. În schimb, atributul loc este utilizat pentru a face referire la rânduri. Cu loc puteți aplica și condiții logice pentru a filtra datele. Următorul bloc de cod demonstrează cum se pot afișa numai rândurile în care valoarea pentru „vârstă” este mai mare de 30:

print(df.loc[df['Age'] > 30])
python

Cu toate acestea, puteți utiliza și atributul iloc pentru a selecta rânduri și coloane în funcție de poziția lor în DataFrame. De exemplu, puteți afișa celula care se află în al treilea rând și a patra coloană:

print(df.iloc[3, 4]) 
# Output: 
# London
 
print(df.iloc[[3, 4, 6], 4]) 
# Output: 
# 3 London
# 4 Birmingham
# 6 Preston
python

Cum să iterați peste linii cu Pandas DataFrames

Atunci când se prelucrează date în Python, este adesea necesar să se itereze peste rândurile unui Pandas DataFrames pentru a aplica aceeași operație tuturor datelor. Pandas oferă două metode în acest scop: itertuples() și iterrows(). Fiecare metodă are propriile avantaje și dezavantaje în ceea ce privește performanța și ușurința în utilizare.

Metoda iterrows() returnează un tuple de index și Series pentru fiecare rând din DataFrame. O Series este o structură de date Pandas sau NumPy similară cu o listă Python, dar oferă performanțe mai bune. Puteți accesa elemente individuale din Series folosind numele coloanei, ceea ce simplifică gestionarea datelor.

Deși seriile Pandas sunt mai eficiente decât listele Python, ele prezintă totuși unele pierderi de performanță. Prin urmare, metoda itertuples() este recomandată în special pentru cadre de date foarte mari. Spre deosebire de iterrows(), itertuples() returnează întregul rând, inclusiv indexul, sub formă de tupluri, care sunt mai performante decât seriile. Cu tuplurile, puteți accesa elemente individuale folosind notația cu punct, similar cu accesarea atributelor unui obiect.

O altă diferență importantă între serii și tupluri este că tuplurile nu sunt mutabile. Deci, dacă doriți să iterați peste un DataFrame folosind itertuples() și să modificați valorile, trebuie să faceți referire la DataFrame cu atributul at și indexul tuplului. Acest atribut funcționează foarte similar cu loc. Următorul exemplu servește pentru a ilustra diferențele dintre iterrows() și itertuples():

import pandas
df = pandas.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'], 
    'Age': [25, 30, 35], 
    'Income ': [70000.0, 80000.5, 90000.3]
})
for index, row in df.iterrows():
        row['Income'] += 1000
        print(f"Index: {index}, Age: {row['Age']}, Income: {row['Income']}")
for tup in df.itertuples():
        df.at[tup.Index, 'Income'] += 1000 # Change value directly in the DataFrame using at[] 
       print(f “Index: {tup.Index}, Age: {tup.Age}, Income: {df.loc[tup.Index, 'Income']}”)
# Both loops have the same output
python
Mergi la meniul principal