# Kuidas kasutada Pandas DataFrame'i tabelite kiireks töötlemiseks Pythonis

Pandas DataFrame on Python-andmestruktuur, mida saab kasutada tabelite loomiseks ja muutmiseks. Selgitame andmestruktuuri ülesehitust ning selle olulisemaid meetodeid ja omadusi.

## Kuidas Pandas DataFrame töötab?

Pandas DataFrames on Python Pandas raamatukogu tuum ja võimaldab tõhusat ja paindlikku andmete analüüsi Pythonis. Pandas DataFrame on **kahemõõtmeline tabeliline andmestruktuur**, millel on **nummerdatud read ja märgistatud veerud**. See struktuur võimaldab andmeid organiseerida kergesti mõistetavas ja manipuleeritavas vormis, sarnaselt tabelarvutusprogrammide Excel või [LibreOffice-ga](https://www.libreoffice.org/ "LibreOffice website"). Iga DataFrame’i veerg võib sisaldada erinevaid [Python andmetüüpe](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/pythoni-andmetueuebid/), mis tähendab, et DataFrame võib salvestada **heterogeenseid andmeid** – näiteks numbrilisi väärtusi, stringe ja boolesid ühes tabelis.

Tip Pandas DataFrames põhinevad NumPy massiividel, mis võimaldavad andmete tõhusat töötlemist ja väärtuste arvutamist. Pandas DataFrames erinevad [NumPy](https://numpy.org/ "NumPy website") andmestruktuuridest mõnes mõttes, näiteks oma heterogeensuse ja dimensioonide arvu poolest. Seetõttu sobivad NumPy andmestruktuurid suure hulga numbriliste väärtuste töötlemiseks ja Pandas andmestruktuurid sobivad paremini üldiseks andmete töötlemiseks.

### Pandas DataFrames’i struktuur

DataFrame koosneb kolmest põhikomponendist: andmed, ridade indeksid ja veergude nimed. Ridade indeks (või lihtsalt indeks) identifitseerib iga rea üheselt. Vaikimisi on read indekseeritud numbriliste väärtustega, kuid need võib asendada stringidega. Oluline on märkida, et Pandas DataFrames on **nullindekseeritud**, mis tähendab, et indeksid algavad 0-st.

[![Image: The structure of a Pandas DataFrame](https://www.ionos.com/et-ee/digitalguide/fileadmin/_processed_/e/9/csm_pandas-dataframe-structure_0ab3bff2f5.webp "The structure of a Pandas DataFrame")](https://www.ionos.com/et-ee/digitalguide/fileadmin/DigitalGuide/Schaubilder/pandas-dataframe-structure.png) Pandas DataFrames have a tabular structure and are therefore very similar to Excel or SQL tables.  Note Kuigi Pandas DataFrames on ühed populaarsemad ja kasulikumad Python-andmestruktuurid, 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. Alternatiivina võite kasutada `import pandas as pd`, kui soovite viidata moodulile lühema nimega (sel juhul „pd”).

## Pandas DataFrames’i kasutamine

Pandas DataFrames pakub mitmesuguseid tehnikaid ja meetodeid andmete tõhusaks töötlemiseks, analüüsimiseks ja visualiseerimiseks. Allpool tutvustatakse Pandas DataFrames’i abil andmete töötlemise põhimõtteid ja meetodeid.

### Kuidas luua Pandas DataFrame

Kui olete soovitud andmed juba Python-nimekirja või Python-sõnastikku salvestanud, saate neist hõlpsasti luua DataFrame’i. Lihtsalt edastage olemasolev andmestruktuur DataFrame’i konstruktorile, kasutades `pandas.DataFrame([data])`. Kuidas Pandas teie andmeid tõlgendab, sõltub teie esitatud struktuurist. Näiteks saate Python-nimekirjast luua Pandas DataFrames järgmiselt:

```python
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
```

Nagu näete eespool toodud näites, saate lihtsate loenditega luua ainult **üheainsa, märgistamata veeruga** andmeraamistikke. Seetõttu on soovitatav luua andmeraamistikud **sõnastikest, mis sisaldavad loendeid**. Võtmed tõlgendatakse veerunimedena ja loendid seotud andmetena. Seda illustreerib järgmine näide:

```python
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
```

Selle meetodi abil saab DataFrame kohe soovitud formaadi ja pealkirjad. Kui aga ei soovi tugineda Pythoni sisseehitatud andmestruktuuridele, võib andmed laadida ka **välisest allikast**, näiteks CSV-failist või [SQL-andmebaasist](https://www.ionos.com/et-ee/digitalguide/server/oskusteave/mis-on-sql/). Selleks tuleb lihtsalt kutsuda välja sobiv Pandas-funktsioon:

```python
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)
```

Eespool toodud näite andmestikud `csv` ja `sql` sisaldavad nüüd kõiki andmeid andmestikust `data.csv` ja SQL-tabelist `table`. Välisallikast andmestiku loomisel saate määrata täiendavaid üksikasju, näiteks kas numbrilised indeksid tuleks andmestikku lisada või mitte. Lisateavet kahe funktsiooni täiendavate argumentide kohta leiate [Pandas DataFrame’i ametlikult dokumenteerimise lehelt](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html "Official Pandas DataFrame documentation page").

Tip SQL-tabelist Pandas DataFrame’i loomiseks peate kasutama Pandast koos Python SQL-mooduliga, näiteks *SQLAlchemy*. Looge valitud SQL-mooduli abil ühendus andmebaasiga ja edastage see `read_sql_query()`.

### Kuidas kuvada andmeid Pandas DataFrames’is

Pandas DataFrames’iga saate kuvada mitte ainult kogu tabeli, vaid ka üksikuid ridu ja veerge. Saate valida vaatamiseks konkreetsed read ja veerud. Järgmine näide illustreerib, kuidas kuvada üksikuid või mitut rida ja veergu:

```python
# 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']])
```

Näites viidatakse veerule, kasutades selle nime ühekordsete sulgudes, sarnaselt sellega, kuidas pääsete ligi väärtustele Python-sõnastikutes. Seevastu atribuuti `loc` kasutatakse viitamiseks ridadele. `loc` abil saate rakendada ka loogilisi tingimusi andmete filtreerimiseks. Järgmine koodiblokk näitab, kuidas väljastada ainult need read, kus väärtus „age” on suurem kui 30:

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

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:

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

### Kuidas korrata ridu Pandas DataFrames’iga

Pythonis andmeid töödeldes on sageli vaja läbi käia Pandas DataFrames’i read, et rakendada sama operatsiooni kõikidele andmetele. Pandas pakub selleks kahte meetodit: `itertuples()` ja `iterrows()`. Mõlemal meetodil on oma eelised ja puudused seoses **jõudluse ja kasutajasõbralikkusega**.

Meetod `iterrows()` tagastab DataFrame’i iga rea **indeksite ja seeriate tuplid**. Seeria on Pandas või NumPy andmestruktuur, mis sarnaneb Python’i loendiga, kuid pakub paremat jõudlust. Seeria üksikutele elementidele pääseb ligi **veeru nime** abil, mis lihtsustab andmete käitlemist.

Kuigi Pandas Series on tõhusamad kui Python-nimekirjad, kaasneb nendega siiski mõningane jõudluse lisakulu. Seetõttu on meetod `itertuples()` eriti soovitatav **väga suurte andmeraamistikute** puhul. Erinevalt meetodist `iterrows()` tagastab `itertuples()` **kogu rea, sealhulgas indeksid**, tuplite kujul, mis on jõudluselt paremad kui Series. Tuplite puhul saate üksikutele elementidele juurde pääseda punktnotatsiooni abil, sarnaselt objekti atribuutidele juurde pääsemisega.

Teine oluline erinevus seeria ja tuplite vahel on see, et **tuplid ei ole muutuvad**. Seega, kui soovite iteratsiooni läbi viia DataFrame’i kasutades `itertuples()` ja muuta väärtusi, peate viitama DataFrame’ile atribuudiga `at` ja tupli indeksiga. See atribuut toimib väga sarnaselt `loc`. Järgmine näide illustreerib erinevusi `iterrows()` ja `itertuples()` vahel:

```python
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
```


This is a markdown version of: [https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/python-pandas-dataframe/](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/python-pandas-dataframe/) for AI/LLM consumption.