본문 바로가기
Programming/Python

파이썬 판다스 하나의 행을 여러 행으로 나누기

by 코딩하는 금융인 2021. 5. 12.

안녕하세요.

 

오늘은 데이터나 사무 업무를 하다보면, ','로 표현된 하나의 행을 각각 여러 행으로 나눠야 할 때 업무 자동화에 도움을 줄 수 있는 코드를 소개시켜드리고자 포스팅하게 되었습니다.

 

최근 실제 업무에서 이와 관련해서 어려움을 겪었고 대용량의 엑셀 파일일 때 Excel 조작법으로는 너무 오래 걸리기에 파이썬 판다스를 활용하여 간단하고 빠르게 해결하였습니다.

(실제 업무에서 엑셀로 데이터 조작을 할 때 시간이 엄청 오래 걸립니다..ㅠ)

 

* 아래의 파일은 사례를 들기 위해 만든 데이터 프레임으로 실제 적용하실 때는 df 값만 바꿔서 활용하시면 됩니다.

 

예시 및 결과 엑셀파일

exam_scores.xlsx
0.01MB
convert_scores.xlsx
0.01MB

 

예시 파일 데이터 테이블

학번 이름 점수
20182010 승미 60, 70, 80, 95
20182016 민준 77, 85, 90, 48
20182042 래용 80, 90, 88, 95

▶ Convert_row Python 코드

# 목표 : ,로 표현된 한 가지 셀을 다른 컬럼 기준으로 여러 가지 행 분리
import pandas as pd

df = pd.read_excel('C:/Users/Administrator/Downloads/exam_scores.xlsx')

result_df = pd.DataFrame(columns = ['member_id', 'name', 'score'])
rd_loc = 0
for i , row in df.iterrows():
    id = row['학번']
    name = row['이름']

    for s in row['점수'].split(','):
        s = str(s).strip()
        result_df.loc[rd_loc] = [id, name, s]
        rd_loc = rd_loc + 1

result_df.to_excel('C:/Users/Administrator/Downloads/convert_scores.xlsx', index= False)

파이썬 대표 라이브러리 중 하나인 판다스를 활용했습니다.

  1. 컬럼의 이름 임의로 member_id, name, score로 설정
  2. rd_loc는 행에 대한 인덱스 번호로 점수 컬럼에서 ,를 기준으로 행을 split할 때마다 +1 처리
  3. result_df.loc[인덱스 번호]는 인덱스에 해당하는 행에서 각 column에 대한 값 넣어주기 위해 사용

<결과>

member_id name score
20182010 승미 60
20182010 승미 70
20182010 승미 80
20182010 승미 95
20182016 민준 77
20182016 민준 85
20182016 민준 90
20182016 민준 48
20182042 래용 80
20182042 래용 90
20182042 래용 88
20182042 래용 95

* 이외 궁금한 사항이 있으시다면 댓글로 문의 부탁드립니다~

반응형

댓글