본문 바로가기
IT/Data Analysis with python

데이터 준비하기: 조인, 병합, 변형

by Cyber_ 2024. 6. 17.

1. 계층적 색인

  • 계층적 색인(hierarchical indexing)은 판다스의 중요한 기능이며 축에 대해 둘 이상의 색인 단계를 지정할 수 있도록 한다.
  • 고차원의 데이터를 낮은 차원의 형식으로 다룰 수 있게 해주는 기능이다.
data = pd.Series(np.random.uniform(size=9),
index=[["a","a","a","b","b","c","c","d","d"],[1,2,3,1,3,1,2,2,3]]

data

# 출력결과
a 1 0.929616  
2 0.316376  
3 0.183919  
b 1 0.204560  
3 0.567725  
c 1 0.595545  
2 0.964515  
d 2 0.653177  
3 0.748907  
  • 위 객체는 MultiIndex를 색인으로 하는 Series이며 색인의 계층을 확인할 수있다. 바로 위 단계의 색인을 이용해서 하위 계층에 직접 접근할 수 있다.
data.index

# 출력결과
MultiIndex([('a',1),
            ('a',2),
            ('a',3),
            ('b',1),
            ('b',3),
            ('c',1),
            ('c',2),
            ('d',2),
            ('d',3),],
            )
  • 계층적으로 색인된 객체는 데이터의 부분집합을 부분적 색인으로 접근하는 것이 가능하다.
data["b"]

# 출력결과
1 0.204560
3 0.567725

data["b":"c"]

# 출력결과
b 1 0.204560
  3 0.567725
c 1 0.595545
  2 0.964515
dtype: float64


data.loc[["b","d"]]
# 출력결과
b 1 0.204560
  3 0.567725
d 2 0.653177
  3 0.748907
  • 하위 계층의 객체를 선택하는 것도 가능하다. 다음 코드는 두 번째 단계 색인이 2인 모든 값을 선택한다.
data.loc[:,2]

# 출력결과
a 0.316376  
c 0.964515  
d 0.653177  
dtype: float64  
  • 계층적 색인은 데이터를 재구성하고 피벗 테이블 생성 같은 그룹 기반으로 작업할 때 중요하게 사용된다. 앞서 만든 DataFrame 객체에 unstack 메서드를 사용해 데이터를 새롭게 배열할 수 있다.
data.unstack()

# 출력결과
    1        2         3
a 0.929616 0.316376 0.183919
b 0.204560      NaN 0.567725
c 0.595545 0.964515      NaN
d      NaN 0.653177 0.748907
  • unstack의 반대는 작업은 stack 메서드 수행
  • DataFrame에서는 두 축 모두 계층적 색인을 가질 수 있다.

1) 계층의 순서를 바꾸고 정렬하기

  • 계층적 색인에서 계층의 순서를 바꾸거나 특정 계층에 따라 데이터를 정렬해야 하는 경우가 있다. swaplevel은 넘겨받은 두 개의 계층 번호나 이름이 뒤바뀐 새로운 객체를 반환한다.
  • 기본적으로 sort_index메서드는 모든 색인 계층을 사용해 사전 수으로 데이터를 정렬한다.

2) 계층별 요약 통계

  • DataFrame과 Series의 많은 기술 통계와 요약 통계는 level 옵션을 갖는다. 이는 어떤 하나의 축에 대해 합을 구하고 싶은 단계를 지정하는 옵션이다.

3) DataFrame의 열 사용하기

  • DataFrame에서 행을 선택하기 위한 색인이나 하나 이상의 열을 사용하는 것은 드물지 않은 일이다.
  • DataFrame의 set_index함수는 하나 이상의 열을 색인으로 하는 새로운 DataFrame을 생성한다.

2. 데이터 합치기

  • 판다스 객체에 저장된 데이터를 합치는 방법은 여러가지이다.
    • padas.merge: 하나 이상의 키를 기준으로 DataFrame의 행을 연결한다. SQL이나 다른 관계형 데이터베이스의 조인 연산과 유사하다.
    • pandas.concat:한의 축을 따라 객체를 이어 붙인다.
    • combine_first: 두 객체를 겹쳐서 한 객체에서누락된 데이터를 다른 객체에 있는 값으로 채운다.

3. 재구성과 피벗

  • 표 형식의 데이터를 재배치하는 다양한 기본 연산을 재구성 또는 피벗 연산이라고 부른다.

1) 계층적 색인으로 재구성하기

  • stack: 데이터의 열을 행으로 피벗(또는 회전)한다.
  • unstack: 행을 열로 피벗한다.

2) 긴 형식에서 넓은 형식으로 피벗하기

  • 데이터베이스나 CSV 파일에 여러 개의 시계열 데이터를 저장하는 일반적인 방법은 시간 순서대로 나열하는 방법이다.
  • 이 형식에서 개별 값은 표에서 단일 행으로 표시된다.

3) 넓은 형식에서 긴 형식으로 피벗하기

  • pivot과 반대되는 형식은 pandas.melt다. 하나의 열을 여러 개의 새로운 DataFrame으로 생성하지 않고, 여러 열을 하나로 병합해 입력보다 긴 DataFrame을 만든다.