-
Pandas DataFrame Index 판다스 데이터프레임 인덱스 수정▶파공's 취미 생활/▷파이썬 공부 2021. 7. 13. 18:08
안녕하세요
파이어(F.I.R.E.)를 꿈꾸는 공룡
'파공' 입니다.
오늘은 Pandas DataFrame(판다스 데이터프레임)의
인덱스 수정 방법에 대해서 다양하게 보여드리겠습니다!
● 샘플 데이터 프레임 생성하기
우선 Pandas 라이브러리를 import 하고 샘플로 사용할 데이터프레임을 생성합니다.
(데이터프레임 만드는 법은 아래 링크를 참고해주세요!)
[▶파공's 취미 생활/▷파이썬 공부] - Pandas DataFrame 생성 만들기 (+ Numpy 행렬 이용하는법)
<코드>
df_1 = pd.DataFrame({'c1':['a','b','c','d'], 'c2':[1,2,3,4]}, index=['A','B','C','D'])df_1cs <실행 화면>
● 인덱스 수정 방법 1. _ 인덱스 새로 정의하기
<코드>
df_1.index = ['W','X','Y','Z']df_1cs <실행 화면>
가장 쉬운 방법입니다. 말 그대로 인덱스를 새로 정의하는 것이죠. 하지만, 문제가 있습니다. 지금처럼 데이터가 적은 경우에는 괜찮지만, 데이터가 많아지면 이렇게 일일이 인덱스를 다 적어줄 수 없습니다.
데이터 프레임에서
데이터 갯수 = 행의 갯수 = 인덱스의 갯수
이기 때문에 데이터가 많을 경우, 인덱스 갯수도 많아집니다. 이 방법은 기존 인덱스의 숫자만큼 일일이 다 적어줘야 되기 때문에 간단히 샘플을 연습할 때만 사용가능합니다.
● 인덱스 수정 방법 2. _ 특정 컬럼을 인덱스로 사용하기
<코드>
df_1df_2 = df_1.set_index('c1')df_2df_3 = df_1.set_index('c1', drop=False)df_3cs <실행 화면>
위 그림과 같이 데이터프레임 내부의 특정 컬럼을 인덱스로 이용하는 방법입니다.
.set_index() 에서 drop 파라미터의 기본값은 True 입니다. 그래서 df_2와 같이 'c1'컬럼을 인덱스로 사용하게되면, 기존의 데이터프레임에서 'c1'컬럼은 drop되게 됩니다.
하지만 drop 파라미터에 False를 넣어주게되면, df_3과 같이 'c1'컬럼은 인덱스로 쓰이면서도 기존 데이터프레임에 그대로 남게 됩니다.
● 인덱스 수정 방법 3. _ 인덱스 초기화 하기, 인덱스를 컬럼으로 가지고 들어오기
<코드>
df_1df_4 = df_1.reset_index()df_4df_5 = df_1.reset_index(drop=True)df_5cs <실행 화면>
이 방법은 인덱스를 그냥 초기화하는 방법입니다. 인덱스가 0, 1, 2, 3으로 바뀐 것을 확인하실 수 있죠?
.reset_index()는 .set_index()다르게, drop 파라미터의 초기값이 False입니다. 그래서 df_4와 같이 인덱스를 초기화 하게 되면, 기존의 인덱스를 drop시키지 않고 'index'라는 컬럼을 만들어 데이터프레임 안으로 가지고 들어옵니다.
반면에 drop 파라미터에 True를 넣어주게 되면, 인덱스가 초기화 되면서 df_5와 같이 기존의 인덱스는 그냥 사라지게 됩니다.
● 인덱스 수정 방법 4. _ 인덱스 순서 바꾸기
<코드>
df_1df_6 = df_1.reindex(['Z','Y','W','X'])df_6df_7 = df_1.reindex(['Z','Y'])df_7cs <실행 화면>
인덱스의 순서를 바꾸는 방법입니다. .reindex()를 사용하여 원하는 순서대로 인덱스를 다시 나열해주시면 됩니다. df_6과 같이 기존 인덱스를 다 적어주셔도 되고, df_7과 같이 덜 적어주셔도 됩니다.
주의할 점은! 인덱스 순서가 바뀌면 그 행의 데이터들이 같이 움직인다는 것입니다. 단순히 인덱스만 바꾸는 것이 아니라 데이터 전체가 같이 움직이는 것이죠.
그렇기 때문에 df_7과 같이 인덱스를 통해 원하는 데이터를 추출하는 방법으로도 사용할 수 있습니다.
● 인덱스 수정 방법 5. _ 특정 인덱스만 선택적으로 수정하기
<코드>
df_1#temp 열을 만들어서 기존의 인덱스를 가지고온다.df_1['temp'] = df_1.indexdf_1#loc를 사용해서 바꾸고 싶은 인덱스만 temp 열에서 바꿔준다.df_1.loc[['X'],['temp']] = 'NEW'df_1#temp열을 다시 인덱스로 가져오자.df_8 = df_1.set_index('temp',drop=True)df_8#인덱스 열에 temp라고 써있는게 싫다면 지워준다.df_8 = df_8.rename_axis('')df_8cs <실행 화면>
위 그림에서 보여드린 것은 한번에 딱 (메소드를 사용해서) 할 수 있는 방법은 아니고, 약간의 절차를 거쳐야하는 방법입니다. 데이터 전처리를 연습하다보면 아주 간혹! 데이터들은 그대로 둔 채, 인덱스 명만 바꾸고 싶을 때가 있더라구요. 그것도 딱 특정 몇 놈의 인덱스 만 바꾸고 싶을 때가 있다보니.... 그 방법을 보여드리려고 합니다. 물론, 저는 코린이이기 때문에 더 좋은 방법이 있으시다면 저도 좀 알려주세요..ㅠㅠ
절차들은 위 코드에 달아놓은 주석 참고해주시면 되구요. df_8과 df_1을 비교해보면 인덱스에서 딱 'X'만 'NEW'로 바뀐 것을 확인하실 수 있습니다.
오늘은 Pandas DataFrame (판다스 데이터프레임)을 다루는 방법들 중에서 Index (인덱스) 를 수정하는 여러가지 방법들에 대해서 말씀드려봤습니다. 도움이 되셨기를 바라겠습니다~^^
오늘도 글 읽어 주셔서 감사합니다!
Look Rich or Be Rich
현명한 선택을 응원합니다.
-파공-
'▶파공's 취미 생활 > ▷파이썬 공부' 카테고리의 다른 글
Pandas DataFrame csv파일 엑셀파일 불러오기 읽기, utf-8 에러 해결법 (0) 2021.07.20 Pandas DataFrame_.copy() 카피 메소드, 데이터프레임 중간에 행 추가 삽입 (2) 2021.07.17 파이썬 포맷팅 Format (feat. %, {}, f-string) 알아보기 (0) 2021.03.09 Pandas DataFrame 특정 로우(행) 호출, 수정, 추가, 삭제 하는 법 (4) 2021.01.20 Pandas DataFrame 특정 컬럼 열_호출 추가 삭제하기 (0) 2020.09.07