본문 바로가기
Python/Pandas

인덱스(레이블) 수정을 위한 rename() 메서드-pandas(30)

by 콩돌 2020. 9. 13.
반응형

파이썬 버전 3.8 기준

pandas 버전 1.1.1 기준


 인덱스(레이블) 수정을 위한 rename() 메서드


본 포스팅에서는 rename() 메서드에 대해 다루도록 한다.


 rename() 메서드


rename() 메서드는 사용자에게 매핑(mapping) 혹은 임의의 함수를 기반으로 축의 레이블을 다시 설정할 수 있도록 한다. 

메서드 사용형식은 아래와 같다.


메서드 사용 형식)

result=object.rename(mapper, index, columns, axis=0, inplace=False)

 

각 입력 객체별 설명은 다음과 같다.

  ○ object: 데이터의 레이블을 변경하기 위해 메서드가 적용되는 객체(DataFrame, Series)이다.

  ○ mapper: 레이블을 대체할 기존레이블과 변경할 레이블이 매치되는 딕셔너리를 입력받는다.

    ▷ 즉, 딕셔너리와 같은 자료형을 입력받는다.

  ○ index: 행(row)의 인덱스를 대체할 기존레이블과 변경할 레이블이 매치되는 딕셔너리를 입력받는다.

  ○ columns: 열(column)의 인덱스를 대체할 기존레이블과 변경할 레이블이 매치되는 딕셔너리를 입력받는다.

  ○ axis: 레이블을 대체할 축을 입력받으며 위의 mapper와 같이 사용된다.

  ○ inplace: 기본값은 False이며, True일 경우 기존 object의 레이블을 변경시킨다.


 rename()메서드의 사용 예제

본 포스팅에서는 다음과 같이 pandas와 numpy를 import시킨 후 예제를 수행하였다.

  ○ 본 포스팅에서는 numpy는 딱히 쓰지는 않지만 습관적으로 그랬다.


모듈의 임폴트)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np

 

만약 사용자가 함수를 입력한다면, 하나의 레이블이 입력됬을 때 반드시 하나의 값을 반환해야한다.

또한 함수가 아니라 하나의 dict나 Series가 사용될 수 있다.

아래 예제는 함수와 딕셔너리를 사용한 데이터의 변경 예제를 보여준다.

 

Series에 대한 rename() 메서드 사용 예제)

# 예제 Series의 정의

In[4]: sample_s = pd.Series([1.1, 2.2, 3.3, 4.4, 5.5], index=['a', 'b', 'c', 'd', 'e'])


# rename 사용 예제(함수)

In[5]: sample_s.rename(str.upper)

Out[5]: 

A    1.1

B    2.2

C    3.3

D    4.4

E    5.5

dtype: float64


# rename 사용 예제(딕셔너리)

In[6]: sample_s.rename({'a':'one', 'b':'two', 'c':'three', 'd':'four', 'e':'five'})

Out[6]: 

one      1.1

two      2.2

three    3.3

four     4.4

five     5.5

dtype: float64

 

만약 매핑이 기존 열 혹은 인덱스의 레이블에 존재하지 않는다면, 레이블이 변경되지 않는다.

기본적으로 매핑내에에서 남는 레이블은 에러를 발생시키지 않는다.

  ○ errors 입력변수에 'raise'를 입력할 경우에는 남는 레이블이 있으면 KeyError를 발생시킨다.


DataFrame의 경우 기본적으로 2차원으로 구성되어 있는데 이 경우 2가지 방법을 통해 레이블을 대체할 수 있다.

  ○ 먼저 index와 columns 변수를 이용하는 방법이 존재한다.

    ▷ index와 columns 입력변수에 Series, 딕셔너리, 함수 등을 입력하여 변경하는 방법이다. 

  ○ "axis-style" 호출 규칙을 제공한다.

    ▷ mapper에는 Series, 딕셔너리, 함수 등을 입력하고 변경을 수행할 축은 axis 입력변수에 입력하여 해당 축의 레이블을 변경하는 방법이다.


DataFrame에 대한 rename() 메서드 사용 예제)

# 예제 DataFrame의 정의

In[7]: sample_df=pd.DataFrame([[1.1, 1.2, 1.3, 1.4], [2.1, 2.2, 2.3, 2.4], [3.1, 3.2, 3.3, 3.4]], index=['a', 'b', 'c'], columns=['A','B','C','D'])


# rename()메서드 사용 예제(index 및 columns 입력변수 활용)

In[8]: sample_df.rename(index={'a': 'one','b': 'two','c': 'three'}, columns={'A':'AA','B':'BB','C':'CC','D':'DD'})

Out[8]: 

        AA   BB   CC   DD

one    1.1  1.2  1.3  1.4

two    2.1  2.2  2.3  2.4

three  3.1  3.2  3.3  3.4


# rename()메서드 사용 예제(mapper 및 axis 입력변수 사용)

In[9]: sample_df.rename({'a': 'one','b': 'two','c': 'three'}, axis=0)

Out[9]: 

         A    B    C    D

one    1.1  1.2  1.3  1.4

two    2.1  2.2  2.3  2.4

three  3.1  3.2  3.3  3.4


In[10]: sample_df.rename({'A':'AA','B':'BB','C':'CC','D':'DD'}, axis=1)

Out[10]: 

    AA   BB   CC   DD

