VOOZH about

URL: https://dev.to/kovoliver/python-pandas-alapok-5e4o

⇱ Python Pandas alapok - DEV Community


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)

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

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

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)

👁

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

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"]
)

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)

👁

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)

👁

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

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

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"]])

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

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ó.