A Pandas DataFrame egy Python adatstruktúra, amely táblázatok létrehozására és szerkesztésére használható. Ismertetjük az adatstruktúra felépítését, valamint legfontosabb módszereit és tulajdonságait.

Hogyan működik a Pandas DataFrame?

A Pandas DataFrames a Python Pandas könyvtár magját képezi, és hatékony, rugalmas adatelemzést tesz lehetővé Pythonban. A Pandas DataFrame egy kétdimenziós táblázatos adatstruktúra, számozott sorokkal és címkézett oszlopokkal. Ez a struktúra lehetővé teszi az adatok könnyen érthető és kezelhető formában történő szervezését, hasonlóan az Excel vagy a LibreOffice táblázatkezelő programokhoz. A DataFrame minden oszlopa különböző Python adattípusokat tartalmazhat, ami azt jelenti, hogy a DataFrame heterogén adatokat tárolhat – például numerikus értékeket, karakterláncokat és logikai értékeket egyetlen táblázatban.

Tipp

A Pandas DataFrames NumPy tömbökön alapul, amelyek lehetővé teszik az adatok hatékony kezelését és az értékek kiszámítását. A Panda DataFrames azonban bizonyos szempontból eltér a NumPy adatstruktúráktól, például heterogenitásuk és dimenzióik száma tekintetében. Ezért a NumPy adatstruktúrák hatalmas mennyiségű numerikus érték manipulálására alkalmasak, míg a Panda adatstruktúrák inkább általános adatkezelésre alkalmasak.

A Pandas DataFrames felépítése

A DataFrame három fő összetevőből áll: az adatokból, a sorindexekből és az oszlopnevekből. A sorindex (vagy egyszerűen index) egyedi módon azonosítja az egyes sorokat. Alapértelmezés szerint a sorok numerikus értékekkel vannak indexelve, de ezeket karakterláncokkal is helyettesítheti. Fontos megjegyezni, hogy a Pandas DataFrames nullával indexelt, vagyis az indexek 0-tól kezdődnek.

Kép: The structure of a Pandas DataFrame
Pandas DataFrames have a tabular structure and are therefore very similar to Excel or SQL tables.
Megjegyzés

Bár a Pandas DataFrames a legnépszerűbb és leghasznosabb Python adatstruktúrák közé tartozik, nem része az alapnyelvnek, ezért külön kell importálni. Ezt a fájl elején található import pandas vagy from pandas import DataFrame sorban lehet megtenni. Alternatív megoldásként import pandas as pd is használhatja, ha rövidebb névvel (ebben az esetben „pd”) szeretne hivatkozni a modulra.

Pandas DataFrames használata

A Pandas DataFrames különböző technikákat és módszereket kínál a hatékony adatfeldolgozáshoz, elemzéshez és vizualizáláshoz. Az alábbiakban megismerkedhet a Pandas DataFrames használatával kapcsolatos legfontosabb fogalmakkal és módszerekkel.

Hogyan lehet létrehozni egy Pandas DataFrame-et?

Ha már elmentette a kívánt adatokat egy Python listába vagy Python szótárba, akkor könnyen létrehozhat belőle egy DataFrame-et. Egyszerűen adja át a meglévő adatstruktúrát a DataFrame konstruktornak pandas.DataFrame([data]) segítségével. A Pandas az Ön által megadott struktúrától függően értelmezi az adatokat. Például a következőképpen hozhat létre Pandas DataFrame-eket egy Python listából:

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

Amint a fenti példában látható, egyszerű listákkal csak egyetlen, címkézetlen oszlopot tartalmazó DataFrame-eket lehet létrehozni. Ezért ajánlott olyan szótárakból DataFrame-eket létrehozni, amelyek listákat tartalmaznak. A kulcsok oszlopnevekként, a listák pedig a hozzájuk tartozó adatokként értelmezhetők. Ezt a következő példa szemlélteti:

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

