如何在csv文件中转置数据集?

26 投票
7 回答
60897 浏览
提问于 2025-04-16 11:03

比如,我想把这个:

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

变成这个:

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

编辑: 原来的问题用“转置”这个词用错了。

7 个回答

5

这是nosklo的相同答案(所有的功劳都归他),不过是针对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=',')))
18

把数据从 input.csv 文件转移到 output.csv 文件。Pandas 这个工具也能帮上忙。

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

如果整个文件的内容都能放进内存里,你可以使用

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() 不会立即复制数据,但基本上会做同样的事情。

撰写回答