# Kao što smo već rekli reč je o više dimenzionom nizu, mada može biti i jednodimenzioni
# možemo ga dobiti na sledeće načine
from pandas import DataFrame
import numpy as np
# koristeći n-dimenzioni NumPy niz odnosno matricu
narray = np.random.randn(15).reshape(5,3) # generišemo 15 brojeva koji su normalno raspodeljeni
df1 = DataFrame(narray) # a potom od njih napravimo matricu dimezija 5x3
df1.columns = ['kolona 1', 'kolona 2', 'kolona 3'] # ovo je jedan od načina da se kolonama daju nazivi
print(df1)
# Takođe možemo "proviriti" kako izgledaju prvi elementi naredbom .head()
df1.head(3)
# Sada ćemo pomoću Python dictionary-ija napraviti jedan DataFrame.
# ovaj DataFrame će predstavljati spisak kupljenih namirnica.
# za svaku kupovinu beležićemo ime kupca, proizvod koji je kupio, jediničnu cenu tog proizvoda
# i količinu proizvoda koja je kupljena
kupovina_1 = {'ime':'Pera',
'proizvod': 'hleb',
'cena' : 50,
'kolicina': 1}
kupovina_2 = {'ime':'Zika',
'proizvod': 'mleko',
'cena' : 50,
'kolicina': 2}
kupovina_3 = {'ime':'Laza',
'proizvod': 'kafa',
'cena' : 200,
'kolicina': 3}
df2 = DataFrame([kupovina_1, kupovina_2, kupovina_3], columns = ['ime', 'proizvod', 'cena', 'kolicina'],
index = ['Pekara', 'Maxi', 'Maxi'])
print()
print(df2)
# df2 je jako zgodan primer da pikažemo rad sa DataFrame-om
# prvo ćemo ispisati tipove podataka koje smo koristili u df2
print('Tip strukture df2 je: ', type(df2))
# indekse DataFrame-a dobijamo na sedeći način : DataFrame_name.index
indeksi = df2.index
print(indeksi)
# vrednosti u DataFrame-u dobijamo na sedeći način: ime_DataFramea.values
print()
vrednosti = df2.values
print(vrednosti)
print('Vrednosti se smestaju u ndarray - ',type(vrednosti))
# Kako pristupiti elementima podatka tipa DataFrame?
# dobijanje konkretnog podatka iz DataFrame-a se može učiniti koristeći iloc i loc
# dakle to se čini naredbom ime_DataFramea.loc['naziv vrste']
df2.loc['Maxi']
# biće ispisane dve kolone pošto u df2 postoje dve kolone koje nose naziv Maxi
# ukoliko želimo da dobijemo sadržaj DataFrame-a koristeći indeks:
df2.iloc[1]
# dobijamo drugi red iz df2
# dobijamo sve vrednosti iz prvog reda df1
df1.iloc[0]
# primetimo da iloc prihvata strogo indekse u brojnoj vrednosti dok loc može da primi i indekse tipa 'str' i indekse
# tipa 'int' ukoliko su tako definisani
print(df2.iloc[2])
print('\n',df2.loc['Maxi']) # Ispisivaće se svi redovi koji su indeksirani kao 'Maxi', a u df2 postoje dva takva
# ukoliko želimo da vidimo samo imena ljudi koji su kupovali u Maxiju:
df2.loc['Maxi']['ime']
# međutim, pisanje koda na način da se često pojavljuje [], kao u prethodom primeru, nije dobra praksa i trebalo bi izbegavti
# alternativno možemo napisati na sledeći način
df2.loc[['Maxi'],['ime']]