인덱스는 데이터에 접근할 수 있는 주소값 정도로 이해하면 된다. 예를 들어, 리스트에서 인덱스를 사용하는 방법을 떠올려보자.
# 리스트 예제
lst = ['유재석', '하하']
print(lst[0]) # 출력: 유재석
print(lst[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#
아래처럼 인덱스 값에 접근하고 이름을 설정할 수 있다.
# 인덱스 값 확인
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#
아래처럼 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 index에 drop=true 명령어를 입력하면 reset_index() 만 사용했던 것과 다르게 위와 같이 기존에 존재하던 지원 번호 인덱스를 삭제를 하고 새로운 인덱스로 리셋이 된것을 확인할 수 있다.
특정 컬럼을 인덱스로 설정하는 방법도 있는데 이를 위해 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#
인덱스를 기준으로 데이터 프레임을 정렬할 수 있다. 인덱스를 기준으로 정렬을 할 때에는
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