오늘 할 일: 끝내주게 숨쉬기
article thumbnail

데이터 분석을 하다보면 파이썬에서 판다스 데이터프레임의 칼럼을 변경해야 하는 경우가 가끔 있습니다. 본 포스트에서는 칼럼 이름을 변경하는 방법에 대해 알아보겠습니다. 

 

먼저 사용할 임의의 데이터프레임을 생성하겠습니다.

import pandas as pd

df = pd.DataFrame({'id': ['a', 'b', 'c'], 
                   'date': ['20211030', '20211031', '20211031'],
                   'price': [1000, 2000, 2500]})
display(df)

 

칼럼명을 변경하는 방법은 크게 세 가지입니다. rename 메서드를 이용하는 방법, set_axis 메서드를 이용하는 방법, columns 어트리뷰트에 직접 할당하는 방법이 있는데요 하나씩 알아보겠습니다!

 

 

1. rename 메서드 이용하기

 

rename 메서드의 columns 파라미터에 딕셔너리를 지정하여 칼럼명을 변경할 수 있습니다. 딕셔너리의 key는 기존 칼럼명, value는 변경할 칼럼명으로 설정합니다. 변경을 원하는 칼럼만 설정해주어도 됩니다.

df_new = df.rename(columns={'id': 'no_cstmr', 'date': 'yymmdd', 'price': 'cost'})
display(df_new, df)

 

일반적으로 원본은 그대로 두기 때문에, rename을 적용해도 원본의 변수명은 기존과 동일한 것을 확인할 수 있습니다. 만약 원본의 변수명도 바로 바꾸고 싶다면, inplace 파라미터를 True로 설정합니다(default가 False로 설정되어 있기 때문)

df_copy = df.copy()
df_copy.rename(columns={'date': 'yymmdd', 'price': 'cost'}, inplace=True)
display(df_copy)

 

문자와 관련된 함수나 lambda를 사용하여 칼럼명을 변경할 수도 있습니다. str.upper 을 이용해 칼럼명을 모두 대문자로 변경해보겠습니다.

df.rename(columns=str.upper)

df.rename(columns=lambda x: 'col_' + x)

 

rename은 칼럼명 뿐만 아니라, 인덱스 이름을 변경하는 데에도 쓰일 수 있습니다. 칼럼명을 변경할 때와 마찬가지로 index 파라미터에 딕셔너리를 지정해주어 아래와 같이 사용합니다.

df.rename(index={0: '0th', 1: '1st', 2: '2nd'})

 

 

2. set_axis 메서드 이용하기

 

set_axis 메서드를 이용해 칼럼명을 변경할 수도 있습니다. axis=1과 axis='columns'는 동일한 의미입니다.

df.set_axis(['col_1', 'col_2', 'col_3'], axis=1)
df.set_axis(['col_1', 'col_2', 'col_3'], axis='columns')

 

rename 메서드에서와 마찬가지로 인덱스 이름도 변경할 수 있습니다.

df.set_axis(['idx_1', 'idx_2', 'idx_3'], axis=0)
df.set_axis(['idx_1', 'idx_2', 'idx_3'], axis='index')

 

판다스의 데이터프레임 객체뿐만 아니라 시리즈 객체도 rename 메서드와 set_axis 메서드를 이용하여 인덱스명을 변경할 수 있으니 참고하세요!

 

 

3. columns attribute 직접 변경하기

 

데이터프레임의 columns 어트립류트를 직접 변경함으로써 칼럼명을 바꿀 수도 있습니다. 먼저 현재 칼럼명이 어떻게 설정되어있는지 확인해보겠습니다.

print(df.columns)

 

칼럼명을 변경하기 위해 columns 어트리뷰트에 변경할 이름들을 리스트로 할당합니다.

df.columns = ['no_cstmr','yymmdd', 'cost']
display(df)

 

columns 어트리뷰트에 직접 할당하여 칼럼명을 변경하는 경우, 모든 칼럼명을 전부 작성해줘야 하고 + 원본 데이터의 칼럼명이 변경되기 때문에 조심해서 사용하시길 바랍니다!

 

 

참고

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

 

pandas.DataFrame.rename — pandas 1.3.4 documentation

If ‘raise’, raise a KeyError when a dict-like mapper, index, or columns contains labels that are not present in the Index being transformed. If ‘ignore’, existing keys will be renamed and extra keys will be ignored.

pandas.pydata.org

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.set_axis.html

 

pandas.DataFrame.set_axis — pandas 1.3.4 documentation

next pandas.DataFrame.set_flags

pandas.pydata.org