판다스에서 컬럼헤더를 변경하는 방법은 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개의 변수를 선언하는 대신 하나의 변수를 재활용함으로써 메모리 사용률을 극도로 아낄 수 있다. 단, 단점으로 코드의 가독성이 매우 떨어지게 된다.
'개발자 > Python' 카테고리의 다른 글
Python (파이썬) Matplotlib 시각화를 해보자 (0) | 2020.04.27 |
---|---|
Python (파이썬) Matplotlib 한글 깨짐 해결 (0) | 2020.04.27 |
Python (파이썬) SqlAlchemy 모듈 (engine) (0) | 2020.04.26 |
Python (파이썬) for문 심화 및 데이터 정제 심화 문제 (0) | 2020.04.26 |
Python (파이썬) DB 엔진을 활용, Pandas로 SQL을 이용해 불러오고 내보내기 (0) | 2020.04.26 |