per unpivattoare dei dati non table ma range
occorre inserire dei comandi che rendano il range più dinamico ma togliendo i valori vuoti
si usa la libreria Pandas
comandi .melt
sintassi
- semplice senza nomi colonne e con range delimitato
pd.melt(xl("intervallo", headers=True),id_vars=xl("cella con ID"))
- con nomi colonne e con range delimitato
pd.melt(xl("intervallo", headers=True),id_vars=xl("A1"),var_name="nome colonna divisione",value_name="nome colonna valori")
- con nomi e con range dinamico .dropna().reset_index(drop=True)
pd.melt(xl("intervallo", headers=True),id_vars=xl("A1"),var_name="nome colonna divisione",value_name="nome colonna valori").dropna().reset_index(drop=True)
usando il .
é possibile usare il . per delimitare in automatico l'intervallo
(vedi EXCEL - formule - liste)
pd.melt(xl("Ax:.Xx", headers=True),id_vars=xl("A1"),var_name="nome colonna divisione",value_name="nome colonna valori")
esmepio
- semplice senza nomi e con range delimitato
semplice unpivot di un range con ID la cella A1 ma senza nomi settarti delle altre colonne (variable, value)
pd.melt(xl("A1:D11", headers=True),id_vars=xl("A1"))
- con nomi e con range delimitato
unpivot di un range con ID la cella A1 ma con settati i nomi delle altre colonne divisore e valori
pd.melt(xl("A1:D11", headers=True),id_vars=xl("A1"),var_name="Trimestre",value_name="Vendite")
- dinamico con nomi e con range delimitato
per rendere l'intervallo range dinamico occorre aggiungere dei comandi
- modifica del range ingrandendolo
pd.melt(xl("A1:D20", headers=True),id_vars=xl("A1"),var_name="Trimestre",value_name="Vendite")
ci saranno degli errori nelle righe vuote
- rimuovo le righe vuote con .dropna()
pd.melt(xl("A1:D20", headers=True),id_vars=xl("A1"),var_name="Trimestre",value_name="Vendite").dropna()
toglie le righe ma crea una colonna con gli indici e con dei numeri mancanti
- ricreo la lista index rimuovendo i numeri mancanti .reset_index(drop=True)
pd.melt(xl("A1:D20", headers=True),id_vars=xl("A1"),var_name="Trimestre",value_name="Vendite").dropna().reset_index(drop=True)
ricrea dli indici e toglie la colonna con i numeri
(veri Python - Dataframe - indice)