본문 바로가기

배우기/복습노트[Python과 분석]

[복습] Python long data ↔ wide data 변환(stack, unstack)

728x90
반응형

in R) stack / unstack, reshape2::melt(long data로 만들기), dcast(wide data로 만들기)

 

 

** long data / wide data 차이

1. long data

  - join 연산 가능

  - group 연산 용이

  - DBMS에 저장되는 형식

 

 

2. wide data

  - 교차표

  - 요약정보(가독성이 좋음)

  - 행별, 열별 연산이 용이

  - join 불가 ★

  - 시각화, 범주형 분석 시 필요

 

 

 

 

1. unstack: long data → wide data

 

df1.unstack(level = -1,            # unstack 처리할 level (-1이 디폴트, 맨 마지막 레벨)

                    fill_value)

 

예) 일반적인 unstack 처리

위 데이터를 unstack 처리를 하여보자.

 

 

파이썬은 멀티컬럼을 지원하므로 wide 결과도 멀티 컬럼으로 도출된다.

 

 

 

mon 이 컬럼 방향으로 펼쳐진 wide data가 출력되었다.

 

 

 

unstack할 레벨을 level = 'year' 이렇게 작성하면 unstack 처리할 level을 지정할 수 있다.

 

 

 

fill_value 옵션 예제

 

 

위 s1를 unstack 하면 2008년 3월이 NaN 값이 출력된다. 이 NaN 값을 0으로 출력하고자 한다면 다음과 같이 fill_value 옵션을 사용하면 된다.

 

 

하지만 fill_value 옵션이 아니라 fillna 메서드로도 가능하다.

 

 

 

 

 

 

 

2. stack: wide data → long data

 

df1.stack(level = -1,               # stack 처리할 level 번호 또는 이름

               dropna = True)        # NA행 제외

 

 

예) 일반적인 stack 처리

 

unstack 테스트 했을 때 데이터를 다시 불러들어왔다.

 

 

stack 메서드를 사용하면 DBMS에 쌓을 때의 데이터 형식으로 변환된다.

 

 

예) dropna 예제

df2와 같은 데이터가 있을 때 stack으로 데이터 형식으로 바꾸어보자.

 

 

NA를 가지고 있는 cell은 행으로 만들어지지 않는다(dropna = True 가 default 이기 때문).

 

 

 

이렇게 하면 NA 행이 생략되지 않고 출력이 된다.

 

 

728x90

 

 

 

연습문제

emp.csv 파일에서 부서별, job별 평균연봉을 교차테이블 형태로 출력하여라.

 

위처럼 나타내거나 또는,

 

 

행과 열을 바꿔 출력이 가능하다.  어떤 레벨을 unstack 할 것인지 명시하면 출력 형태가 바뀐다.

728x90
반응형