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


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

예를 들어 :

이름 김준

이름 이유

이름 김파이

성별 남

성별 남자

위와 같이 기록된 파일을

이름 김준 이유 김파이

성별 남 남자

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

  • 2017년 08월 11일에 작성됨

조회수 218


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년 08월 12일에 작성됨

  • 이 방법으로 코드 고쳐서 해결이 된 것 같습니다. 감사합니다 !     김도훈   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
  • 2017년 08월 13일에 작성됨

  • name 과 age 등의 필드명을 하나의 컬럼으로 받고 value 들을 옆으로 받으려면 lambda 뒤의 값을 바꾸면 되나요?    김도훈   2017.8.13 12:06     
  • .    김도훈   2017.8.14 04:18     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close