2014-12-06 112 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