2014-12-06 113 views
1

我是python中的新手,我想转置一个CSV格式的文件。文件我的结构是这样的:在python中转置行到列

Country;Class;Number 
UK;1;50 
Germany;2;30 
France;3;50 
France;1;20 

我需要转类变量为列,即

  class1 class2 

country  Number Number 

是否有可能做到这一点壳牌或在Python?

我知道可以用Python中的zip()完全转置一个矩阵,但我只想转置class列。有可能在Python或shellcript中做到这一点吗?

+0

我不确定你在问什么。你能否澄清一下这个例子?请说明目前的结构(你似乎已经完成)和你想要的结果(目前尚不清楚)。 – Sid 2014-12-06 18:06:17

回答

0
import csv 

with open('test.csv', 'r') as f: 
    reader = csv.DictReader(f, delimiter=';') 
    # make a dict of empty lists, to contain our values 
    transposed = {k:[] for k in reader.fieldnames} # could use defaultdict here 
    for row in reader: 
     for k, v in row.items(): 
      transposed[k].append(v) 
print(transposed) 

这会给你一本字典,看起来像这样:

{ 
    'Country': ['UK', 'Germany', 'France', 'France'], 
    'Class': ['1', '2', '3', '1'], 
    'Number': ['50', '30', '50', '20'] 
} 

奖励:你也可以使用一个collections.defaultdict而不是使用字典解析来设置transposed

from collections import defaultdict 
transposed = defaultdict(list) 
+0

非常酷,非常感谢您的解决方案 – SOCKet 2014-12-06 22:14:15

1

您要旋转而不是转置数据:

import pandas 
from io import StringIO # python 3 
# from StringIO import StringIO # python 2 

datafile = StringIO("""\ 
Country;Class;Number 
UK;1;50 
Germany;2;30 
France;3;50 
France;1;20 
""") 
df = pandas.read_csv(datafile, sep=';') 
print(df.pivot(index='Country', columns='Class', values='Number')) 

Class  1 2 3 
Country    
France 20 NaN 50 
Germany NaN 30 NaN 
UK  50 NaN NaN