◀ 왼쪽에 있는 엑셀표는 임시로 만든 예시이다. 프로젝트를 진행하기 위해 왼쪽 엑셀처럼 정리된 데이터를 받았기 때문에 어떤 식으로 데이터를 가공하고 전처리하면 좋을 지 팀원들에 의견을 나누며 고민했다.

 

 

 

대학교 칼럼을 기본키로 정해 첫번째 셀 값에 해당하는 행들을 컬럼별로 한쪽로 정리하는 방향으로 진행하기로 했다.

(예) {'대학교': 공대, '전공': 전자공학, 컴퓨터공학, 건축공학, 건축공학, '인원': 50, 34, 15}

 

 

1. 파이썬에 엑셀 파일을 불러오기

import pandas as pd

xlsx_name = 'C:\\Users\\...\\ooo.xlsx' # 엑셀 파일 예시
data = pd.read_excel(xlsx_name) # 판다스에서 excel 파일 읽어오기

data.columns = ['college', 'major', 'personnel'] # column명 지정
data

 

 

2. 데이터 프레임을 딕셔너리로 변경

키와 값을 분류하기 위해 딕셔너리로 변경한다.

data.to_dict('records')

.to_dict('records') : 각 행을 사전형으로 변환한다는 의미

 

 

3.  첫번째 컬럼을 키로 사용하여 저장하고 NaN인 경우 이전 키에 저장, NaN이 아니면 새로운 키 생성

 

result_dict = {} # 'college'를 키로 사용하여 결과를 저장할 딕셔너리 생성

# 데이터를 순회하면서 딕셔너리 생성
for _, row in data.iterrows():
    college = row['college'] 
    # 오류 발생으로 인해 문자열로 변환하여 통일
    major = str(row['major'])
    personnel = str(row['personnel'])
    
    # 'college' 값이 NaN이 아닌 경우
    if not pd.isna(college):
    	# 새로운 딕셔너리 생성하고 딕셔너리에 추가
        result_dict[college] = {'college' : college, 'major' : major, 'personnel' : personnel}
    
    # NaN인 경우
    else:
    	# result_dict가 데이터가 있는 경우
        if result_dict:
        	# result_dict의 키인 'college'을 리스트로 반환하고 그 리스트에서 마지막에 해당하는 요소 저장
            prev_college = list(result_dict.keys())[-1]
            # 'college'값 prev_college데 해당하는 딕셔너리의 'major' 키에 ,와 'major' 추가
            result_dict[prev_college]['major'] += ', ' + major
            result_dict[prev_college]['personnel'] += ', '+ personnel

#딕셔너리 값을 리스트로 변환하여 최종 결과 얻음
result_list = list(result_dict.values())

print(result_list)

iterrows() : 데이터프레임의 각 행의 정보를 담는 객체(데이터프레임의 행 반복)

 

 

4. 다시 데이터프레임으로 변경

 

data_result = pd.DataFrame(result_list)
data_result

 

 

 

5. 엑셀 파일로 저장

data_result.to_excel('re_college.xlsx')

 

 

 

+ Recent posts