python advanced 03-multiindex
TRANSCRIPT
Corso Data Journalist gen-mar 2017
PYTHON ADVANCED
DataFrame con multiIndex
Classe Multindex
ITA FRA 2011
2012
2013
DEU 2011
2012
2013
USA CHN 2011
2012
XER MER YEAR
(ITA,FRA,2011)
(ITA,FRA,2012)
(ITA,FRA,2013)
(ITA,DEU,2011)
(ITA,DEU,2012)
(ITA,DEU,2013)
(USA,CHN,2011)
(USA,CHN,2012)
[
]
Un oggetto Multindex può essere pensato come una lista di tuple, ciascuna che identifica una riga In pandas viene gestito
attraverso un oggetto composto fatto di:
una lista di names
una lista di levels(lista degli identificativi associati ai vari names)
una lista di labels(lista delle posizioni assuntedagli elementi dei levels)
Classe MultiIndex: metodi di inizializzazione
Tramite metodo della classe MultiIndex
pandas.MultiIndex.from_tuples ( lista di tuple)
pandas.MultiIndex.from_array ( lista di array)
pandas.MultiIndex.from_product ( lista degli insiemi (liste) di cui viene calcolato il prodotto cartesiano)
[‘a’,’b’]
[1, 2]
(‘a’,1)(‘a’,2)(‘b’,1)
ITA FRA 2011
ITA FRA 2012
ITA FRA 2013
ITA DEU 2011
ITA DEU 2012
ITA DEU 2013
USA CHN 2011
USA CHN 2012
(‘b’,2)
Tramite metodo .set_index della classe DataFrame
XER MER YEAR
ITA FRA 2011
2012
2013
DEU 2011
2012
2013
USA CHN 2011
2012
XER MER YEAR
DF.set_index([‘XER’,MER’,’YEAR])
DF piatto e DF con multiIndexDF piatto
ITA FRA 2011 765 234
ITA FRA 2012 743 256
ITA FRA 2013 845 342
ITA DEU 2011 829 333
ITA DEU 2012 876 321
ITA DEU 2013 982 434
USA CHN 2011 895 377
USA CHN 2012 895 354
XER MER YEAR V Q
ITA FRA 2011
2012
2013
DEU 2011
2012
2013
USA CHN 2011
2012
XER MER YEAR
set_index(...)
765 234
743 256
845 342
829 333
876 321
982 434
895 377
895 354
V Q
DF.columns [‘XER’,’MER’,’YEAR’,’V’,’Q’] DF.columns [‘’V’,’Q’]
DF con MultiIndex
Molti metodi della classe DataFrame operano sulle colonne
DataFrame con multiIndex: estrattore .loc
ITA FRA 2011
2012
2013
DEU 2011
2012
2013
USA CHN 2011
2012
XER MER YEAR
.loc [ selezione righe , selezione colonne ]
.loc[idx[:, :, [‘2010,‘2011‘,’2012’], ]
ITA FRA 2011
2012
DEU 2011
2012
USA CHN 2011
2012
XER MER YEAR
vuoto per selezionare tutte le colonne
tramite operatore idx
from pandas import IndexSlice ad idx .sortlevel(inplace=True)
DataFrame con multiIndex: estrattore .loc
ITA FRA 2011
2012
2013
DEU 2011
2012
2013
USA CHN 2011
2012
XER MER YEAR
.loc[‘ITA’,’FRA’]
.loc [ selezione righe , selezione colonne ]
.loc[(‘ITA’,’FRA’, slice(None)) , ]
.loc[idx[‘ITA’,’FRA’, : ] , ]
2011
2012
2013
YEAR
ITA FRA 2011
2011
2011
XER MER YEAR
.loc(axis=0) [‘ITA’,’FRA’,:]
.loc(axis=0)[‘ITA’,’FRA’]
solo righe. Non necessaria virgola finale
DataFrame con multiIndex: estrattore .loc
ITA FRA 2011
2012
2013
DEU 2011
2012
2013
USA CHN 2011
2012
XER MER YEAR.loc[‘ITA’,’FRA’]
.loc [ selezione righe , selezione colonne ]
.loc[(‘ITA’,’FRA’, slice(None)),]
from pandas import IndexSlice ad idx
.loc[idx[‘ITA’,’FRA’,:],]
ITA FRA 2011
2012
2013
XER MER YEAR
.loc[(slice(None), slice(None), ‘2011‘),]
.loc[idx[:, :, ‘2011‘],] ITA FRA 2011
DEU 2011
USA CHN 2011
XER MER YEAR
.loc(axis=0)[idx[‘ITA’,’FRA’,:]]
.sortlevel(inplace=True)
.loc(axis=0)[idx[:, :, ‘2011‘]]
.loc(axis=0)[‘ITA’,’FRA’,:]
.loc(axis=0)[:, :, ‘2011‘]
.loc(axis=0)[slice(None),Slice(None)‘2011‘]
LEZIONE 1..www.fordatascientist.org
E00-PyDataH10-Pandas-MultiIndex1.ipynb
DataFrame con multiIndex: estrattore .loc
.loc [ selezione righe , selezione colonne ]
DFI.loc [ idx[:, ['ITA','FRA'] , ['KOR','GBR'] ], [ 'Q', 'X' ] ].isin() .isin()
.loc(axis=0) [ idx ['2010':'2012', 'ITA', : , 'HH':'HM'] ]periodo dal 2010
al 2012esportatore
Italiatutti i
partnerfasce alte di prezzo
.loc(axis=0) [ idx['2002' : '2006' : 2, 'DEU' , 'USA' ] ]passo
DataFrame con multiIndex: metodi
.index.get_level_values('XER') lista valori di XER.index.lexsort_depth livello ordinamento
.sortlevel(inplace=True) sort
.unstack(level=....)
.swaplevel(0, 1 , axis=0 ) inverte livello 0 e 1
da indice riga a indice colonna.stack(level=....) da indice colonna a indice riga
LEZIONE 1..www.fordatascientist.org
E00-PyDataH12-Pandas-MultiIndex2
Dataframe: metodi
pandas.merge (DF1, DF2, left_on=....right_on=...)
DataFrame non indicizzati DataFrame indicizzati
pandas.merge (DF1, DF2, left_index=True right.index=True)
.groupby ( [‘VAR2’, ‘VAR3’] ) .groupby ( level=[‘VAR2’, ‘VAR3’] )