# Kaip naudoti Pandas DataFrame, kad greitai tvarkytumėte lenteles Python kalba

Pandas DataFrame yra Python duomenų struktūra, kuri gali būti naudojama lentelių kūrimui ir tvarkymui. Paaiškiname duomenų struktūros sandarą ir svarbiausius jos metodus bei savybes.

## Kaip veikia „Pandas DataFrame“?

Pandas DataFrames yra Python Pandas bibliotekos pagrindas, leidžiantis efektyviai ir lanksčiai analizuoti duomenis Python kalba. Pandas DataFrame yra **dvimatė lentelinė duomenų struktūra** su **sunumeruotomis eilutėmis ir paženklintomis stulpeliais**. Ši struktūra leidžia duomenis organizuoti lengvai suprantama ir lengvai tvarkoma forma, panašiai kaip skaičiuoklės programose, pvz., Excel ar [LibreOffice](https://www.libreoffice.org/ "LibreOffice website"). Kiekviena DataFrame stulpelyje gali būti įvairių [Python duomenų tipų](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/python-duomenu-tipai/), o tai reiškia, kad DataFrame gali saugoti **nevienalytinius duomenis**, pavyzdžiui, skaitmenines vertes, eilutes ir boolinius duomenis vienoje lentelėje.

Tip Pandas DataFrames yra pagrįsti NumPy masyvais, kurie leidžia efektyviai tvarkyti duomenis ir apskaičiuoti vertes. Tačiau Panda DataFrames kai kuriais aspektais skiriasi nuo [NumPy](https://numpy.org/ "NumPy website") duomenų struktūrų, pavyzdžiui, savo heterogeniškumu ir matmenų skaičiumi. Dėl šios priežasties NumPy duomenų struktūros yra tinkamos dideliems kiekiams skaitmeninių verčių tvarkyti, o Panda duomenų struktūros yra labiau tinkamos bendram duomenų tvarkymui.

### Pandas duomenų rėmelių struktūra

DataFrame turi tris pagrindines sudedamąsias dalis: duomenis, eilučių indeksus ir stulpelių pavadinimus. Eilučių indeksas (arba tiesiog indeksas) unikaliai identifikuoja kiekvieną eilutę. Pagal numatytuosius nustatymus eilutės indeksuojamos skaitmeninėmis reikšmėmis, tačiau jas galima pakeisti eilutėmis. Svarbu atkreipti dėmesį, kad Pandas DataFrames indeksuojami **nuo nulio**, tai reiškia, kad indeksai prasideda nuo 0.

[![Image: The structure of a Pandas DataFrame](https://www.ionos.com/lt-lt/digitalguide/fileadmin/_processed_/e/9/csm_pandas-dataframe-structure_0ab3bff2f5.webp "The structure of a Pandas DataFrame")](https://www.ionos.com/lt-lt/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 Nors Pandas DataFrames yra vienos iš populiariausių ir naudingiausių Python duomenų struktūrų, jos nėra bazinės kalbos dalis ir turi būti **importuojamos 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į trumpesniu pavadinimu (šiuo atveju „pd“).

## Pandas DataFrames naudojimas

Pandas DataFrames teikia įvairias technikas ir metodus, skirtus efektyviam duomenų apdorojimui, analizei ir vizualizavimui. Toliau pateikiama informacija apie pagrindines sąvokas ir metodus, skirtus duomenų tvarkymui naudojant Pandas DataFrames.

### Kaip sukurti Pandas duomenų rėmelį

Jei jau išsaugojote norimus duomenis Python sąraše arba Python žodyne, galite lengvai sukurti DataFrame iš jų. Tiesiog perduokite esamą duomenų struktūrą DataFrame konstruktoriui naudodami `pandas.DataFrame([data])`. Kaip Pandas interpretuos jūsų duomenis, priklausys nuo jūsų pateiktos struktūros. Pavyzdžiui, Pandas DataFrames galite sukurti iš Python sąrašo taip:

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

Kaip matyti iš pateikto pavyzdžio, naudojant paprastus sąrašus galima kurti tik **vienos, nepažymėtos stulpelio** DataFrames. Dėl šios priežasties rekomenduojama kurti DataFrames iš **žodynų, kuriuose yra sąrašai**. Raktai interpretuojami kaip stulpelių pavadinimai, o sąrašai – kaip susiję duomenys. Tai iliustruoja šis pavyzdys:

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

Naudojant šį metodą, DataFrame iš karto gauna norimą formatą ir norimas antraštes. Tačiau, jei nenorite pasikliauti įdiegtomis Python duomenų struktūromis, taip pat galite įkelti duomenis **iš išorinio šaltinio**, pvz., CSV failo ar [SQL](https://www.ionos.com/lt-lt/digitalguide/serveris/zinios/kas-yra-sql/) duomenų bazės. Tiesiog iškvieskite atitinkamą Pandas funkciją:

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

Pateiktame 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 papildomus duomenis, pavyzdžiui, ar skaitmeniniai indeksai turi būti įtraukti į duomenų rėmelį, ar ne. Daugiau informacijos apie papildomus dviejų funkcijų argumentus rasite [oficialioje „Pandas DataFrame“ dokumentacijos puslapyje](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html "Official Pandas DataFrame documentation page").

Tip Norėdami sukurti Pandas DataFrame iš SQL lentelės, turite naudoti Pandas kartu su Python SQL moduliu, pvz., *SQLAlchemy*. Nustatykite ryšį su duomenų baze naudodami pasirinktą SQL modulį ir perduokite jį į `read_sql_query()`.

### Kaip rodyti duomenis Pandas DataFrames

Naudodami „Pandas DataFrames“, galite rodyti ne tik visą lentelę, bet ir atskiras eilutes bei stulpelius. Galite pasirinkti konkrečias eilutes ir stulpelius, kuriuos norite peržiūrėti. Toliau pateiktame pavyzdyje parodyta, kaip rodyti atskiras arba kelias eilutes ir stulpelius:

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

Pavyzdyje nuoroda į stulpelį daroma naudojant jo pavadinimą viengubose skliaustuose, panašiai kaip Python žodynuose prieinama prie verčių. Tuo tarpu `loc` atributas naudojamas nuorodai į eilutes. Naudodami `loc` taip pat galite taikyti logines sąlygas duomenų filtravimui. Toliau pateiktas kodas parodo, kaip išvesti tik tas eilutes, kuriose „amžiaus“ vertė yra didesnė nei 30:

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

Tačiau taip pat galite naudoti `iloc` atributą, kad atrinktumėte eilutes ir stulpelius **pagal jų padėtį duomenų rėmelio (DataFrame) struktūroje**. Pavyzdžiui, galite parodyti langelį, esantį trečioje eilutėje ir ketvirtame stulpelyje:

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

### Kaip kartoti eilutes naudojant Pandas DataFrames

Apdorojant duomenis Python kalba, dažnai reikia kartoti Pandas DataFrames eilučių ciklą, kad ta pati operacija būtų taikoma visiems duomenims. Pandas šiam tikslui siūlo du metodus: `itertuples()` ir `iterrows()`. Kiekvienas 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 pavadinimą**, o tai supaprastina duomenų tvarkymą.

Nors „Pandas“ serijos yra efektyvesnės nei „Python“ sąrašai, jos vis tiek turi tam tikrą našumo praradimą. Todėl `itertuples()` metodas ypač rekomenduojamas **labai dideliems „DataFrames**“. Skirtingai 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 pasiekiate 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 iliustruoja skirtumus tarp `iterrows()` ir `itertuples()`:

```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/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/python-pandas-duomenu-remelis/](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/python-pandas-duomenu-remelis/) for AI/LLM consumption.