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

zr.*_*zr. 17 python csv transpose

例如,我想改造:

Name,Time,Score
Dan,68,20
Suse,42,40
Tracy,50,38
Run Code Online (Sandbox Code Playgroud)

成:

Name,Dan,Suse,Tracy
Time,68,42,50
Score,20,40,38
Run Code Online (Sandbox Code Playgroud)

编辑:原始问题错误地使用术语"转置".

Sve*_*ach 35

如果整个文件内容适合内存,则可以使用

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

您基本上可以将zip()izip()视为转置操作:

a = [(1, 2, 3),
     (4, 5, 6),
     (7, 8, 9)]
zip(*a)
# [(1, 4, 7),
#  (2, 5, 8),
#  (3, 6, 9)]
Run Code Online (Sandbox Code Playgroud)

izip() 避免立即复制数据,但基本上也会这样做.

  • 如果整个文件_ades not_适合内存添加更多内存 (2认同)
  • +1。顺便说一句,看起来手册需要更新“如果语法 *expression 出现在函数调用中,则表达式必须评估为序列”...... csv.reader() 不评估为序列。 (2认同)

Da *_* Qi 9

转移input.csvoutput.csv.熊猫也可以提供帮助.

import pandas as pd
pd.read_csv('input.csv', header=None).T.to_csv('output.csv', header=False, index=False)
Run Code Online (Sandbox Code Playgroud)


Joe*_*Joe 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=',')))
Run Code Online (Sandbox Code Playgroud)