2014-12-06 2 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?

Я знаю, что можно полностью транспонировать матрицу с zip() в Python, но я просто хочу транспонировать class-column. Можно ли это сделать в Python или в shellscript?

+0

Я не уверен, что вы просите. Не могли бы вы прояснить этот пример? Пожалуйста, проиллюстрируйте, какая структура в данный момент (что вы, кажется, сделали), и то, что вы хотите (что в настоящее время неясно). – Sid

ответ

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

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 
Смежные вопросы