Pandas DataFrame on Python-and­me­st­ruk­tuur, mida saab kasutada tabelite loomiseks ja muut­miseks. Selgitame and­me­st­ruk­tuuri üles­ehi­tust ning selle olu­li­se­maid meetodeid ja omadusi.

Kuidas Pandas DataFrame töötab?

Pandas Da­taF­ra­mes on Python Pandas raa­ma­tu­kogu tuum ja võimaldab tõhusat ja paind­likku andmete analüüsi Pythonis. Pandas DataFrame on ka­he­mõõt­me­line ta­be­li­line and­me­st­ruk­tuur, millel on num­mer­da­tud read ja mär­gis­ta­tud veerud. See struktuur võimaldab andmeid or­ga­ni­see­rida kergesti mõis­te­ta­vas ja ma­ni­pu­lee­ri­ta­vas vormis, sarnaselt ta­bel­ar­vu­tus­prog­rammide Excel või Lib­reOf­fice-ga. Iga DataFrame’i veerg võib sisaldada erinevaid Python and­me­tüüpe, mis tähendab, et DataFrame võib sal­ves­tada he­te­ro­geen­seid andmeid – näiteks numb­rilisi väärtusi, stringe ja boolesid ühes tabelis.

Tip

Pandas Da­taF­ra­mes põhinevad NumPy mas­sii­vi­del, mis või­mal­da­vad andmete tõhusat tööt­le­mist ja väärtuste ar­vu­ta­mist. Pandas Da­taF­ra­mes erinevad NumPy and­me­st­ruk­tuu­ri­dest mõnes mõttes, näiteks oma he­te­ro­geen­suse ja di­men­sioo­nide arvu poolest. Seetõttu sobivad NumPy and­me­st­ruk­tuu­rid suure hulga numb­ri­liste väärtuste tööt­le­miseks ja Pandas and­me­st­ruk­tuu­rid sobivad paremini üldiseks andmete tööt­le­miseks.

Pandas Da­taF­ra­mes’i struktuur

DataFrame koosneb kolmest põ­hi­kom­po­nen­dist: andmed, ridade indeksid ja veergude nimed. Ridade indeks (või lihtsalt indeks) iden­ti­fit­see­rib iga rea üheselt. Vaikimisi on read in­deksee­ri­tud numb­ri­liste väär­tus­tega, kuid need võib asendada strin­gi­dega. Oluline on märkida, et Pandas Da­taF­ra­mes on nul­l­in­deksee­ri­tud, mis tähendab, et indeksid algavad 0-st.

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

Kuigi Pandas Da­taF­ra­mes on ühed po­pu­laar­se­mad ja ka­su­li­ku­mad Python-and­me­st­ruk­tuu­rid, ei kuulu need baaskeele juurde ja need tuleb eraldi importida. Seda tehakse faili alguses oleva rea import pandas või from pandas import DataFrame abil. Al­ter­na­tiivina võite kasutada import pandas as pd, kui soovite viidata moodulile lühema nimega (sel juhul „pd”).

Pandas Da­taF­ra­mes’i ka­su­ta­mine

Pandas Da­taF­ra­mes pakub mit­me­su­gu­seid tehnikaid ja meetodeid andmete tõhusaks tööt­le­miseks, ana­lüü­si­miseks ja vi­sua­li­see­ri­miseks. Allpool tut­vus­ta­takse Pandas Da­taF­ra­mes’i abil andmete tööt­le­mise põ­hi­mõt­teid ja meetodeid.

Kuidas luua Pandas DataFrame

Kui olete soovitud andmed juba Python-nimekirja või Python-sõ­nas­tikku sal­ves­ta­nud, saate neist hõlpsasti luua DataFrame’i. Lihtsalt edastage ole­mas­olev and­me­st­ruk­tuur DataFrame’i konst­ruk­to­rile, kasutades pandas.DataFrame([data]). Kuidas Pandas teie andmeid tõlgendab, sõltub teie esitatud struk­tuu­rist. Näiteks saate Python-ni­me­kir­jast luua Pandas Da­taF­ra­mes järg­mi­selt:

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

Nagu näete eespool toodud näites, saate lihtsate loen­di­tega luua ainult üheainsa, mär­gis­ta­mata veeruga and­me­raa­mis­tikke. Seetõttu on soo­vi­ta­tav luua and­me­raa­mis­ti­kud sõ­nas­ti­kest, mis si­sal­da­vad loendeid. Võtmed tõl­gen­da­takse vee­ru­ni­me­dena ja loendid seotud andmetena. Seda il­lust­ree­rib järgmine näide:

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