Ezzel a módszerrel a DataFrame azonnal megkapja a kívánt formátumot és a kívánt fejlécet. Ha azonban nem szeretne a beépített Python adatstruktúrákra támaszkodni, akkor az adatokat külső forrásból, például CSV fájlból vagy SQL adatbázisból is betöltheti. Ehhez egyszerűen hívja meg a megfelelő Pandas függvényt:

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

A fenti példában a DataFrames csv és sql most már a data.csv és az SQL táblázat table összes adatát tartalmazza. Ha külső forrásból hoz létre DataFrame-et, megadhat további részleteket, például hogy a numerikus indexeket be kell-e vonni a DataFrame-be vagy sem. A két függvény további argumentumairól bővebben a Pandas DataFrame hivatalos dokumentációs oldalán olvashat.

Tipp

Ahhoz, hogy SQL táblából Pandas DataFrame-et hozzon létre, a Pandas-t egy Python SQL modullal, például az SQLAlchemy-vel együtt kell használnia. A választott SQL modullal hozzon létre kapcsolatot az adatbázissal, és adja át azt read_sql_query().

Adatok megjelenítése Pandas DataFrames-ben

A Pandas DataFrames segítségével nemcsak a teljes táblázatot, hanem az egyes sorokat és oszlopokat is megjelenítheti. Kiválaszthatja a megtekinteni kívánt sorokat és oszlopokat. Az alábbi példa bemutatja, hogyan jelenítheti meg az egyes vagy több sort és oszlopot:

# 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

A példában az oszlopra való hivatkozás úgy történik, hogy a nevét egyszerű zárójelek között használjuk, hasonlóan ahhoz, ahogy a Python szótárakban hozzáférünk az értékekhez. Ezzel szemben a loc attribútumot a sorokra való hivatkozáshoz használjuk. loc segítségével logikai feltételeket is alkalmazhatunk az adatok szűrésére. A következő kódblokk bemutatja, hogyan lehet csak azokat a sorokat kinyomtatni, ahol az „age” értéke nagyobb, mint 30:

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

Azonban a iloc attribútummal a DataFrame-ben elfoglalt pozíciójuk alapján is kiválaszthat sorokat és oszlopokat. Például megjelenítheti a harmadik sorban és a negyedik oszlopban található cellát:

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

Hogyan lehet sorokat iterálni Pandas DataFrames segítségével?

A Pythonban történő adatfeldolgozás során gyakran szükséges a Pandas DataFrames sorainak átfutása, hogy ugyanazt a műveletet alkalmazzuk az összes adatra. A Pandas két módszert kínál erre a célra: itertuples() és iterrows(). Mindkét módszernek megvannak a maga előnyei és hátrányai a teljesítmény és a felhasználóbarát jelleg tekintetében.

A iterrows() metódus a DataFrame minden sorához egy index és Series tuple-t ad vissza. A Series egy Pandas vagy NumPy adatstruktúra, amely hasonló a Python listához, de jobb teljesítményt nyújt. A Series egyes elemeihez az oszlopnévvel lehet hozzáférni, ami egyszerűsíti az adatok kezelését.

Bár a Pandas sorozatok hatékonyabbak, mint a Python listák, mégis némi teljesítménybeli terheléssel járnak. Ezért a itertuples() metódus különösen ajánlott nagyon nagy DataFrame-ek esetén. iterrows() ellentétben itertuples() az egész sort, beleértve az indexet is, tuple-ként adja vissza, amelyek teljesítményükben jobbak, mint a sorozatok. A tuple-okkal pontjelöléssel lehet hozzáférni az egyes elemekhez, hasonlóan az objektumok attribútumaihoz való hozzáféréshez.

A sorozatok és a tuplák közötti másik fontos különbség, hogy a tuplák nem módosíthatóak. Tehát ha itertuples() segítségével szeretné végigfutni a DataFrame-et és megváltoztatni az értékeket, akkor a DataFrame-re a at attribútummal és a tupla indexével kell hivatkozni. Ez az attribútum nagyon hasonlóan működik, mint loc. A következő példa szemlélteti a iterrows() és itertuples() közötti különbségeket:

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
Ugrás a főmenübe