Python 또는 Excel 에서 행으로 된 파일들을 열로 변환하는법

Python 또는 Excel 에서 행으로 된 파일들이 있습니다.

예를 들어 :

이름 김준

이름 이유

이름 김파이

성별 남

성별 남자

위와 같이 기록된 파일을

이름 김준 이유 김파이

성별 남 남자

와 같이 변경할 수 있는 방법이 있을까요 ? 찾아 보았는데 딱히 나오지 않아서 질문해봅니다. 김준, 이유, 남 과 같은 값들을 컬럼으로 만들어서 0, 1로 표현하는 방법말곤 나오지 않습니다..

2답변

  • 좋아요

    1

    싫어요
    채택취소하기

    itertools 모듈을 사용하면 편합니다.

    '''
    sample.csv 의 내용은 아래와 같습니다.
    
    name,aaaa
    name,bbbb
    name,ccc
    age,10
    age,20
    age,30
    '''
    
    import csv
    import itertools
    
    with open('d:/sample.csv', 'r') as f:
        reader = csv.reader(f)
        for key, group in itertools.groupby(reader, lambda i:i[0]):
            print('{} => {}'.format(key, list(map(lambda i:i[1], group))))
    
    name => ['aaaa', 'bbbb', 'ccc']
    age => ['10', '20', '30']
    
    • 이 방법으로 코드 고쳐서 해결이 된 것 같습니다. 감사합니다 ! 김도훈 2017.8.13 21:57
  • 더 효율적인 방법은 pandas 에 dataframe를 사용하면 피봇을 만들기 좋습니다만 일단은 기본 모듈로 만든 예제입니다.

    import csv
    import itertools
    
    with open('d:/sample.csv', 'r') as f:
        reader = csv.reader(f)
        keys, vals = set(), []
        for key, group in itertools.groupby(reader, lambda i:i[0]):
            keys.add(key)
            vals.append(list(map(lambda i:i[1], group)))
    
        print('\t'.join(keys))
        for name, val in zip(vals[0], vals[1]):print('{}\t{}'.format(name, val))
    
    name    age
    aaaa    10
    bbbb    20
    ccc     30
    
    • name 과 age 등의 필드명을 하나의 컬럼으로 받고 value 들을 옆으로 받으려면 lambda 뒤의 값을 바꾸면 되나요? 김도훈 2017.8.13 12:06
    • . 김도훈 2017.8.14 04:18

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.