a  1.1  1.2  1.3  1.4

b  2.1  2.2  2.3  2.4

c  3.1  3.2  3.3  3.4


rename() 메서드는 inplace 입력변수를 제공한다.

  ○ 이는 기본값으로 False로 되어있으며, 기초데이터를 복사한다.

  ○ inplace=True를 입력 할 경우 기존 데이터에서 인덱스를 교체한다.


inplace 입력변수 사용 예제)

# inplace 입력변수의 활용 

In[11]: sample_df.rename(index={'a': 'one','b': 'two','c': 'three'}, columns={'A':'AA','B':'BB','C':'CC','D':'DD'}, inplace=True)

In[12]: sample_df

Out[12]: 

        AA   BB   CC   DD

one    1.1  1.2  1.3  1.4

two    2.1  2.2  2.3  2.4

three  3.1  3.2  3.3  3.4


rename() 메서드를 사용하면 Series.name 어트리뷰트에 입력되있는 데이터를 변경시킬 수 있다.

해당 예제는 다음과 같이 적용할 수 있다.

 

Series에 대한 name 어트리뷰트 변경 배정 예제)

# name 어트리뷰트의 변경 

In[13]: sample_s.rename('the New Name')

Out[13]: 

a    1.1

b    2.2

c    3.3

d    4.4

e    5.5

Name: the New Name, dtype: float64


DatFrame.rename_axis(), Series.rename_axis() 메서드는 멀티인덱스의 이름을 변경할 수 있게한다.


멀티인덱스에 대한 rename_axis() 메서드 사용 예제)

# 예제 멀티인덱스 DataFrame의 정의

In[14]: sample_df2= pd.DataFrame({'A': [1.1, 1.2, 1.3, 1.4, 1.5, 1.6], 'B': [2.1, 2.2, 2.3, 2.4, 2.5, 2.6]}, 

...:     index=pd.MultiIndex.from_product([['a', 'b', 'c'], ['aa', 'bb']],names=['one', 'two']))


In[15]: sample_df2

Out[15]: 

           A    B

one two          

a   aa   1.1  2.1

    bb   1.2  2.2

b   aa   1.3  2.3

    bb   1.4  2.4

c   aa   1.5  2.5

    bb   1.6  2.6


# 멀티인덱스에 대한 rename_axis()메서드 사용 예제

In[16]: sample_df2.rename_axis(index={'one':'ONE!'})

Out[16]: 

            A    B

ONE! two          

a    aa   1.1  2.1

     bb   1.2  2.2

b    aa   1.3  2.3

     bb   1.4  2.4

c    aa   1.5  2.5

     bb   1.6  2.6


In[17]: sample_df2.rename_axis(index=str.upper)

Out[17]: 

           A    B

ONE TWO          

a   aa   1.1  2.1

    bb   1.2  2.2

b   aa   1.3  2.3

    bb   1.4  2.4

c   aa   1.5  2.5

    bb   1.6  2.6



 .rename() 메서드 세부사항


축 레이블을 변경하는 메서드이다.


함수 혹은 딕셔너리(dict) 값들이 기존 레이블과 1:1로 매칭이 되어야한다. 

딕셔너리나 Series에 포함되지 않은 레이블은 그대로 유지된다.

추가 레이블은 오류를 발생시키지 않는다.


 DataFrame.rename(**kwargs)


mapper: dict-like or function

해당 축에 적용할 딕셔너리와 유사한 자료형이나 함수를 입력받는다. 

입력된 mapper와 입력된 축을 사용하여 열이나 행의 인덱스를 대체한다.

 

index: dict-like or function

기존 행의 인덱스를 대체할 객체를 입력받는다.

axis=0 / 'index'를 입력하고 mapper를 입력한 것과 동일한 결과를 보여준다.

 

columns: dict-like or function

기존 열의 인덱스를 대체할 객체를 입력받는다.

axis=1 / 'columns'를 입력하고 mapper를 입력한 것과 동일한 결과를 보여준다.

 

axis: {0 or ‘index’, 1 or ‘columns’}

기본값은 0이며 행의 인덱스를 대체한다.

mapper를 사용하여 인덱스를 대체할 축을 입력받는다.

  ○ 'index' / 0 : 'index'나 0이 입력될 경우 행(row)의 인덱스를 대체한다.

  ○ 'columns' / 1 : 'columns'이나 1이 입력될 경우 열(columns)의 인덱스를 대체한다.

 

copy: bool

기본값은 True이다.

기본 데이터를 복사한다.


inplace: bool, default False

기본값은 False이다.

새로운 DataFrame을 반환할지 아닐지 결정한다.

만약 True일 경우 copy 입력변수에 입력된 값은 무시된다.


level: int or level name

기본값은 None이다.

멀티인덱스(MultiIndex)를 사용할 경우 멀티인덱스의 레벨(level)을 명시한다.


errors: {‘ignore’, ‘raise’}, 

기본값은 ‘ignore’이다.

만약 'raise'일 경우, mapper 혹은 index, columns가 인덱스에 없는 레이블에 포함되어 있으면 KeyError를 발생시킨다. 

만약 'ignore'라면 기존에 존재하던 key는 레이블이 대체되고, 남은 key는 무시된다.



 

 

 

 

 참고자료

  https://pandas.pydata.org/docs/user_guide/basics.html

  https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rename.html

 

 

 

 


반응형

댓글