Vai al contenuto
OneKitly

Trasporre una tabella le cui righe avrebbero dovuto essere colonne

Pubblicato il 22/07/2026 · 12 min di lettura · Strumenti per sviluppatori

Daniel Okonkwo

Daniel OkonkwoSviluppatore front-end e redattore Tech presso OneKitly

Performance web · Formati di file

Verificato su 4 fonti

Vedi il profilo
In breve

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.

Cinque input e l'output esatto restituito dal traspositore per ciascuno
InputOutputChe cosa significa
Name,Q1,Q2,Q3 / Alice,10,20,30 / Bob,5,6,7Name,Alice,Bob / Q1,10,5 / Q2,20,6 / Q3,30,7La riga di intestazione diventa la prima colonna; le etichette di riga diventano l'intestazione
a,b,c / 1,2 / 3,4,5,6a,1,3 / b,2,4 / c,,5 / ,,6Riempie 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",wa,1,x / b,2,"y,z" / c,3,wLe virgolette sono rifatte da zero: una cella con il delimitatore viene ricitata nella sua nuova posizione
a,b / 1,2 / (una riga vuota) / 3,4a,1,,3 / b,2,,4Una 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,140Date,2026-01,2026-01,2026-02 / Region,North,South,North / Sales,120,90,140Trasporre non è pivotare: la chiave ripetuta produce un'intestazione duplicata e la tabella resta lunga
Trasponi CSVScambia righe e colonne di dati delimitati. Incolla il testo o trascina il file; in entrambi i casi nulla lascia la pagina.Prova lo strumento

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
TutorialCostruire una tabella Markdown da zero, senza contare i trattini a manoLa cosa più piccola che sia ancora una tabella sono due righe: una riga di intestazione e una riga delimitatrice. Ecco perché la seconda è obbligatoria in GitHub Flavored Markdown, dove le tabelle a barre non esistono affatto, e che cosa fa un generatore che scrivere a mano non può fare.GuidaIncollare una tabella in una pull request: che cosa si rompe, e i due caratteri che la romponoUna tabella Markdown vieta esattamente due caratteri dentro una cella: la barra verticale e l'a capo. Ecco che cosa fa ciascuno, come li tratta un convertitore, perché l'escape va applicato nell'ordine giusto, e perché il riempimento non conta mai.SpiegazioneDa CSV a JSON: i cinque casi che rompono qualsiasi convertitoreDelimitatori tra virgolette, a capo incorporati, tipi ambigui, intestazioni duplicate e codifica. Ogni caso è passato dal convertitore e qui c'è l'output esatto — compresi i due che non salva.SpiegazionePunto e virgola, tab, barra verticale: scegliere un delimitatore che sopravviva al viaggioPerché la lingua di chi legge decide il delimitatore, che cosa fa il convertitore alle virgolette quando cambi, che cos'è davvero la prima riga sep=, e il conteggio delle celle citate sullo stesso export scritto in cinque modi.SpiegazioneDa JSON a CSV quando la struttura è annidata: perché non esiste una risposta giustaI due stessi ordini escono con cinque colonne da un convertitore e dieci da un altro, e nessuno dei due sbaglia. Percorsi con punti, array di scalari, array di oggetti e record con chiavi diverse: quattro decisioni, prese per te e quasi sempre in silenzio.TutorialCome convertire JSON in CSV: appiattire array di oggetti in righe e colonneUna guida pratica per trasformare un array JSON di oggetti in un file CSV pulito, incluso l'appiattimento dei campi annidati e i casi limite.

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

Hai notato un errore in questo articolo?