데이터 분석을 하다보면, 수많은 데이터를 이용하게 된다.
일반적으로 csv 혹은 text 파일을 이용하지만 간혹 excel, html, xml 등 다양한 데이터를 이용한다.
필자는 주로 csv 파일을 이용하는데,
최근에 excel 데이터를 활용한 경험이 있다.
해당 데이터는 다중인덱스와 컬럼으로 구성되었고,
필자는 이러한 데이터를 csv 파일 형식의 데이터로 변환하려고 한다.
먼저, 다중 인덱스와 컬럼으로 구성된 데이터프레임(DataFrame)을 생성하였다.
아래 보이는 데이터를 unstack(), stack(), reset_index() 등을 이용하여 필자가 원하는 형태로 데이터를 재구성 하겠다.
※ stack : 컬럼을 인덱스로 변환 (Series 형식으로 변환됨)
※ unstack : 인덱스를 컬럼으로 변환
※ reset_index : 인덱스 제거 (열로 변환)
index = pd.MultiIndex.from_product([[2019, 2020, 2021, 2022, 2023], ['spring', 'summer', 'fall', 'winter']],
names = ['year', 'season'])
column = pd.MultiIndex.from_product([['서울', '인천', '대전', '부산'], ['인구수', '관광객수']],
names = ['region', 'col'])
df_rand = np.random.rand(20, 8)
df = pd.DataFrame(df_rand, index=index, columns=column)
df
먼저, 해당 데이터의 컬럼(column)과 인덱스(index)를 확인해보자.
컬럼은 region과 col이 멀티 컬럼인 것을 확인할 수 있고,
인덱스는 year와 season이 멀티 인덱스인 것을 확인할 수 있다.
df.columns # 컬럼 확인
df.index # 인덱스 확인
stack() 함수를 이용하면,
level 등별도의 설정을 하지 않으면 region과 col 컬럼 중 두번째에 위치한 col 컬럼이 index에 위치하게 된다.
df.stack()
unstack() 함수를 이용하면,
마찬가지로 별도의 설정이 없으면 year와 season 인덱스 중 두번째에 위치한 season이 column에 위치하게 된다.
df.unstack()
자! 이제 정말로 필자가 원하는 데이터로 재구성 하겠다.
엄청 간단하다.
먼저, stack() 함수를 이용할 것이고 "level"을 설정한다.
필자는 첫번째 컬럼 region을 level로 설정하였고, reset_index() 함수를 이용하여 인덱스를 열로 변환하였다.
아래 보이는 것처럼, 필자가 원하는 형식의 데이터로 재구성 하였다!
df_2 = df.stack(level='region').reset_index()
df_2
이렇게 완성된 최종 데이터는 csv 파일로 저장한다.
주의할 것은 한글 깨짐 방지를 위해 encoding 설정이 필요하다. encoding = 'euc-kr' 로 설정하였다.
df_2.to_csv('df_result.csv', index=False, encoding='euc-kr')
[참고자료]
'분석가 Step 1. 데이터 분석 > Python' 카테고리의 다른 글
지오코딩(Geocoding), 역지오코딩(Geocoding-reverse) 편 (0) | 2023.07.07 |
---|---|
데이터 분석의 기초, 데이터 파악하기 (0) | 2023.06.29 |
데이터 파일 인코딩 확인하기 (0) | 2023.06.22 |
특정 폴더 안의 특정 파일(목록) 반복해서 가져오기 (0) | 2023.03.16 |
특정 폴더 안의 파일(목록) 가져오기 (0) | 2023.03.16 |