안녕하세요.
오늘은 데이터나 사무 업무를 하다보면, ','로 표현된 하나의 행을 각각 여러 행으로 나눠야 할 때 업무 자동화에 도움을 줄 수 있는 코드를 소개시켜드리고자 포스팅하게 되었습니다.
최근 실제 업무에서 이와 관련해서 어려움을 겪었고 대용량의 엑셀 파일일 때 Excel 조작법으로는 너무 오래 걸리기에 파이썬 판다스를 활용하여 간단하고 빠르게 해결하였습니다.
(실제 업무에서 엑셀로 데이터 조작을 할 때 시간이 엄청 오래 걸립니다..ㅠ)
* 아래의 파일은 사례를 들기 위해 만든 데이터 프레임으로 실제 적용하실 때는 df 값만 바꿔서 활용하시면 됩니다.
▶ 예시 및 결과 엑셀파일
▶ 예시 파일 데이터 테이블
학번 | 이름 | 점수 |
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)
파이썬 대표 라이브러리 중 하나인 판다스를 활용했습니다.
- 컬럼의 이름 임의로 member_id, name, score로 설정
- rd_loc는 행에 대한 인덱스 번호로 점수 컬럼에서 ,를 기준으로 행을 split할 때마다 +1 처리
- 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 |
* 이외 궁금한 사항이 있으시다면 댓글로 문의 부탁드립니다~
반응형
'Programming > Python' 카테고리의 다른 글
[파이썬] 웹 url 호출하기 requests post/get (1) | 2021.06.09 |
---|---|
[Python] 정규표현식 텍스트 전처리 (원하는 문자 추출) (0) | 2021.06.05 |
[Python] 파이썬 이미지 사이즈 분류하기 (0) | 2021.06.02 |
[Python] 파이썬 영화 사이트 (씨네21) 크롤링 2 (0) | 2021.06.01 |
[Python] 파이썬 영화 사이트 (씨네21) 크롤링 (1) | 2021.05.31 |
댓글