파이썬 버전 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 |
|
|
|
|
'Python > Pandas' 카테고리의 다른 글
행과 열로의 함수 적용을 위한 apply() 메서드-pandas(32) (0) | 2020.10.07 |
---|---|
연속적인 함수적용을 위한 pipe() 메서드-pandas(31) (0) | 2020.10.05 |
두 객체의 데이터 정렬을 위한 align() 메서드 - pandas(29) (0) | 2020.09.11 |
인덱스 정렬(순서 변경)을 위한 reindex() 메서드- pandas(28) (0) | 2020.09.08 |
데이터셋활용 누락값 채우기, 데이터 조합-pandas(27) (0) | 2020.04.21 |
댓글