Trasporre una tabella le cui righe avrebbero dovuto essere colonne
Pubblicato il 22/07/2026 · 12 min di lettura · Strumenti per sviluppatori
Daniel Okonkwo — Sviluppatore front-end e redattore Tech presso OneKitly
Performance web · Formati di file
Verificato su 4 fonti
Trasporre scambia righe e colonne: la cella [r][c] diventa la cella [c][r], e nient'altro cambia. La riga di intestazione diventa la prima colonna, quindi Name,Q1,Q2,Q3 sopra Alice,10,20,30 e Bob,5,6,7 torna come Name,Alice,Bob, poi Q1,10,5, poi Q2,20,6 e poi Q3,30,7: quattro righe, tre colonne, e le etichette scendono ora lungo il bordo sinistro invece di correre in alto. Le righe di lunghezza diversa vengono riempite, mai troncate: l'output ha tante righe quante celle aveva la riga di input più larga, e una riga corta contribuisce con stringhe vuote. Con a,b,c sopra 1,2 e 3,4,5,6 ottieni quattro righe di output, l'ultima delle quali è ,,6: una riga senza nome che porta il valore di cui l'intestazione non aveva tenuto conto. Le virgolette sono rifatte da zero, quindi una cella che contiene il delimitatore o un a capo torna citata correttamente. Non c'è alcuna conversione di tipo: 007 resta 007, 1.0 resta 1.0, true resta true, perché lo strumento sposta solo testo. Il delimitatore è rilevato sul primo record e l'output usa lo stesso: un file a punto e virgola si traspone in un file a punto e virgola. Due cose da sorvegliare. Una riga vuota dentro l'input diventa una colonna interamente vuota nell'output, perché una riga vuota è una riga con una cella vuota. E trasporre non è pivotare: una tabella in formato lungo con una chiave ripetuta torna con intestazioni di colonna duplicate invece che rimodellata, perché ruotare una tabella non raggruppa nulla.
Che ne è della riga di intestazione, delle righe di lunghezza diversa, dei tipi — e l'unica cosa con cui trasporre viene regolarmente confuso e che non può fare.
Che ne è della riga di intestazione
Nulla di speciale, ed è proprio il punto da capire prima di usare il risultato. Lo strumento non ha idea che la tua prima riga sia un'intestazione. Legge una griglia di celle, riscrive la stessa griglia con gli assi scambiati, e si ferma. Così Name,Q1,Q2,Q3 sopra Alice,10,20,30 e Bob,5,6,7 diventa quattro righe: Name,Alice,Bob, poi Q1,10,5, poi Q2,20,6 e poi Q3,30,7. Le tue etichette di colonna sono ora la prima cella di ogni riga, e le tue etichette di riga — Alice e Bob — sono ora l'intestazione.
La primissima cella della tabella, quella che diceva Name, finisce nell'angolo dell'output come etichetta di una riga di intestazione che non etichetta più nulla di utile. È normale in una tabella trasposta ed è per questo che quasi tutti la rinominano poi a mano: da Name a qualcosa come Metrica o Periodo, a seconda di ciò che ora scende a sinistra. L'importante è che ciò che leggerà il file dopo continua a credere che la prima riga sia un'intestazione, e quella prima riga è ora l'elenco delle tue vecchie etichette di riga. Se dai il risultato a un convertitore da CSV a JSON, le tue chiavi saranno Name, Alice e Bob.
Righe irregolari: riempie, e non tronca mai
Un'esportazione vera non è sempre rettangolare. Una riga può essere corta perché un campo finale era vuoto e chi scriveva si è fermato prima; una riga può essere lunga perché un delimitatore non protetto ha spezzato un campo in due. Entrambe accadono, e un traspositore deve decidere quale sia l'altezza dell'output. Questo usa la riga più larga: il numero di righe di output è pari al numero di celle della riga di input più lunga, e ogni posizione che nessuna riga di input ha riempito diventa una stringa vuota.
La dimostrazione è breve. Prendi l'intestazione a,b,c sopra le due righe 1,2 e 3,4,5,6. La riga più larga ha quattro celle, quindi l'output ha quattro righe: a,1,3, poi b,2,4, poi c,,5 e poi ,,6. Leggi con attenzione quest'ultima riga. Porta il valore 6, che è dato reale dell'input, e la sua prima cella è vuota perché l'intestazione aveva solo tre nomi. Lo strumento ti sta dicendo qualcosa di vero e utile — c'era un quarto campo in una riga e nulla lo nominava — e te lo dice lasciando una riga senza nome in fondo invece di cancellare la prova. Troncare avrebbe buttato via proprio la cella che dimostra che il tuo file ha un problema di virgolette.
Ne segue un effetto collaterale. Trasporre due volte una tabella irregolare non restituisce l'originale: la prima passata riempie i buchi, quindi la seconda ricostruisce un rettangolo. a,b,c sopra 1,2 e 3,4,5,6 torna come a,b,c, sopra 1,2,, e 3,4,5,6 — stessi valori, quattro colonne ovunque, vuoti finali dove l'originale era corto. Su una tabella rettangolare la doppia trasposizione è esatta e restituisce il file di partenza, byte per byte, purché le virgolette fossero già minime.
I tipi: lo strumento non fa nulla, ed è lì che il rischio si sposta
In questo strumento non c'è conversione di tipo da nessuna parte. Analizza le celle come testo, le sposta e le riscrive come testo. 007 resta 007, 1.0 resta 1.0, true resta true, e una data resta la stringa che era. Nulla viene arrotondato, nulla reinterpretato, e uno zero iniziale non si può perdere, perché nessun numero esiste mai.
Il rischio è interamente a valle, ed è la trasposizione a crearlo. Prima, ogni colonna era omogenea: una colonna di date, una di importi, una di nomi di regione. Dopo, ogni colonna è un miscuglio, perché contiene una cella di ciascuna colonna originale. Apri il risultato in un foglio di calcolo e l'indovinare i tipi gira colonna per colonna su dati che non hanno più un tipo per colonna. L'etichetta nella prima cella è testo e il resto sono numeri, quindi una colonna di numeri viene letta come testo, oppure una cella isolata che sembra una data viene convertita in una. Non è opera del traspositore, ma ne è la conseguenza, ed è per questo che il consiglio pratico è trasporre in uno strumento di testo e aprire il risultato con tutte le colonne forzate a testo invece di lasciare che il foglio di calcolo deduca.
Dove capita, e l'unico lavoro che non può fare
Tre situazioni coprono quasi tutto. Una serie storica esportata in formato lungo, una riga per periodo, mentre il grafico che stai costruendo vuole una colonna per periodo. Un'esportazione di sondaggio in cui le domande sono righe e i rispondenti colonne, o il contrario, a seconda dello strumento che l'ha scritta. E un report in cui qualcuno ha costruito la tabella pivot al contrario e l'ha spedita, quindi il file che ti arriva ha i periodi di lato e le metriche in alto mentre tutto il resto della tua catena si aspetta l'opposto. In tutti e tre, il rimedio è una trasposizione vera: i dati hanno già la forma giusta, sono solo ruotati.
C'è una quarta situazione che sembra identica e non lo è, ed è quella che costa un pomeriggio. Una tabella in formato lungo ha una colonna chiave che si ripete: Data, Regione, Vendite, con due righe per gennaio perché ci sono due regioni. Trasporla non la rimodella. Dai allo strumento Date,Region,Sales sopra 2026-01,North,120, 2026-01,South,90 e 2026-02,North,140, e l'output sono tre righe: Date,2026-01,2026-01,2026-02, poi Region,North,South,North e poi Sales,120,90,140. La prima riga ha ora un'intestazione duplicata, e la tabella è ancora lunga: una voce per osservazione, solo scritta di traverso. Ciò che volevi era un pivot: raggruppare per data, distribuire le regioni sulle colonne, e mettere le vendite nelle celle. Quella è un'aggregazione, non una rotazione, e richiede uno strumento che sappia quale colonna è la chiave, quale l'etichetta e quale il valore.
Tre comportamenti silenziosi da conoscere
Una riga vuota dentro il tuo input diventa una colonna vuota nell'output. Non è un bug e discende direttamente dalla definizione: una riga vuota è una riga che contiene una cella vuota, quindi dopo la rotazione è una colonna che contiene una cella vuota più riempimento. Dai allo strumento a,b, poi 1,2, poi una riga vuota e poi 3,4, e ottieni a,1,,3 sopra b,2,,4: la terza colonna è la riga vuota. Poiché si incollano dati con righe vuote fra i blocchi più spesso di quanto si creda, questa è la sorpresa più frequente che lo strumento produce. Togli le righe vuote prima di trasporre se non le intendevi.
Il delimitatore esce com'è entrato. Viene rilevato sul primo record e riutilizzato per l'output, quindi un file a punto e virgola si traspone in un file a punto e virgola e uno a tabulazioni in uno a tabulazioni. Non c'è un'opzione per cambiarlo strada facendo: se ne vuoi un altro, passa dopo il convertitore di delimitatore. Il corollario è che un rilevamento sbagliato rovina il risultato invece di degradarlo: forza la virgola su un file che usa davvero i punti e virgola e ogni riga diventa un'unica cella, quindi l'intera tabella si traspone in una sola riga.
Le virgolette vengono ricostruite, non riportate. Ogni cella è riesaminata in uscita e citata solo se ora contiene il delimitatore, una virgoletta o un a capo. Una cella con y,z era citata in ingresso ed è citata di nuovo in uscita; una cella citata senza motivo torna nuda. Le celle con a capo incorporati sopravvivono intatte, ancora citate, ancora distese su due righe fisiche del file. Questo significa che l'output è un CSV valido anche quando l'input era citato più del necessario — e significa anche che un confronto byte per byte di una doppia trasposizione differirà se l'originale portava virgolette superflue.
| Input | Output | Che cosa significa |
|---|---|---|
| Name,Q1,Q2,Q3 / Alice,10,20,30 / Bob,5,6,7 | Name,Alice,Bob / Q1,10,5 / Q2,20,6 / Q3,30,7 | La riga di intestazione diventa la prima colonna; le etichette di riga diventano l'intestazione |
| a,b,c / 1,2 / 3,4,5,6 | a,1,3 / b,2,4 / c,,5 / ,,6 | Riempie fino alla riga più larga e non tronca mai; l'ultima riga resta senza nome perché l'intestazione era corta |
| a,b,c / 1,2,3 / x,"y,z",w | a,1,x / b,2,"y,z" / c,3,w | Le virgolette sono rifatte da zero: una cella con il delimitatore viene ricitata nella sua nuova posizione |
| a,b / 1,2 / (una riga vuota) / 3,4 | a,1,,3 / b,2,,4 | Una riga vuota è una riga con una cella vuota: dopo la rotazione è una colonna vuota |
| Date,Region,Sales / 2026-01,North,120 / 2026-01,South,90 / 2026-02,North,140 | Date,2026-01,2026-01,2026-02 / Region,North,South,North / Sales,120,90,140 | Trasporre non è pivotare: la chiave ripetuta produce un'intestazione duplicata e la tabella resta lunga |
Domande frequenti
- La prima riga viene trattata come intestazione?
- No, e non c'è un'opzione per dire che lo sia. Lo strumento legge una griglia e la ruota; ogni riga è una riga. È il comportamento desiderabile, perché un traspositore che trattasse la prima riga in modo speciale dovrebbe decidere che farne: tenerla in cima, il che non sarebbe una trasposizione, oppure spostarla fingendo che resti un'intestazione, il che sarebbe una bugia. La conseguenza è che dopo la trasposizione vorrai di solito rinominare a mano la primissima cella, perché ora etichetta una riga di intestazione fatta delle tue vecchie etichette di riga e non una colonna di alcunché.
- Quanto può essere grande il file da trasporre?
- L'area di trascinamento accetta file fino a 2 MB, e tutto gira nel tuo browser e non su un server, quindi nulla viene caricato. Il limite vero di una trasposizione non è la dimensione ma la forma: trasporre trasforma righe in colonne, quindi un file da 50.000 righe diventa un file da 50.000 colonne. È CSV valido e lo strumento lo produrrà, ma pochissimi programmi lo aprono comodamente: i limiti di colonne dei fogli di calcolo sono nell'ordine delle decine di migliaia, e un editor di testo ti darà una riga larga diversi megabyte. Se la tua tabella è alta e non larga, chiediti se vuoi davvero una trasposizione, o se ciò che ti serve è un pivot che raggruppi le righe in una manciata di colonne.
- Perché il mio file trasposto ha una colonna piena di nulla?
- Quasi certamente perché l'input aveva una riga vuota dove ora si trova quella colonna. Una riga vuota viene analizzata come una riga che contiene una cella vuota, e dopo la rotazione quella riga è una colonna. Conta da sinistra: la posizione della colonna vuota corrisponde alla posizione della riga vuota contando dall'alto. Lo stesso accade con una riga fatta di soli delimitatori, come ,,, che sono quattro celle vuote e non una riga vuota ma dà lo stesso risultato all'occhio. Togli prima le righe vuote dal tuo input: un a capo finale in fondo al file è gestito e non provoca questo, una riga vuota in mezzo sì.
- Posso trasporre solo una parte del file?
- In un solo passaggio no: il traspositore prende tutto l'input. La via pratica è tagliare prima e trasporre dopo. Incolla solo il blocco che vuoi, oppure estrai le colonne che ti interessano con un estrattore di colonne e traspone il risultato, che del resto è spesso ciò che volevi comunque: una tabella larga trasposta per intero è illeggibile, mentre quattro colonne scelte trasposte in quattro righe sono un riassunto che sta in un messaggio. Se il file ha più blocchi separati da righe vuote, ricorda che quelle righe diventano colonne vuote, quindi separa i blocchi in input distinti invece di trasporli tutti insieme.
- Mi serve una colonna per mese da una tabella che ha una riga per mese. È una trasposizione?
- Dipende da una cosa sola: se il mese compare più di una volta. Se ogni mese ha esattamente una riga, allora sì: la tabella ha già la forma giusta e ruotarla ti dà ciò che vuoi. Se un mese compare più volte perché c'è una seconda dimensione nella tabella, come una regione o un prodotto, allora no. Ruotare quello ti dà etichette di mese ripetute in alto e ti lascia tanto lontano dalla risposta quanto eri. Lì ti serve un pivot: scegliere la chiave che diventa le righe, l'etichetta i cui valori distinti diventano le colonne, e il valore che finisce nelle celle, e decidere che cosa succede quando due righe di origine cadono nella stessa cella — sommarle, farne la media, o rifiutare. Un traspositore non ha nessuno di questi tre dati e non può chiederli.
Articoli che potrebbero interessarti
Tutte le guide →Strumenti correlati
Questo descrive ciò che questi convertitori fanno oggi, verificato eseguendoli, e non ciò che una norma imponga a un convertitore. Il CSV non ha una norma prescrittiva: la RFC 4180 è informativa e descrive una prassi diffusa, perciò due strumenti apparentemente corretti possono divergere sullo stesso file senza che nessuno sbagli. L'appiattimento, il riconoscimento dei tipi e quello degli array sono convenzioni, non regole. Prima di convertire dati che non potrai riesportare, passa prima su una copia e confronta il numero di righe e colonne alle due estremità.
Fonti
- IETF — RFC 4180, Common Format and MIME Type for Comma-Separated Values (CSV) Files — section 2 rule 4 on each record containing the same number of fields, and rule 6 on quoting a field that holds a delimiter or a line break
- W3C — Model for Tabular Data and Metadata on the Web — the abstract model of a table as rows and columns of cells, and the annotations that a bare CSV file cannot carry
- Journal of Statistical Software — Hadley Wickham, Tidy Data, volume 59 issue 10, 2014 — the distinction between long and wide layouts and why reshaping between them is a grouping operation rather than a rotation (open access)
- pandas — User guide, Reshaping and pivot tables — pivot, pivot_table and melt, and the aggregation function a pivot needs when two source rows fall into the same cell
Hai notato un errore in questo articolo?