[Python] 인덱스 판다스, 데이터프레임,/ pandas, dataframe, index, reset_index, sort_index(), set_index, drop=true

김대현·2024년 7월 15일

인덱스란?

인덱스는 데이터에 접근할 수 있는 주소값 정도로 이해하면 된다. 예를 들어, 리스트에서 인덱스를 사용하는 방법을 떠올려보자.

# 리스트 예제
lst = ['유재석', '하하']
print(lst[0])  # 출력: 유재석
print(lst[1])  # 출력: 하하
  • 리스트에서는 0, 1 같은 숫자 인덱스를 사용하여 요소에 접근할 수 있다. 데이터 프레임에서도 기본적으로 숫자 인덱스를 사용하지만, 사용자 지정 인덱스를 사용할 수도 있다.

사용자 지정 인덱스

이제 슬램덩크 농구 선수 데이터를 사용하여 데이터 프레임을 생성하고 사용자 지정 인덱스를 설정해보자.

      이름   학교    키  국어  영어  수학  과학  사회       SW특기
1번  채치수  북산고  197   90   85  100   95     85    	Python
2번  정대만  북산고  184   40   35   50   55     25         Java
3번  송태섭  북산고  168   80   75   70   80     75  	Javascript
4번  서태웅  북산고  187   40   60   70   75     80          
5번  강백호  북산고  188   15   20   10   35     10          
6번  변덕규  능남고  202   80  100   95   85     80            C
7번  황태산  능남고  188   55   65   45   40     35       PYTHON
8번  윤대협  능남고  190  100   85   90   95     95           C#

(1) 인덱스 접근 및 이름 설정

아래처럼 인덱스 값에 접근하고 이름을 설정할 수 있다.

# 인덱스 값 확인
print(df.index)

Index([1, 2, 3, 4, 5, 6, 7, 8], dtype='object')

인덱스에 이름을 설정해보자.

# 인덱스 이름 설정
df.index.name = '지원번호'
print(df)

# 출력 결과:
     이름   학교    키  국어  영어  수학  과학  사회       SW특기
지원번호                                       
1번  채치수  북산고  197   90   85  100   95    85    	Python
2번  정대만  북산고  184   40   35   50   55    25        Java
3번  송태섭  북산고  168   80   75   70   80    75  Javascript
4번  서태웅  북산고  187   40   60   70   75    80          
5번  강백호  북산고  188   15   20   10   35    10          
6번  변덕규  능남고  202   80  100   95   85    80           C
7번  황태산  능남고  188   55   65   45   40    35      PYTHON
8번  윤대협  능남고  190  100   85   90   95    95          C#

(2) 인덱스 리셋

아래처럼 reset_index 를 사용해 인덱스를 초기화하고 기존 인덱스를 컬럼으로 변환할 수도 있다.
이때 inplace=True를 사용하여 실제 데이터 프레임에 변경사항을 반영할 수 있다.

# 인덱스 리셋 (기존 인덱스를 컬럼으로 유지)
df.reset_index()
df

   지원번호   이름   학교    키  국어  영어  수학  과학 사회     SW특기
0     1번  채치수  북산고  197   90   85  100   95   85      Python
1     2번  정대만  북산고  184   40   35   50   55   25        Java
2     3번  송태섭  북산고  168   80   75   70   80   75  Javascript
3     4번  서태웅  북산고  187   40   60   70   75   80          
4     5번  강백호  북산고  188   15   20   10   35   10          
5     6번  변덕규  능남고  202   80  100   95   85   80          C
6     7번  황태산  능남고  188   55   65   45   40   35     PYTHON
7     8번  윤대협  능남고  190  100   85   90   95   95         C#

위처럼 reset_index() 명령어만 사용한다면 인덱스가 초기화된 데이터프레임을 보여주기만 하고 기존 데이터 프레임에 적용이 되지 않는다.

이때 inplace=True를 사용하여 실제 기존 데이터 프레임에 변경사항을 반영할 수 있다.

