-
[Python] tidy data, wide data 만들기 ( .melt, .pivot_table )Data Science/Python 2021. 1. 11. 23:41
라이브러리에 따라 다른 형태의 데이터를 필요로 하는데
seaborn 라이브러리는 tidy 형태의 데이터를 필요로 합니다.
먼저 데이터를 만들어 주겠습니다.
%matplotlib inline import pandas as pd import numpy as np import seaborn as sns table1 = pd.DataFrame( [[np.nan, 9], [20, 50], [13, 11]], index=['X', 'Y', 'Z'], columns=['A', 'B'])
이렇게 wide 형태의 데이터를 제공합니다.
추가로, transpose()를 이용하면
동일한 결과이지만 행과 열이 전치된 데이터를 만들 수 있습니다.
table2 = table1.transpose()
< wide -> tidy >
pandas의 melt 함수를 이용하면 tidy 형태로 바꿀 수 있습니다!
먼저 reset_index() 메서드로 인덱스를 리셋 시켜줍니다.
인덱스 값들을 DataFrame의 열로 옮겨주고, 새로운 정수 인덱스를 만들어줍니다.
table1 = table1.reset_index()
melt 를 사용할 때,
id_vars 에는 기준이 될 변수를 지정해주고, value_vars 에는 기준이 된 변수의 값으로 들어갈 변수를 지정해주면 됩니다.
이때 value_vars 를 지정하지 않으면 id_vars 로 설정되지 않은 모든 열을 사용합니다.
tidy = table1.melt(id_vars = 'index', value_vars = ['A', 'B'])
rename 으로 열의 이름을 수정할 수도 있습니다!
tidy = tidy.rename( columns = { 'index': 'row', 'variable': 'column', 'value': 'value' } )
seaborn 라이브러리로 시각화를 해볼 수 있어요
sns.catplot(x = 'row', y = 'value', col = 'column', kind = 'bar', data = tidy, height = 2);
< tidy -> wide >
반대로 pivot_table은 tidy 형태를 wide 형태로 바꿀 수 있습니다!
wide = tidy.pivot_table(index = 'row', columns = 'column', values = 'value')
'Data Science > Python' 카테고리의 다른 글
[Python] 문자열 한 글자씩 자르기 (0) 2021.05.19 [Python] 파이썬 자료형 - 리스트(List) (0) 2021.03.11 [Python] pandas로 데이터 합치기(concat, merge) (0) 2021.01.07 [Python] 문자를 숫자로, 형변환하기(.replace, .to_numeric) (0) 2021.01.04 [Python] 데이터 결측치(NaN) 제거, 대체하기 (0) 2021.01.03