Pandas je Python biblioteka za rad sa tabelarnim podacima. To je popularan i zgodan alat za manipulaciju podacima. Posebno je korisno kada pripremate podatke za obuku modela mašinskog učenja.
Ako koristite Anacond-u, već imate unapred instaliranu Pandu. Ako ne, instalirajte ga sa pip:
pip install pandas
Kada smo instalirali Pandas biblioteku možemo je uvesti.
Kao i u radu sa drugim bibliotelama, sledimo konvenciju i koristimo pseudonim pd, umesto punog imena.
import pandas as pd
Prvo ćemo istražiti dve najvažnije pandas strukture podataka:
Series (niz podataka)
DataFrame (okvir sa podacima)
Series predstavlja jednodimenzionalni objekat koji može da skladišti vrednosti bilo kojeg tipa, slično koloni u tabeli. Svakoj vrednosti će biti dodeljen indeks od 0 do n, gdje n predstavlja za 1 manju vrednost od broja koji predstavlja veličinu od Series.
import pandas as pd
myS = pd.Series(['audi','bmw','honda','mazda','nissan'])
print(myS)
Vrednostima pristupamo preko indeksa na sledeći način.
myS[1]
myS[0:3]
Indekse možemo i sami kreirati.
myS.index = ['Red 1', 'Red 2', 'Red 3', 'Red 4','Red 5' ]
myS
myS['Red 3']
Takođe možemo prilikom kreiranja objekata tipa Series da zadamo indekse.
import pandas as pd
marka_auta=['audi','bmw','honda','mazda','nissan']
indeksi=['Red 1', 'Red 2', 'Red 3', 'Red 4', 'Red 5']
myS1=pd.Series(marka_auta, index=indeksi)
# myS1=pd.Series(['audi','bmw','honda','mazda','nissan'], index=['Red 1', 'Red 2', 'Red 3', 'Red 4', 'Red 5'])
myS1
Ako imamo podatke sačuvane u Python rečniku, pomoću njih takođe možemo kreirati objekat tipa Series.
podaci={'Red 1':'audi', 'Red 2':'bmw', 'Red 3':'honda', 'Red 4':'mazda', 'Red 5':'nissan'}
myS2=pd.Series(podaci)
myS2
import pandas as pd
kalorija = {'dan1': 420, 'dan2': 380, 'dan3': 390}
# ključevi rečnika postaju indeksi
sCal = pd.Series(kalorija)
sCal
import pandas as pd
kalorija = {'dan1': 420, 'dan2': 380, 'dan3': 390}
sCal= pd.Series(kalorija, index = ['dan1', 'dan2'])
sCal
DataFrame predstavlja tabelarnu dvodimenzionalnu strukturu podataka sa kolonama i redovima sa potencijalno različitim tipovima podataka. Sastoji se od podataka, indeksa i kolona. Takođe se može posmatrati i kao grupa Series objekata koji dijele isti indeks.
Kreiraćemo sada jedan objekat tipa DataFrame.
import pandas as pd
data = {
'gender':['Female','Male','Male','Male','Female'],
'height':[174,189,185,195,165],
'weight':[96,87,110,104,61],
'indexBMI':[4,2,4,3,2]
}
# učitava podatke u objekat DataFrame:
df_BMI = pd.DataFrame(data)
print(df_BMI)
import pandas as pd
data = {
'gender':['Female','Male','Male','Male','Female'],
'height':[174,189,185,195,165],
'weight':[96,87,110,104,61],
'indexBMI':[4,2,4,3,2]
}
# učitava podatke u objekat DataFrame:
df_BMI = pd.DataFrame(data, index=['person1','person2','person3','person4','person5'])
print(df_BMI)
print(df_BMI.index)
Jednostavan način za skladištenje velikih skupova podataka je korišćenje CSV datoteka (od engl. comma separated values). CSV datoteka je tekstualna datoteka u kojoj redovi odgovaraju redovima tabele, a podaci unutar istog reda su razdvojeni zarezima.
U sledećim primerima koristićemo CSV datoteku pod nazivom 'automobile_data.csv'.
Svi podaci za vežbe koje slede nalaze se u direktorijumu datasets jedan nivo iznad mesta gde se nalazi ova radna sveska.
Dve tačke navedene u putanji koja je prosleđena read_csv tumače se kao direktorijum neposredno iznad trenutnog.
import pandas as pd
df1 = pd.read_csv('../datasets/automobile_data.csv')
#print(df1.to_string())
df1
head - podrazumevano vraća prvih 5 redova DataFrame-a
tail - podrazumevano vraća poslednjih 5 redova
df1.head()
df1.head(7)
df1.tail(3)
type¶Upotrebom funkcije type možemo proveriti da li je objekat dfBMI zaista DataFrame
type(df1)
Da biste izabrali jednu kolonu iz DataFrame-a, prosledite ime jedne od kolona operatoru zagrada, []. Vraćeni objekat će biti Series (niz podataka). Metode head i tail kod Series funkcionišu isto kao i kod DataFrames-a.
marka = df1['make']
marka.head()
marka.tail(3)
Primer: Prikazati indexBMI iz date tabele grafikonom tako da imena osoba budu na horizontalnoj osi.
import pandas as pd
import matplotlib.pyplot as plt
data = {
'gender':['Female','Male','Male','Male','Female'],
'height':[174,189,185,195,165],
'weight':[96,87,110,104,61],
'indexBMI':[4,2,4,3,2]
}
# učitava podatke u objekat DataFrame:
df_BMI = pd.DataFrame(data, index=['person1','person2','person3','person4','person5'])
plt.bar(df_BMI.index, df_BMI['indexBMI'])
plt.title('BMI index')
plt.show()
Selektujte kolonu temperature, podatke iz navedene kolone dodelite promenljivoj sa imenom temp. Prikažite prvih 10 vrednosti iz pomenute kolone.
Odredi tip objekta temp.
Izaberite poslednja 2 reda df_weather DataFrame-a i dodelite ga promenljivoj df_last_2. Odredi tip objekta df_last_2.
Prikazati linijskim dijagramom prvih deset vrednosti iz kolone temperature.
import pandas as pd
film = pd.read_csv("https://raw.githubusercontent.com/tiki-paunovic/PyLadies_meetup/main/Day_3/IMDB-Movie-Data.csv")
film.head()
Pomoću naredbe read_html može se pročitati i tabela direktno iz HTML koda neke veb stranice.
US = pd.read_html("https://simple.wikipedia.org/wiki/List_of_U.S._states", header=0)[0]
US.head()