Pandas의 계층적인 색인 개념을 통해서, 데이터를 관리하자!!
- 계층적 색인
다중(둘이상)의 색인 단계를 정할수 있다.
높은차원의 데이타를 낮은 차원의 형식으로 처리함
- Series의 index를 List의 List(or 배열)로 색인을 구성할수 있다.
2개의 차이를 보면, 왼쪽 색인 영역이 2개 생긴다고 보면 된다.
- 하위 계층을 선택하는 것도 가능
해당 데이타에서 1,2,3 Level의 추출하기
- unstack, stack함수 : 행,열을 변경하여서 새롭게 배열 구성
- T함수도 행,열을 변경하는 것인데, 여기서 동작은 되지 않는다.
- T함수도 행,열을 변경하는 것인데, 여기서 동작은 되지 않는다.
- 인덱스는 크게 4가지 형태로 구성할수 있다.
- swaplevel : 계층의 순서를 바꾸고 정렬하기
- frame.swaplevel('key1', 'key2')
- 실제 데이타가 변경 되는것은 아니다.
- sort_index : 단일 계층에 속한 데이타를 정렬
- 잘 이해가 되지 않는다.
- set_index : 로우의 색인을 DataFrame의 럴럼으로 옮기고 싶을때
- frame.set_index([ 'c', 'd']) # 기존에 있는 사항은 삭제됨
- frame.set_index([ 'c', 'd'], drop=false) # 기존에 있는 사항이 유지됨
- reset_index : set_index로 설정된 사항의 index를 제거한다.
- Series의 index를 List의 List(or 배열)로 색인을 구성할수 있다.
- 데이터 합치기 (pandas의 데이타를 여러가지 방법으로 합칠 수 있다.)
- pandas.merge : 하나이상의 키를 기준으로 DataFrame의 로우를 합한다.
- 기존에 sql에 join과 비슷
- df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)})
- key는 임으로 설정한것이고, 지정을 하지 않는다면, 중복된 컬럼명을 사용해서 join한다.
- pd.merge(df1, df2) : 다대다 join을 의미한다.
- pd.merge(df1, df2, on='key') : join을 하려고 하는 컬럼을 명확히 지정해주는것이 좋다.
- pd.merge(df3, df4, left_on='lkey', right_on='rkey')
- 왼쪽, 오른쪽 컬럼명이 다를때, left_no, right_on으로 설정할 수 있다.
- how옵션
- 기존적으로는 how=inner의 설정이다.
- pd.merge(df1, df2, how='outer')
- inner : 양쪽 테이블 모두 존재하는 key
- left : 왼쪽 테이블에 존재하는 모든 key
- right : 오른쪽 테이블에 존재하는 모든 key
- outer : 양쪽 테이블에 존재하는 모든 key
- pd.merge(left, right, on='key1', suffixes=('_left', '_right'))
- key1으로 join이 되는데, 1개의 컬럼으로 보여지는게 아니고 suffixes 값이 붙어서 각각 표시된다.
- merge 함수 인자 목록
- P.320에 다양하게 정의됨
- pandas.concat : 하나의 축을 따라 객체를 이어 붙인다.
- conbile_first : 인스턴스 메소드는 두 객체를 포개서 한객체에서 누락된 데이타를 다른 객체의 값으로 채운다.
- 색인 병합하기
- 컬럼으로 join을 하는것이 아니고, 색인(index)를 통해서 병합을 하는 방식도 있다.
- (컬럼과 색인)으로 join을 진행할수 있다.
- pd.merge(lefth, righth, left_on=['key1', 'key2'], right_index=True)
- pd.merge(left2, right2, how='outer', left_index=True, right_index=True)
- (색인과 색인)으로도 join을 할수 있겠지
- join을 사용해서 쉽게 처리 가능하다.
- left2.join(right2, how='outer')
- left2.join([right2, another]) : 이렇게 다른 DataFrame을 넣을 수도 있다.
- 이렇게 되면 left2, right2, another의 사항이 모두 합해서 나온다.
- 축 따라 이어 붙이기
- Numpy
- concatenate 함수 제공
- np.concatenate([arr, arr], axis=1)
- Pandas
- concat함수 제공
- pd.concat([s1, s2, s3], axis=1)
- axis=0이 기본값
- axis=1은 컬럼을 의미 (결과가 Series가 아닌, DataFrame이 된다.)
- pd.concat([s1, s4], axis=1, join='inner') # join방식 정하기
- pd.concat([s1, s1, s3], keys=['one', 'two', 'three']) # key정하기
- pd.concat([df1, df2], axis=1, keys=['level1', 'level2'])
- pd.concat({'level1': df1, 'level2': df2}, axis=1)
- pd.concat([df1, df2], axis=1, keys=['level1', 'level2'], names=['upper', 'lower'])
- concat 함수 인자 (P.331)
- 겹치는 데이타 합치기
- 병합이나 이어붙이기가 불가능한 상황
- 두 데이터셋의 색인이 일부 겹치거나, 전체가 겹치는 경우
- 벡터화된 if-else구문을 표현하는 Numpy의 where함수
- np.where(pd.isnull(a), b, a) # where구문 사용
- df1.combine_first(df2) # 객체에서 누락된 데이타를 인자로 넘긴 객체에 있는 값으로 채움
- Numpy
- pandas.merge : 하나이상의 키를 기준으로 DataFrame의 로우를 합한다.
- 재형성과 피벗 (같은 의미)
데이터를 재배치하는 다양한 기본연산자 제공
- stack : 컬럼 → 로우로 회전
- unstack : 로우 → 컬럼으로 회전
- periods = pd.PeriodIndex(year=data.year, quarter=data.quarter, name='date')
- 시간 간격을 나타내기 위한 자료형 (시간과 관련된 여러 데이타가 있으면 이렇게 합해서 1개로 구성)
- pivot :
- 좀더 볼것
- pandas.melt
- pivot과 반대되는 개념
- 넓은 형식에서 긴 형식으로 피벗하는 역활
'파이선' 카테고리의 다른 글
시계열 (chap11) (0) | 2021.09.15 |
---|---|
데이타 집계와 그룹연산 (chap10) (0) | 2021.09.06 |
데이터 정제 및 준비 (chap7) (0) | 2021.09.02 |
데이터 로딩과 저장, 파일형식 (chap6) (0) | 2021.09.02 |
pandas 시작하기 (chap5) (0) | 2021.09.01 |