Selle meetodi abil saab DataFrame kohe soovitud formaadi ja peal­kir­jad. Kui aga ei soovi tugineda Pythoni sis­se­ehi­ta­tud and­me­st­ruk­tuu­ri­dele, võib andmed laadida ka välisest allikast, näiteks CSV-failist või SQL-and­me­baasist. Selleks tuleb lihtsalt kutsuda välja sobiv Pandas-funkt­sioon:

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

Eespool toodud näite and­mes­ti­kud csv ja sql si­sal­da­vad nüüd kõiki andmeid and­mes­ti­kust data.csv ja SQL-tabelist table. Vä­lisal­li­kast and­mes­tiku loomisel saate määrata täien­da­vaid üksikasju, näiteks kas numb­ri­li­sed indeksid tuleks and­mes­tikku lisada või mitte. Li­sa­tea­vet kahe funkt­siooni täien­da­vate ar­gu­men­tide kohta leiate Pandas DataFrame’i amet­li­kult do­ku­men­tee­ri­mise lehelt.

Tip

SQL-tabelist Pandas DataFrame’i loomiseks peate kasutama Pandast koos Python SQL-mooduliga, näiteks SQ­LAlc­hemy. Looge valitud SQL-mooduli abil ühendus and­me­baasiga ja edastage see read_sql_query().

Kuidas kuvada andmeid Pandas Da­taF­ra­mes’is

Pandas Da­taF­ra­mes’iga saate kuvada mitte ainult kogu tabeli, vaid ka üksikuid ridu ja veerge. Saate valida vaa­ta­miseks konk­reet­sed read ja veerud. Järgmine näide il­lust­ree­rib, kuidas kuvada üksikuid või mitut rida ja veergu:

# 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äites vii­da­takse veerule, kasutades selle nime ühe­kord­sete sulgudes, sarnaselt sellega, kuidas pääsete ligi väär­tus­tele Python-sõ­nas­ti­ku­tes. Seevastu atribuuti loc ka­su­ta­takse vii­ta­miseks ridadele. loc abil saate rakendada ka loogilisi tingimusi andmete filt­ree­ri­miseks. Järgmine koo­dib­lokk näitab, kuidas väl­jas­tada ainult need read, kus väärtus „age” on suurem kui 30:

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

Kuid saate kasutada ka atribuuti iloc, et valida ridu ja veerge nende asukoha järgi DataFrame’is. Näiteks saate kuvada kolmanda rea ja neljanda veeru lahtri:

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

Kuidas korrata ridu Pandas Da­taF­ra­mes’iga

Pythonis andmeid töödeldes on sageli vaja läbi käia Pandas Da­taF­ra­mes’i read, et rakendada sama ope­rat­siooni kõikidele andmetele. Pandas pakub selleks kahte meetodit: itertuples() ja iterrows(). Mõlemal meetodil on oma eelised ja puudused seoses jõudluse ja ka­su­ta­ja­sõb­ra­lik­ku­sega.

Meetod iterrows() tagastab DataFrame’i iga rea indeksite ja seeriate tuplid. Seeria on Pandas või NumPy and­me­st­ruk­tuur, mis sarnaneb Python’i loendiga, kuid pakub paremat jõudlust. Seeria ük­si­ku­tele ele­men­ti­dele pääseb ligi veeru nime abil, mis liht­sus­tab andmete käit­le­mist.

Kuigi Pandas Series on tõhusamad kui Python-ni­me­kir­jad, kaasneb nendega siiski mõningane jõudluse lisakulu. Seetõttu on meetod itertuples() eriti soo­vi­ta­tav väga suurte and­me­raa­mis­ti­kute puhul. Erinevalt meetodist iterrows() tagastab itertuples() kogu rea, seal­hul­gas indeksid, tuplite kujul, mis on jõud­lu­selt paremad kui Series. Tuplite puhul saate ük­si­ku­tele ele­men­ti­dele juurde pääseda punkt­no­tat­siooni abil, sarnaselt objekti at­ri­buu­ti­dele juurde pää­se­mi­sega.

Teine oluline erinevus seeria ja tuplite vahel on see, et tuplid ei ole muutuvad. Seega, kui soovite ite­rat­siooni läbi viia DataFrame’i kasutades itertuples() ja muuta väärtusi, peate viitama DataFrame’ile at­ri­buu­diga at ja tupli indeksiga. See atribuut toimib väga sarnaselt loc. Järgmine näide il­lust­ree­rib erinevusi iterrows() ja itertuples() vahel:

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