Как транспонировать набор данных в csv-файл?

например, я хотел бы преобразовать:

Name,Time,Score
Dan,68,20
Suse,42,40
Tracy,50,38

в:

Name,Dan,Suse,Tracy
Time,68,42,50
Score,20,40,38

EDIT: в исходном вопросе неправильно использовался термин "транспонировать".

5 ответов


если все содержимое файл помещается в память, вы можете использовать

import csv
from itertools import izip
a = izip(*csv.reader(open("input.csv", "rb")))
csv.writer(open("output.csv", "wb")).writerows(a)

вы можете в основном думать о zip() и izip() как операции транспонирования:

a = [(1, 2, 3),
     (4, 5, 6),
     (7, 8, 9)]
zip(*a)
# [(1, 4, 7),
#  (2, 5, 8),
#  (3, 6, 9)]

izip() избегает немедленного копирования данных, но в основном будет делать то же самое.


переводом из input.csv to output.csv. Панды также могут помочь.

import pandas as pd
pd.read_csv('input.csv').T.to_csv('output.csv',header=False)

from itertools import izip
from csv import reader, writer

with open('source.csv') as f, open('destination.csv', 'w') as fw:
    writer(fw, delimiter=',').writerows(izip(*reader(f, delimiter=',')))

Если lines список ваш оригинальный текст, чем он должен быть!--4-->

for i in range(1,len(lines)):
    lines[i] = lines[i].split(',')

new_lines = []
for i in range(len(lines[0])):
    new_lines.append("%s,%s,%s" % (lines[0][i], lines[1][i], lines[2][i]))

или использовать csv модуль Python -http://docs.python.org/library/csv.html


самый простой способ-это:

import numpy as np
import pandas as pd

_mat = pd.read_csv("test.csv")
_mat = _mat[_mat.columns[0:3]].values
_t_mat = np.transpose(_mat)

результат:

  • входной матрицы : [[1 2 3] [4 5 6]]
  • выход: [[1 4] [2 5] [3 6]]