Pandas DataFrame ir Python datu struktūra, ko var izmantot, lai izveidotu un ap­strā­dā­tu tabulas. Mēs iz­skaid­ro­jam datu struk­tū­ras uzbūvi un tās sva­rī­gā­kās metodes un īpašības.

Kā darbojas Pandas DataFrame?

Pandas Da­taF­ra­mes ir Python Pandas bib­lio­tē­kas pamatā un nodrošina efektīvu un elastīgu datu analīzi Python. Pandas DataFrame ir divdi­men­sio­nā­la tabulu datu struktūra ar numurētām rindām un marķētām kolonnām. Šī struktūra ļauj organizēt datus viegli saprotamā un ap­strā­dā­ja­mā formā, līdzīgi kā iz­klājla­pu prog­ram­mās, piemēram, Excel vai Lib­reOffi­ce. Katra DataFrame kolonna var saturēt dažādus Python datu tipus, kas nozīmē, ka DataFrame var uzglabāt he­te­ro­gē­nus datus, piemēram, skait­lis­kas vērtības, virknes un booleanu vērtības vienā tabulā.

Tip

Pandas Da­taF­ra­mes balstās uz NumPy masīviem, kas ļauj efektīvi apstrādāt datus un aprēķināt vērtības. Tomēr Panda Da­taF­ra­mes dažos aspektos atšķiras no NumPy datu struk­tū­rām, piemēram, to he­te­ro­ge­ni­tā­tes un dimensiju skaita ziņā. Tāpēc NumPy datu struk­tū­ras ir pie­mē­ro­tas lielu skait­lis­ko vērtību apstrādei, bet Panda datu struk­tū­ras ir pie­mē­ro­tā­kas vis­pā­rē­jai datu apstrādei.

Pandas Da­taF­ra­mes struktūra

DataFrame sastāv no trim gal­ve­na­jām sa­stāv­da­ļām: datiem, rindu indeksiem un kolonnu no­sau­ku­miem. Rindu indekss (vai vienkārši indekss) unikāli iden­ti­fi­cē katru rindu. Pēc no­klu­sē­ju­ma rindas tiek in­dek­sē­tas ar skait­lis­kām vērtībām, bet tās var aizstāt ar virknēm. Ir svarīgi atzīmēt, ka Pandas Da­taF­ra­mes ir indeksēti ar nulli, kas nozīmē, ka indeksi sākas no 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

Lai gan Pandas Da­taF­ra­mes ir viena no po­pu­lā­rā­ka­jām un no­de­rī­gā­ka­jām Python datu struk­tū­rām, tā nav daļa no pamata valodas un ir jāimportē atsevišķi. To var izdarīt, iz­man­to­jot import pandas vai from pandas import DataFrame rindu faila sākumā. Al­ter­na­tī­vi var izmantot import pandas as pd, ja vēlaties at­sauk­ties uz moduli ar īsāku nosaukumu (šajā gadījumā “pd”).

Pandas Da­taF­ra­mes iz­man­to­ša­na

Pandas Da­taF­ra­mes piedāvā dažādas metodes un pa­ņē­mie­nus efektīvai datu apstrādei, analīzei un vi­zua­li­zā­ci­jai. Tur­pi­nā­ju­mā ie­pa­zī­sie­ties ar gal­ve­na­jiem jē­dzie­niem un metodēm datu apstrādei, iz­man­to­jot Pandas Da­taF­ra­mes.

Kā izveidot Pandas DataFrame

Ja jau esat sa­gla­bā­jis vēlamos datus Python sarakstā vai Python vārdnīcā, no tiem var viegli izveidot DataFrame. Vienkārši nododiet esošo datu struktūru DataFrame kons­truk­to­ram, iz­man­to­jot pandas.DataFrame([data]). Tas, kā Pandas in­ter­pre­tē jūsu datus, būs atkarīgs no jūsu sniegtās struk­tū­ras. Piemēram, varat izveidot Pandas Da­taF­ra­mes no Python saraksta šādi:

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

Kā redzams ie­priek­šē­jā piemērā, iz­man­to­jot vien­kār­šus sarakstus, var izveidot tikai Da­taF­ra­mes ar vienu, nemarķētu kolonnu. Tāpēc ieteicams izveidot Da­taF­ra­mes no vārdnīcām, kas satur sarakstus. Atslēgas tiek in­ter­pre­tē­tas kā kolonnu nosaukumi, bet saraksti kā saistītie dati. To ilustrē šāds piemērs:

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

