Libreria
Tabelle di dati
Tabelle come nei fogli di calcolo: filtri, ordinamenti, raggruppamenti e totali.
Funzioni 5
tabella(dati = nulla, colonne = nulla)#
Crea una tabella di dati con righe e colonne.
dati può essere una lista di dizionari (uno per riga), una lista di liste (la prima riga sono i nomi delle colonne, oppure li dai con colonne) o un dizionario di colonne.
variabile t = tabella([{"nome": "Ada", "voto": 9}, {"nome": "Bruno", "voto": 7}])stampa(t)nome | voto -------+------ Ada | 9 Bruno | 7 (2 righe, 2 colonne)
tabella_da_csv(testo, separatore = nulla)#
Crea una tabella da un testo CSV (la prima riga sono i nomi delle colonne).
Il separatore (, ; o tabulazione) si indovina da solo, i numeri diventano numeri e le celle vuote diventano nulla.
variabile t = tabella_da_csv("nome;voto\nAda;9\nBruno;7")tabella_da_json(testo)#
Crea una tabella da un testo JSON (una lista di oggetti, uno per riga).
tabella_da_json("[\{\"nome\": \"Ada\"\}]")variabile t = tabella_da_json(leggi_file("classe.json"))tabella_da_file(percorso, separatore = nulla)#
Legge una tabella da un file CSV (anche salvato da Excel) o JSON.
Il tipo si capisce dall'estensione (.csv, .tsv, .txt, .json). Le celle vuote diventano nulla.
variabile voti = tabella_da_file("voti.csv")variabile voti = [7, 8, 6, 9] # valore di provastampa(voti.prime(5))tabella_da_database(database, nome_o_sql, parametri = nulla)#
Crea una tabella da una tabella di un database SQLite o da una ricerca SQL.
database è un database aperto con apri_database oppure il percorso del file.
tabella_da_database("negozio.db", "prodotti")variabile db = apri_database("prova.db") # valore di provatabella_da_database(db, "SELECT nome, prezzo FROM prodotti WHERE prezzo < ?", [10])Oggetto «tabella»
Una tabella di dati: colonne con un nome, tutte lunghe uguali.
| Proprietà | Significato |
|---|---|
numero_colonne | |
numero_righe |
.accoda(altra)#
Una tabella con le righe di questa e poi quelle dell'altra (le colonne si uniscono).
variabile tutti = classe_a.accoda(classe_b).aggiungi_colonna(nome, valori)#
Una tabella con una colonna in più (o cambiata, se c'è già).
valori è una funzione che riceve la riga e calcola la cella, una lista (un valore per riga) o un valore solo, uguale per tutte le righe.
t = t.aggiungi_colonna("totale", funzione (r) restituisci r["prezzo"] * r["quantità"] fine).aggiungi_riga(riga)#
Aggiunge una riga in fondo alla tabella (cambia proprio questa tabella).
La riga è un dizionario (le colonne che mancano restano nulla, quelle nuove si aggiungono) oppure una lista con un valore per colonna.
variabile voti = [7, 8, 6, 9] # valore di provavoti.aggiungi_riga({"nome": "Carla", "voto": 8}).campione(quante = 5, seme = nulla)#
Alcune righe scelte a caso (con seme sempre le stesse).
stampa(domande.campione(3)).cerca(testo, colonne = nulla)#
Le righe in cui una cella contiene il testo (senza badare alle maiuscole).
variabile rubrica = {"Anna": "333 1234567", "Bruno": "347 7654321"} # valore di provastampa(rubrica.cerca("rossi"))variabile rubrica = {"Anna": "333 1234567", "Bruno": "347 7654321"} # valore di provarubrica.cerca("rossi", ["cognome"]).colonna(nome, senza_mancanti = falso)#
I valori di una colonna, come lista.
Con senza_mancanti = vero le celle vuote restano fuori (comodo per i calcoli).
variabile voti = [7, 8, 6, 9] # valore di provastampa(media(voti.colonna("voto", senza_mancanti = vero))).colonne()#
La lista dei nomi delle colonne.
variabile voti = [7, 8, 6, 9] # valore di provastampa(voti.colonne()).conta_valori(colonna)#
Quante volte compare ogni valore della colonna, dal più frequente.
Il risultato ha le colonne: il valore, conteggio e percentuale.
stampa(sondaggio.conta_valori("colore_preferito")).copia()#
Una copia della tabella (cambiare la copia non cambia l'originale).
variabile voti = [7, 8, 6, 9] # valore di provavariabile bozza = voti.copia()bozza.aggiungi_riga({"voto": 7}).filtra(condizione, operatore, valore)#
Una tabella con solo le righe che rispettano la condizione.
Operatori: = != < <= > >= contiene, inizia con, finisce con, in, non in, tra, mancante.
t.filtra("voto", ">=", 6)t.filtra("città", "Roma")t.filtra({"classe": "1A", "voto": [">", 7]})t.filtra(funzione (r) restituisci r["voto"] > r["media"] fine).grafico(tipo = "barre", etichette = nulla, valori = nulla, titolo = "")#
Un grafico con i dati della tabella.
etichette è la colonna dei nomi sull'asse, valori una colonna di numeri (o una lista di colonne, per più serie). Senza valori conta quante volte compare ogni etichetta. Per "istogramma" basta una colonna di numeri; per "dispersione" le colonne x e y.
vendite.grafico("barre", "mese", "incasso").mostra()sondaggio.grafico("torta", "colore").salva("colori.png").in_csv(separatore = ",")#
La tabella come testo CSV (la prima riga sono i nomi delle colonne).
variabile voti = [7, 8, 6, 9] # valore di provascrivi_file("voti.csv", voti.in_csv())variabile voti = [7, 8, 6, 9] # valore di provavoti.in_csv(";").in_html(titolo = "")#
La tabella come testo HTML (<table>...</table>), da mettere in una pagina.
variabile voti = [7, 8, 6, 9] # valore di provavariabile pagina = "<h1>Voti</h1>" + voti.in_html().in_json()#
La tabella come testo JSON (una lista di oggetti, uno per riga).
variabile voti = [7, 8, 6, 9] # valore di provavariabile testo = voti.in_json().mancanti()#
Un dizionario che dice, per ogni colonna, quante celle sono vuote.
stampa(sondaggio.mancanti()).mostra(righe = 20)#
Scrive la tabella allineata, al massimo con quel numero di righe.
variabile voti = [7, 8, 6, 9] # valore di provavoti.mostra()variabile voti = [7, 8, 6, 9] # valore di provavoti.mostra(5).ordina(colonne, decrescente = falso)#
Una tabella con le righe in ordine secondo una o più colonne.
I testi vanno in ordine alfabetico (senza badare alle maiuscole), le celle vuote sempre in fondo.
t.ordina("voto", decrescente = vero)t.ordina(["classe", "nome"])t.ordina("classe, voto decrescente").prime(quante = 5)#
Una tabella con solo le prime righe.
variabile voti = [7, 8, 6, 9] # valore di provastampa(voti.ordina("voto", decrescente = vero).prime(3)).raggruppa(colonne, calcoli = nulla)#
Una riga per ogni gruppo, con i calcoli sulle altre colonne.
calcoli è un dizionario colonna -> calcolo ("somma", "media", "mediana", "conta", "minimo", "massimo", "primo", "ultimo", "elenco", "diversi"), anche più di uno con una lista. Le colonne nuove si chiamano come "media_voto". Senza calcoli conta le righe di ogni gruppo.
variabile voti = [7, 8, 6, 9] # valore di provastampa(voti.raggruppa("classe", {"voto": ["media", "massimo"], "nome": "conta"})).riassumi()#
Una tabella con le statistiche di ogni colonna.
Per ogni colonna: tipo, valori pieni, mancanti, valori diversi, minimo, massimo, media e somma (queste ultime due solo per le colonne di numeri).
variabile voti = [7, 8, 6, 9] # valore di provastampa(voti.riassumi()).riempi_mancanti(valore, colonne = nulla)#
Una tabella in cui le celle vuote hanno quel valore.
Con un dizionario si sceglie un valore per colonna: t.riempi_mancanti({"voto": 0, "note": "-"}).
variabile t2 = t.riempi_mancanti(0).riga(indice)#
Una riga come dizionario (la prima è la riga 0, l'ultima è -1).
variabile primo = classifica.riga(0)stampa(primo["nome"]).righe()#
Tutte le righe, come lista di dizionari (colonna -> valore).
variabile voti = [7, 8, 6, 9] # valore di provaper ogni r in voti.righe() fai stampa(r["nome"], r["voto"]) fine.rinomina(vecchio, nuovo)#
Una tabella con una colonna che ha un nome nuovo.
Per cambiarne tante insieme usa un dizionario: t.rinomina({"nm": "nome", "vt": "voto"}).
variabile t2 = t.rinomina("Voto finale", "voto").salva(percorso, excel = falso)#
Salva la tabella in un file; il formato dipende dall'estensione.
.csv (con excel = vero pronto per l'Excel italiano: ; e virgola decimale), .tsv, .json, .html (una pagina da aprire nel browser) o .md. Restituisce il percorso.
classifica.salva("classifica.csv").salva_in_database(database, nome, sostituisci = falso)#
Copia le righe in una tabella di un database SQLite.
Se la tabella del database non c'è, si crea con i tipi giusti; se c'è si aggiungono le righe (con sostituisci = vero prima si cancella). database è un database aperto o un percorso.
variabile voti = [7, 8, 6, 9] # valore di provavoti.salva_in_database("scuola.db", "voti").seleziona(colonne...)#
Una tabella con solo le colonne scelte, nell'ordine scelto.
variabile voti = [7, 8, 6, 9] # valore di provastampa(voti.seleziona("nome", "voto")).statistiche(colonna)#
Un dizionario con i numeri principali di una colonna.
Chiavi: "conta" (celle piene), "mancanti", "diversi", "minimo", "massimo" e, per le colonne di numeri, anche "somma", "media", "mediana" e "deviazione" (deviazione standard).
variabile voti = [7, 8, 6, 9] # valore di provavariabile s = voti.statistiche("voto")stampa(s["media"], s["massimo"]).tabella_incrociata(righe, colonne, valori = nulla, calcolo = "somma")#
Una tabella pivot (a doppia entrata).
Una riga per ogni valore della colonna righe, una colonna per ogni valore della colonna colonne (nell'ordine in cui compaiono); nelle celle il calcolo sulla colonna valori (senza valori conta le righe).
stampa(vendite.tabella_incrociata("negozio", "mese", "incasso")).togli_colonne(colonne...)#
Una tabella senza le colonne indicate.
variabile pubblica = iscritti.togli_colonne("email", "telefono").togli_duplicati(colonne = nulla)#
Una tabella senza righe ripetute (resta la prima).
Con colonne due righe sono uguali se sono uguali solo in quelle colonne.
t.togli_duplicati()iscritti.togli_duplicati("email").togli_mancanti(colonne = nulla)#
Una tabella senza le righe che hanno celle vuote.
Con colonne si guardano solo quelle colonne.
variabile complete = sondaggio.togli_mancanti(["età", "voto"]).trasforma_colonna(nome, funzione)#
Una tabella in cui ogni cella della colonna è cambiata dalla funzione.
t = t.trasforma_colonna("nome", maiuscolo)t.trasforma_colonna("prezzo", funzione (p) restituisci arrotonda(p * 1.22, 2) fine).ultime(quante = 5)#
Una tabella con solo le ultime righe.
stampa(misure.ultime(10)).unisci(altra, colonna, modo = "interno")#
Affianca le righe delle due tabelle che hanno lo stesso valore nella colonna.
Modi: "interno" (solo le righe che si trovano in tutte e due), "sinistra" (tutte le righe di questa tabella, anche senza compagna), "completo" (tutte le righe di tutte e due). Le colonne con lo stesso nome nell'altra tabella prendono "_2" in fondo.
variabile voti = [7, 8, 6, 9] # valore di provavariabile pagelle = studenti.unisci(voti, "matricola").valori_diversi(colonna)#
La lista dei valori di una colonna, ognuno una volta sola (nell'ordine in cui compaiono).
Le celle vuote restano fuori.
variabile voti = [7, 8, 6, 9] # valore di provastampa(voti.valori_diversi("classe"))