How to transpose a dataset in a csv file?
If the whole file contents fits into memory, you can use
import csv
from itertools import izip
a = izip(*csv.reader(open("input.csv", "rb")))
csv.writer(open("output.csv", "wb")).writerows(a)
You can basically think of zip()
and izip()
as transpose operations:
a = [(1, 2, 3),
(4, 5, 6),
(7, 8, 9)]
zip(*a)
# [(1, 4, 7),
# (2, 5, 8),
# (3, 6, 9)]
izip()
avoids the immediate copying of the data, but will basically do the same.
Same answer of nosklo (all credits to him), but for python3:
from csv import reader, writer
with open('source.csv') as f, open('destination.csv', 'w') as fw:
writer(fw, delimiter=',').writerows(zip(*reader(f, delimiter=',')))
Transfer from input.csv
to output.csv
. Pandas can also help.
import pandas as pd
pd.read_csv('input.csv', header=None).T.to_csv('output.csv', header=False, index=False)