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




Top comments (0)