Pandas DataFrame yra Python duomenų struktūra, kuri gali būti naudojama lentelių kūrimui ir tvarkymui. Pa­aiš­ki­na­me duomenų struk­tū­ros sandarą ir svar­biau­sius jos metodus bei savybes.

Kaip veikia „Pandas DataFrame“?

Pandas Da­taF­ra­mes yra Python Pandas bi­b­lio­te­kos pagrindas, lei­džian­tis efek­ty­viai ir lanksčiai ana­li­zuo­ti duomenis Python kalba. Pandas DataFrame yra dvimatė lentelinė duomenų struktūra su su­nu­me­ruo­to­mis eilutėmis ir pa­žen­klin­to­mis stul­pe­liais. Ši struktūra leidžia duomenis or­ga­ni­zuo­ti lengvai su­pran­ta­ma ir lengvai tvarkoma forma, panašiai kaip skai­čiuok­lės prog­ra­mo­se, pvz., Excel ar Li­breOf­fi­ce. Kiekviena DataFrame stul­pe­ly­je gali būti įvairių Python duomenų tipų, o tai reiškia, kad DataFrame gali saugoti ne­vie­na­ly­ti­nius duomenis, pa­vyz­džiui, skait­me­ni­nes vertes, eilutes ir boolinius duomenis vienoje lentelėje.

Tip

Pandas Da­taF­ra­mes yra pagrįsti NumPy masyvais, kurie leidžia efek­ty­viai tvarkyti duomenis ir ap­skai­čiuo­ti vertes. Tačiau Panda Da­taF­ra­mes kai kuriais aspektais skiriasi nuo NumPy duomenų struktūrų, pa­vyz­džiui, savo he­te­ro­ge­niš­ku­mu ir matmenų skaičiumi. Dėl šios prie­žas­ties NumPy duomenų struk­tū­ros yra tinkamos dideliems kiekiams skait­me­ni­nių verčių tvarkyti, o Panda duomenų struk­tū­ros yra labiau tinkamos bendram duomenų tvarkymui.

Pandas duomenų rėmelių struktūra

DataFrame turi tris pag­rin­di­nes su­de­da­mą­sias dalis: duomenis, eilučių indeksus ir stulpelių pa­va­di­ni­mus. Eilučių indeksas (arba tiesiog indeksas) unikaliai iden­ti­fi­kuo­ja kiekvieną eilutę. Pagal nu­ma­ty­tuo­sius nu­sta­ty­mus eilutės in­dek­suo­ja­mos skait­me­ni­nė­mis reikš­mė­mis, tačiau jas galima pakeisti eilutėmis. Svarbu atkreipti dėmesį, kad Pandas Da­taF­ra­mes in­dek­suo­ja­mi nuo nulio, tai reiškia, kad indeksai prasideda nuo 0.

Image: The structure of a Pandas DataFrame
Pandas Da­taF­ra­mes have a tabular structure and are therefore very similar to Excel or SQL tables.
Note

Nors Pandas Da­taF­ra­mes yra vienos iš po­pu­lia­riau­sių ir nau­din­giau­sių Python duomenų struktūrų, jos nėra bazinės kalbos dalis ir turi būti im­por­tuo­ja­mos atskirai. Tai daroma naudojant import pandas arba from pandas import DataFrame eilutę failo pradžioje. Taip pat galite naudoti import pandas as pd, jei norite nurodyti modulį trum­pes­niu pa­va­di­ni­mu (šiuo atveju „pd“).

Pandas Da­taF­ra­mes nau­do­ji­mas

Pandas Da­taF­ra­mes teikia įvairias technikas ir metodus, skirtus efek­ty­viam duomenų ap­do­ro­ji­mui, analizei ir vi­zu­a­li­za­vi­mui. Toliau pa­tei­kia­ma in­for­ma­ci­ja apie pag­rin­di­nes sąvokas ir metodus, skirtus duomenų tvarkymui naudojant Pandas Da­taF­ra­mes.

Kaip sukurti Pandas duomenų rėmelį

Jei jau iš­sau­go­jo­te norimus duomenis Python sąraše arba Python žodyne, galite lengvai sukurti DataFrame iš jų. Tiesiog per­duo­ki­te esamą duomenų struktūrą DataFrame konst­ruk­to­riui naudodami pandas.DataFrame([data]). Kaip Pandas in­ter­pre­tuos jūsų duomenis, pri­klau­sys nuo jūsų pateiktos struk­tū­ros. Pa­vyz­džiui, Pandas Da­taF­ra­mes galite sukurti iš Python sąrašo taip:

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

Kaip matyti iš pateikto pavyzdžio, naudojant paprastus sąrašus galima kurti tik vienos, ne­pa­žy­mė­tos stulpelio Da­taF­ra­mes. Dėl šios prie­žas­ties re­ko­men­duo­ja­ma kurti Da­taF­ra­mes iš žodynų, kuriuose yra sąrašai. Raktai in­ter­pre­tuo­ja­mi kaip stulpelių pa­va­di­ni­mai, o sąrašai – kaip susiję duomenys. Tai iliust­ruo­ja šis pavyzdys:

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

