판다스에서 컬럼헤더를 변경하는 방법은 2가지가 있다.

 

우선 첫 번째는 컬럼헤더를 재정의 하면 된다.

import pandas as pd

targetUrl = "../exampleCode/dataset/kopo_region_mst_hangul.csv"

indata = pd.read_csv(targetUrl, encoding="cp949")    # 윈도우 한글 인코딩 문제로 넣어줌.
indata.head(2)

indata.columns    # 컬럼 헤더 확인.

결과 :

Index(['REGIONID', 'REGIONNAME'], dtype='object')



indata.columns = ['rID','rNAME']    # 컬렘 헤더 재정의.
indata.columns    # 컬럼 헤더 조회.

결과 :

Index(['rID', 'rNAME'], dtype='object')

 

 

두 번째는 rename을 해주면 된다. 여기서 inplace 개념이 등장한다!!

indata.rename(columns={'rID':'RegionID',          # .columns로 하면 바로 재정의 되어 저장이 되는데
                       'rNAME':'RegionName'})     # .rename은 저장이 되지 않는다.

 

결과를 보면 바뀐 것 같아 보이지만 다시 indata를 출력해보면

indata.head(2)

indata.head를 다시 조회해보니 변경이 되지 않았다. 왜 그럴까?

 

스위프트에서는 ABC.sort()를 하면 바로 저장되는데 파이썬에서는 ABC.sort()를 하면 저장이 되지 않고 ABC= ABC.sort()를 해야 했던 것과 비슷하다.

파이썬의 일부 함수에는 inplace라는 옵션이 있다.

그렇다... 역시 코딩을 하려면 영어를 잘 해야한다 ㅠㅠ

가동은 하지 않고 준비만 하는 것이다. 즉, 클립보드 상태로만 실행을 하는 것이다. 따라서 이것을 반영하려면 다른 변수에 담아주거나, inplace 옵션을 True로 주면 된다.

정리해보면

ABC.rename(columns = {'aa':'A','bb':'B'}):ABC 데이터프레임의 컬럼헤더를 aa, bb에서 A, B로 변경하기.
파이썬에는 inplace라는 옵션을 가지는 함수가 있다. inplace=False : 저장 안 함.   inplace=True 저장함.
rename 함수의 inplace 기본값은 False로 저장하려면 다른 변수에 넣어주거나 .rename({ },inplace=True) 옵션을 준다.

 

 

그렇다면 실습을 해보자.

원본 indata

indata.head(2)

 

1 ) rename한 것을 다른 변수에 담기.

indata2 = indata.rename(columns={'rID':'RegionID',
                                 'rNAME':'RegionName'})    # indata2에는 저장이 된다. indata는 원본 그대로다.

indata2.head(2)

indata2에는 변경된 것이 반영되어 잘 저장되었음을 알 수 있다.

물론, 이를 활용하여 다시 자기 자신에게 넣을 수도 있다.

indata = indata.rename(columns={'rID':'reID',
                                'rNAME':'reName'})
indata.head(2)

 

2 ) rename을 할 때 inplace=True 옵션 주기.

# 다시 원본 컬럼 헤더로 재정의.
indata.columns = ['rID','rNAME']    # 컬렘 헤더 재정의.
indata.columns    # 컬럼 헤더 조회.
indata.rename(columns={'rID':'RegionID',
                       'rNAME':'RegionName'},
              inplace=True)    # inplace라는 옵션이 있는 경우 클립보드 실행만 할지, 저장을 할지를 결정할 수 있다. rename의 inplace 기본값은 'False'이다. 이걸 'True'로 바꿔주면 저장이 된다.
indata.columns

결과 :

Index(['RegionID', 'RegionName'], dtype='object')

 

 

그렇다면 inplace는 왜 쓸까?

위에서 봤듯이 처음부터 원본을 바꿀거면 그냥 columns로 재정의 하면 더 편하다. 마찬가지로 다른 변수에 컬럼 헤더만 바꿔 추가할 때도 그냥 데이터를 새 변수에 복사한 후 다시 columns로 재정의 하면 된다. 이렇게 보면 굳이 inplace를 사용할 필요가 없어보인다.

inplace의 장점은 100개의 데이터가 있다고 할 때 100개의 변수를 선언하는 대신 하나의 변수를 재활용함으로써 메모리 사용률을 극도로 아낄 수 있다. 단, 단점으로 코드의 가독성이 매우 떨어지게 된다.

 

+ Recent posts