# 인덱스 리셋 (기존 인덱스를 삭제)
df.reset_index(drop=True, inplace=True)
print(df)

     이름   학교    키  국어  영어  수학  과학  사회       SW특기
0    채치수  북산고  197   90   85  100   95   85    Python
1    정대만  북산고  184   40   35   50   55   25       Java
2    송태섭  북산고  168   80   75   70   80   75  Javascript
3    서태웅  북산고  187   40   60   70   75   80          
4    강백호  북산고  188   15   20   10   35   10          
5    변덕규  능남고  202   80  100   95   85   80          C
6    황태산  능남고  188   55   65   45   40   35     PYTHON
7    윤대협  능남고  190  100   85   90   95   95         C#

만약 여기서 지원 번호라고 하는 기존의 인덱스를 삭제하고 싶을 수도 있다. 이때 df.resset indexdrop=true 명령어를 입력하면 reset_index() 만 사용했던 것과 다르게 위와 같이 기존에 존재하던 지원 번호 인덱스를 삭제를 하고 새로운 인덱스로 리셋이 된것을 확인할 수 있다.


(3) 특정 컬럼을 인덱스로 설정

특정 컬럼을 인덱스로 설정하는 방법도 있는데 이를 위해 set_index를 사용할 수 있다.

# '이름' 컬럼을 인덱스로 설정
df.set_index('이름', inplace=True)
df

         학교    키  국어  영어  수학  과학  사회       SW특기
이름                                            
채치수   북산고  197   90   85  100   95   85    Python
정대만   북산고  184   40   35   50   55   25       Java
송태섭   북산고  168   80   75   70   80   75  Javascript
서태웅   북산고  187   40   60   70   75   80          
강백호   북산고  188   15   20   10   35   10          
변덕규   능남고  202   80  100   95   85   80          C
황태산   능남고  188   55   65   45   40   35     PYTHON
윤대협   능남고  190  100   85   90   95   95         C#

(4) 인덱스 정렬

인덱스를 기준으로 데이터 프레임을 정렬할 수 있다. 인덱스를 기준으로 정렬을 할 때에는

sort_index를 사용하면 된다. 정렬하는 방법을 설정할 떄는 ascending을 사용하면 되는데

sort_index() 의 디폴트 값이 오름차순 정렬로 ascending을 설정해주지 않아도 된다.

반대로 내림차순 정렬을 설정하고 싶을 떄는 ascending = False 로 설정을 해주면 된다.

이때도 inplace=True를 사용하여 실제 데이터 프레임에 변경사항을 반영할 수 있다.

1. 인덱스 기준으로 오름차순 정렬

# 이름 인덱스 기준으로 오름차순 정렬
df.sort_index(inplace=True)
print(df)

         학교    키  국어  영어  수학  과학  사회       SW특기
이름                                            
강백호   북산고  188   15   20   10   35   10          
변덕규   능남고  202   80  100   95   85   80          C
서태웅   북산고  187   40   60   70   75   80          
송태섭   북산고  168   80   75   70   80   75  Javascript
윤대협   능남고  190  100   85   90   95   95         C#
정대만   북산고  184   40   35   50   55   25       Java
채치수   북산고  197   90   85  100   95   85    Python
황태산   능남고  188   55   65   45   40   35     PYTHON

2. 인덱스 기준으로 내림차순 정렬

# 이름 인덱스 기준으로 내림차순 정렬
df.sort_index(ascending=False, inplace=True)
print(df)

         학교    키  국어  영어  수학  과학  사회       SW특기
이름                                            
황태산   능남고  188   55   65   45   40   35     PYTHON
채치수   북산고  197   90   85  100   95   85    Python
정대만   북산고  184   40   35   50   55   25       Java
윤대협   능남고  190  100   85   90   95   95         C#
송태섭   북산고  168   80   75   70   80   75  Javascript
서태웅   북산고  187   40   60   70   75   80          
변덕규   능남고  202   80  100   95   85   80          C
강백호   북산고  188   15   20   10   35   10          
profile
데이터 분석 스쿨 블로그 입니다.

0개의 댓글