Naudojant šį metodą, DataFrame iš karto gauna norimą formatą ir norimas antraštes. Tačiau, jei nenorite pa­si­kliau­ti įdieg­to­mis Python duomenų struk­tū­ro­mis, taip pat galite įkelti duomenis iš išorinio šaltinio, pvz., CSV failo ar SQL duomenų bazės. Tiesiog iš­kvie­s­ki­te ati­tin­ka­mą Pandas funkciją:

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

Pa­teik­ta­me pavyzdyje duomenų rėmeliai csv ir sql dabar yra visi duomenys iš data.csv ir SQL lentelės table. Kurdami duomenų rėmelį iš išorinio šaltinio, galite nurodyti pa­pil­do­mus duomenis, pa­vyz­džiui, ar skait­me­ni­niai indeksai turi būti įtraukti į duomenų rėmelį, ar ne. Daugiau in­for­ma­ci­jos apie pa­pil­do­mus dviejų funkcijų ar­gu­men­tus rasite ofi­cia­lio­je „Pandas DataFrame“ do­ku­men­ta­ci­jos puslapyje.

Tip

Norėdami sukurti Pandas DataFrame iš SQL lentelės, turite naudoti Pandas kartu su Python SQL moduliu, pvz., SQLAl­che­my. Nu­sta­ty­ki­te ryšį su duomenų baze naudodami pa­si­rink­tą SQL modulį ir per­duo­ki­te jį į read_sql_query().

Kaip rodyti duomenis Pandas Da­taF­ra­mes

Naudodami „Pandas Da­taF­ra­mes“, galite rodyti ne tik visą lentelę, bet ir atskiras eilutes bei stul­pe­lius. Galite pa­si­rink­ti konk­re­čias eilutes ir stul­pe­lius, kuriuos norite per­žiū­rė­ti. Toliau pa­teik­ta­me pavyzdyje parodyta, kaip rodyti atskiras arba kelias eilutes ir stul­pe­lius:

# 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

Pavyzdyje nuoroda į stulpelį daroma naudojant jo pa­va­di­ni­mą vien­gu­bo­se skliaus­tuo­se, panašiai kaip Python žodynuose prieinama prie verčių. Tuo tarpu loc atributas nau­do­ja­mas nuorodai į eilutes. Naudodami loc taip pat galite taikyti logines sąlygas duomenų fil­t­ra­vi­mui. Toliau pateiktas kodas parodo, kaip išvesti tik tas eilutes, kuriose „amžiaus“ vertė yra didesnė nei 30:

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

Tačiau taip pat galite naudoti iloc atributą, kad at­rink­tu­mė­te eilutes ir stul­pe­lius pagal jų padėtį duomenų rėmelio (DataFrame) struk­tū­ro­je. Pa­vyz­džiui, galite parodyti langelį, esantį trečioje eilutėje ir ket­vir­ta­me stul­pe­ly­je:

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

Kaip kartoti eilutes naudojant Pandas Da­taF­ra­mes

Ap­do­ro­jant duomenis Python kalba, dažnai reikia kartoti Pandas Da­taF­ra­mes eilučių ciklą, kad ta pati operacija būtų taikoma visiems duomenims. Pandas šiam tikslui siūlo du metodus: itertuples() ir iterrows(). Kiek­vie­nas metodas turi savo privalumų ir trūkumų, susijusių su našumu ir patogumu naudoti.

iterrows() metodas grąžina indeksų ir serijų rinkinį už kiekvieną eilutę duomenų rėmelio. Serija yra Pandas arba NumPy duomenų struktūra, panaši į Python sąrašą, tačiau ji užtikrina geresnį našumą. Galite pasiekti atskirus serijos elementus naudodami stulpelio pa­va­di­ni­mą, o tai su­pa­pras­ti­na duomenų tvarkymą.

Nors „Pandas“ serijos yra efek­ty­ves­nės nei „Python“ sąrašai, jos vis tiek turi tam tikrą našumo praradimą. Todėl itertuples() metodas ypač re­ko­men­duo­ja­mas labai dideliems „Da­taF­ra­mes“. Skir­tin­gai nei iterrows(), itertuples() grąžina visą eilutę, įskaitant indeksą, kaip tuples, kurie yra našesni nei serijos. Naudodami tuples, galite pasiekti atskirus elementus naudodami taško notaciją, panašiai kaip pa­sie­kia­te objekto atributus.

Kitas svarbus skirtumas tarp serijų ir tuplų yra tai, kad tuplai nėra keičiami. Taigi, jei norite kartoti DataFrame naudodami itertuples() ir keisti vertes, turite nurodyti DataFrame su at atributu ir tuplo indeksu. Šis atributas veikia labai panašiai kaip loc. Toliau pateiktas pavyzdys iliust­ruo­ja skirtumus tarp iterrows() ir 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
Go to Main Menu