[Python pandas] DataFrame의 칼럼 이름 바꾸기 : df.columns = [], df.rename(columns)
Python 분석과 프로그래밍/Python 데이터 전처리 2019. 8. 14. 00:37이번 포스팅에서는 Python pandas DataFrame의 칼럼 이름 바꾸는 방법(how to change column name in python pandas DataFrame), index 이름을 바꾸는 방법(how to change index name in python pandas DataFrame)을 소개하겠습니다.
(1) pandas DataFrame의 칼럼 이름 바꾸기
: df.columns = ['a', 'b']
: df.rename(columns = {'old_nm' : 'new_nm'}, inplace = True)
(2) pandas DataFrame의 인덱스 이름 바꾸기
: df.index = ['a', 'b']
: df.rename(index = {'old_nm': 'new_nm'}, inplace = True)
(1) Python pandas DataFrame 의 칼럼 이름 바꾸기 |
예제로 사용할 간단한 pandas DataFrame을 만들어보겠습니다.
In [1]: import pandas as pd In [2]: df = pd.DataFrame({'id': ['a', 'b', 'c', 'd'], ...: 'col_1': [1, 2, 3, 4], ...: 'col_2': [1, 1, 2, 2]}, ...: columns = ['id', 'col_1', 'col_2']) In [3]: df Out[3]: id col_1 col_2 0 a 1 1 1 b 2 1 2 c 3 2 3 d 4 2 In [4]: df.columns Out[4]: Index(['id', 'col_1', 'col_2'], dtype='object') |
(1-1) df.columns = ["new_1", "new_2"] 를 이용한 칼럼 이름 바꾸기
In [5]: df.columns = ["group", "val_1", "val_2"] In [6]: df Out[6]: group val_1 val_2 0 a 1 1 1 b 2 1 2 c 3 2 3 d 4 2 |
df.columns 메소드를 사용해서 칼럼 이름을 변경하고자 하는 경우, DataFrame의 칼럼 개수 (number of columns in DataFrame)를 정확하게 일치시켜주어야 합니다. DataFrame의 칼럼 개수와 df.columns = [xx, xx, ...] 의 칼럼 개수가 서로 다를 경우 ValueError: Length mismatch 에러가 발생합니다.
# need to match the number of columns # ValueError: Length mismatch In [7]: df.columns = ["group", "val_1"] # length mismatch error ...: Traceback (most recent call last): File "<ipython-input-7-5ab3ecd42fe8>", line 1, in <module> df.columns = ["group", "val_1"] ... 중간 생략 ... File "C:\Users\admin\Anaconda3\lib\site-packages\pandas\core\internals\managers.py", line 155, in set_axis 'values have elements'.format(old=old_len, new=new_len)) ValueError: Length mismatch: Expected axis has 3 elements, new values have 2 elements |
(1-2) df.rename(columns = {"old_1": "new_1", "old_2": "new_2"}, inplace=True) 를 이용하여 칼럼 이름 변경하기
In [8]: df.rename(columns = {"id": "group", ...: "col_1": "val_1", ...: "col_2": "val_2"}, inplace = True) ...: In [9]: df Out[9]: group val_1 val_2 0 a 1 1 1 b 2 1 2 c 3 2 3 d 4 2 |
df.columns 메소드와는 달리 df.rename(columns = {'old': 'new'}) 함수는 DataFrame의 칼럼 개수를 맞추어줄 필요가 없으며, 특정 칼럼 이름만 선별적으로 바꿀 수 있습니다. 아래 예제는 "group" 칼럼 이름을 "ID_2" 라는 새로운 칼럼 이름으로 바꾸어준 예입니다.
In [10]: df.rename(columns = {"group": "ID_2"}, inplace = True) In [11]: df Out[11]: ID_2 val_1 val_2 0 a 1 1 1 b 2 1 2 c 3 2 3 d 4 2 |
lambda 함수를 사용하여서 기존 DataFrame의 칼럼 앞에 "X_" 라는 접두사(prefix)를 붙인 새로운 칼럼 이름을 만들어보겠습니다.
In [14]: df = pd.DataFrame({'id': ['a', 'b', 'c', 'd'], ...: 'col_1': [1, 2, 3, 4], ...: 'col_2': [1, 1, 2, 2]}, ...: columns = ['id', 'col_1', 'col_2']) In [15]: df Out[15]: id col_1 col_2 0 a 1 1 1 b 2 1 2 c 3 2 3 d 4 2 In [16]: df.rename(columns = lambda x: "X_" + x, inplace = True) In [17]: df Out[17]: X_id X_col_1 X_col_2 0 a 1 1 1 b 2 1 2 c 3 2 3 d 4 2 |
(2) DataFrame의 Index 이름 바꾸기 |
(2-1) df.index = ['new_idx1', 'new_idx2'] 을 이용하여 Index 이름 바꾸기
이때 DataFrame의 index 개수와 바꾸고자 하는 index 이름의 개수를 서로 맞추어주어야 합니다.
In [17]: df Out[17]: X_id X_col_1 X_col_2 0 a 1 1 1 b 2 1 2 c 3 2 3 d 4 2 In [18]: df.index Out[18]: RangeIndex(start=0, stop=4, step=1) In [19]: df.index = ['a', 'b', 'c', 'd'] In [20]: df Out[20]: X_id X_col_1 X_col_2 a a 1 1 b b 2 1 c c 3 2 d d 4 2 |
(2-2) df.rename(index = {'old_idx': 'new_idx'}, inplace = True) 를 이용한 index 이름 바꾸기
In [21]: df.rename(index = {0: 'a', ...: 1: 'b', ...: 2: 'c', ...: 3: 'd'}, inplace = True) In [22]: df Out[22]: X_id X_col_1 X_col_2 a a 1 1 b b 2 1 c c 3 2 d d 4 2 |
pandas DataFrame의 칼럼 순서 변경하기는 https://rfriend.tistory.com/680 를 참고하세요.
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감~
'를 꾹 눌러주세요. :-)