DEV Community

Cover image for Python Pandas alapok

Python Pandas alapok

Ez a blogbejegyzés a Python egyik adatelemző könyvtáráról, a Pandasról szól. A Pandas lehetővé teszi, hogy feldolgozz, tisztíts és statisztikailag elemezz adatokat. A Pandas elnevezés egyaránt utal a "Python Data Analysis" és a "Panel Data" kifejezésekre.

A Pandas adatszerkezetei

Series

A Pandas "series-ek" olyanok, mint oszlopok egy táblázatban. Tudunk Python listákból, és szótárakból (dictionary) generálni ilyen adatszerkezeteket. Ahhoz, hogy használjuk a Pandas funkcióit, először importálnunk kell a könyvtárat. Az "as pd" kifejezés egy aliast hoz létre, hogy ne "pandas", hanem egy rövidebb "pd" elnevezéssel tudd elérni a Pandas metódusait.

import pandas as pd

my_list = [1,2,3]
my_series = pd.Series(my_list)
print(my_series)
Enter fullscreen mode Exit fullscreen mode

A print-et követően nagyjából az alábbi kép fog minket fogadni. Az első oszlop értékei valójában indexek, amikkel hivatkozni lehet az egyes sorokra. Az indexelés lényegében sorszámozás nullától kezdve. Tehát, a nulladik indexen az egyes szám látható. Ez logikus is a listánk alapján. A dtype: int64 az adattípust jelöli, ami jelen esetben 64 bites egész szám. Itt minket nem a 64 bit, hanem sokkal inkább az egész szám érdekel. A bitek száma a lefedett intervallum nagyságát jelenti. 64 bites egészek esetében például a legmagasabb szám, amit tárolni tudunk ennyi: 9 223 372 036 854 775 807

Ha csak az első (tehát nulladik indexű elemmel akarunk foglalkozni), akkor erre a következőképpen tudunk hivatkozni:

my_list = [1,2,3]
my_series = pd.Series(my_list)
print(my_series[0]) #ez a szám jelenik meg: 1
print(my_series.get(0)) #szintén az egyes jelenik meg
print(my_series.iloc[0]) #újfent az egyes szám jelenik meg
Enter fullscreen mode Exit fullscreen mode

A python szótárak (dictionary) lényegében kulcs-értékpárok. Úgy lehet elképzelni őket, mint listákat, ahol az indexek nem számok, hanem karakterláncok.

student_scores = {
    "Anna": 88,
    "Bob": 92,
    "Adam": 79,
    "Caroline": 95,
    "David": 84
}

#például így tudunk hivatkozni egy kulcsra
print(student_scores["Anna"])

#ez egy másik módszer
print(student_scores.get("Anna"))
Enter fullscreen mode Exit fullscreen mode

Ha ebből létrehozunk egy Series-t, akkor az egész számú indexelés helyett címkézett indexelést kapunk. A címkék felfoghatók egyfajta kulcsokként is.

student_scores = {
    "Anna": 88,
    "Bob": 92,
    "Adam": 79,
    "Caroline": 95,
    "David": 84
}

student_score_series = pd.Series(student_scores)
print(student_score_series)
Enter fullscreen mode Exit fullscreen mode

Az iloc nullától számolt sorszám alapú indexelést használ, és nem az egyes sorok címkéit függetlenül attól, hogy beállítottunk-e címkéket, vagy sem.

student_scores = {
    "Anna": 88,
    "Bob": 92,
    "Adam": 79,
    "Caroline": 95,
    "David": 84
}

student_score_series = pd.Series(student_scores)
print(student_score_series["Anna"])
print(student_score_series.get("Bob"))
print(student_score_series.iloc[0])
Enter fullscreen mode Exit fullscreen mode

Hozzárendelhetünk címkéket is listákhoz az alábbi módon. Ebben az esetben ugyanazt kapjuk eredményül, mint a korábbi szótáras példánál.

student_scores = [88,92,79,95,84]

student_score_series = pd.Series(
    student_scores, 
    index=["Anna", "Bob", "Adam", "Caroline", "David"]
)
Enter fullscreen mode Exit fullscreen mode

DataFrame

A DataFrame-et úgy lehet elképzelni, mint egy táblázatot. Itt az egyes szótár sorok oszlopokká válnak, és az oszlopok fejlécei a "Name", "Age" és "Score" címkék lesznek. Amint látható, az oszlopok értékeit a szótár soraiban lévő listák adják. Így az első sor értékei a következők:
"Anna", 21, 88

student_data = {
    "Name": ["Anna", "Bob", "Caroline", "David", "Emma"],
    "Age": [21, 22, 20, 23, 21],
    "Score": [88, 92, 95, 84, 90]
}

students_age_and_score = pd.DataFrame(student_data)

print(students_age_and_score)
Enter fullscreen mode Exit fullscreen mode

Természetesen a DataFrame-eknek is létrehozhatunk címkéket a sorok számára. Figyeljük meg, hogy a sorokhoz tartozó címkék maguk a nevek lesznek!

student_data = {
    "Age": [21, 22, 20, 23, 21],
    "Score": [88, 92, 95, 84, 90]
}

students_age_and_score = pd.DataFrame(student_data, index=["Anna", "Bob", "Caroline", "David", "Emma"])

print(students_age_and_score)
Enter fullscreen mode Exit fullscreen mode

Ami az egyes adatok címzését jelenti, használhatjuk az oszlopok címkéit az alábbi módokon. Nyilván itt az "Age" oszlopot kapjuk vissza, tehát így címzünk név alapján oszlopot.

print(students_age_and_score["Age"])
print(students_age_and_score.get("Age"))
Enter fullscreen mode Exit fullscreen mode

A loc a location rövdidítése. A loc és az iloc segítségével elsősorban sorokat címezhetünk, de a későbbiekben mutatok példát arra is, hogyan szűkítsünk oszlopokra velük. A loc és az iloc között az a differencia, hogy az iloc úgynevezett integer location, tehát indexeket használ. Példának okáért Bob indexe az egyes.

print(students_age_and_score.loc["Bob"])
print(students_age_and_score.iloc[1])
Enter fullscreen mode Exit fullscreen mode

A következő megoldások az első és a második sort címzik.

print(students_age_and_score.iloc[[0,1]])
print(students_age_and_score.loc[["Anna", "Bob"]])
Enter fullscreen mode Exit fullscreen mode

Az alábbi példában Anna és Bob score-ját kapjuk vissza, tehát a loc első paramétere a sorokat, a második az oszlopokat jelöli. Az iloc-nál a "0:2" szintaxis furcsa lehet számodra. Ez annyit tesz, hogy a nullástól a kettes indexig úgy, hogy a kettes már nem számít bele. Ennyire egyszerű.

print(students_age_and_score.loc[["Anna", "Bob"], ["Score"]])
print(students_age_and_score.iloc[0:2, [1]])
Enter fullscreen mode Exit fullscreen mode

A következő részben szöveges állományokat fogunk beolvasni, és alapvető statisztikai mutatókat kalkulálni, mint a szórás és a korreláció.

Top comments (0)