Iz­man­to­jot šo metodi, DataFrame uzreiz iegūst vēlamo formātu un vēlamās vir­srak­stus. Tomēr, ja ne­vē­la­ties paļauties uz ie­bū­vē­ta­jām Python datu struk­tū­rām, varat arī ielādēt datus no ārēja avota, piemēram, CSV faila vai SQL datu bāzes. Vienkārši izsauciet at­bil­sto­šo Pandas funkciju:

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

Iepriekš minētajā piemērā Da­taF­ra­mes csv un sql tagad satur visus datus no data.csv un SQL tabulas table. Iz­vei­do­jot DataFrame no ārēja avota, varat norādīt papildu in­for­mā­ci­ju, piemēram, vai skait­lis­kie indeksi ir jāiekļauj DataFrame vai nē. Uzziniet vairāk par abu funkciju papildu ar­gu­men­tiem ofi­ciā­la­jā Pandas DataFrame do­ku­men­tā­ci­jas lapā.

Tip

Lai izveidotu Pandas DataFrame no SQL tabulas, jums ir jāizmanto Pandas kopā ar Python SQL moduli, piemēram, SQLAlchemy. Iz­vei­do­jiet sa­vie­no­ju­mu ar datu bāzi, iz­man­to­jot izvēlēto SQL moduli, un nododiet to read_sql_query().

Kā attēlot datus Pandas Da­taF­ra­mes

Iz­man­to­jot Pandas Da­taF­ra­mes, varat parādīt ne tikai visu tabulu, bet arī at­se­viš­ķas rindas un kolonnas. Var iz­vē­lē­ties konkrētas rindas un kolonnas, kuras vēlaties apskatīt. Šajā piemērā ir parādīts, kā parādīt at­se­viš­ķas vai vairākas rindas un kolonnas:

# 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

Šajā piemērā atsauce uz kolonu tiek veikta, iz­man­to­jot tās nosaukumu vien­kār­šās iekavās, līdzīgi kā Python vārdnīcās piekļūst vērtībām. Savukārt atribūts loc tiek izmantots, lai atsauktos uz rindām. Ar loc varat arī piemērot loģiskos no­sa­cī­ju­mus, lai filtrētu datus. Šis koda bloks parāda, kā izvadīt tikai tās rindas, kurās vērtība „age” ir lielāka par 30:

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

Tomēr varat arī izmantot atribūtu iloc, lai atlasītu rindas un kolonnas atkarībā no to pozīcijas DataFrame. Piemēram, varat parādīt šūnu, kas atrodas trešajā rindā un ceturtajā kolonnā:

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

Kā atkārtot rindas ar Pandas Da­taF­ra­mes

Ap­strā­dā­jot datus Python, bieži ir ne­pie­cie­šams atkārtot Pandas Da­taF­ra­mes rindas, lai piemērotu vienu un to pašu darbību visiem datiem. Pandas šim nolūkam piedāvā divas metodes: itertuples() un iterrows(). Katrai metodei ir savas priekš­ro­cī­bas un trūkumi attiecībā uz veikt­spē­ju un lie­to­tā­jam drau­dzī­gu­mu.

iterrows() metode atgriež indeksa un sērijas kopu katrai rindai DataFrame. Sērija ir Pandas vai NumPy datu struktūra, kas līdzinās Python sarakstam, bet nodrošina labāku veikt­spē­ju. Jūs varat piekļūt at­se­viš­ķiem ele­men­tiem sērijā, iz­man­to­jot kolonnas nosaukumu, kas vienkāršo datu apstrādi.

Lai gan Pandas Series ir efek­tī­vā­kas nekā Python saraksti, tām joprojām ir zināma veikt­spē­jas slodze. Tāpēc metode itertuples() ir īpaši ieteicama ļoti lieliem Da­taF­ra­mes. Atšķirībā no iterrows(), itertuples() atgriež visu rindu, ieskaitot indeksu, kā tuples, kas ir efek­tī­vā­kas nekā Series. Ar tuples var piekļūt at­se­viš­ķiem ele­men­tiem, iz­man­to­jot punktu notāciju, līdzīgi kā pie­kļūs­tot objekta at­ri­bū­tiem.

Vēl viena svarīga atšķirība starp sērijām un tupliem ir tā, ka tupli nav maināmi. Tātad, ja vēlaties iterēt DataFrame, iz­man­to­jot itertuples(), un mainīt vērtības, jums ir jā­at­sau­cas uz DataFrame ar at atribūtu un tupla indeksu. Šis atribūts darbojas ļoti līdzīgi loc. Šis piemērs ilustrē at­šķi­rī­bas starp iterrows() un 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