파이썬 데이터 분석 : 판다스 인덱스
파이썬 판다스는 numpy를 기반으로 만들어진 패키지입니다. 이번 포스팅에서는 이를 좀 더 다양하게 활용할 수 있도록 판다스 데이터프레임 인덱스에 대해 알아보겠습니다.
글의 순서
판다스에서 인덱스란?
데이터프레임, 인덱스 예제 : 아이폰 프로세서 성능 변화
데이터프레임 인덱스 설정
데이터프레임 인덱스 초기화
판다스에서 인덱스란?
파이썬 라이브러리인 판다스로는 다양한 자료형을 갖는 데이터를 한꺼번에 수정하거나 재배치 할 수 있고, 연산까지도 가능합니다. pandas는 시리즈(series)와 데이터프레임(DataFrame)이라는 두 가지 형태의 데이터 배열을 사용하고 있습니다. 여기서, 시리즈는 인덱스와 값, 데이터프레임은 인덱스와 컬럼과 값으로 구성되어 있습니다. 그러니까 시리즈는 1차원 형태, 데이터프레임은 2차원 형태입니다.
▶pandas Series : index와 값으로 구성
▶pandas DataFrame : index, column과 값으로 구성
판다스에서 인덱스를 설정한다는 것은 자료에 이름을 붙이는 개념입니다. pandas에서 자료형를 만들 때 인덱스를 설정하지 않으면 0, 1, 2, …처럼 0부터 시작하는 정수형 인덱스가 기본값으로 설정됩니다.
데이터프레임, 인덱스 예제 : 아이폰 프로세서 성능 변화
실습코드01에 데이터프레임을 만들고 인덱스를 확인할 수 있는 예제를 나타내었습니다. 참고로 예제 데이터는 아이폰 프로세서의 성능변화를 가늠할 수 있도록 지난 5년간의 데이터를 요약한 것입니다. 2023년 9월에 발표된 아이폰15 프로와 아이폰15 프로맥스에 들어가 있는 프로세서인 A17 Pro와 2019년부터 발표되었던 아이폰 프로세서도 확인해보시기 바랍니다.
1 2 3 4 5 6 7 8 9 10 11 12 |
import pandas as pd data= { "model" : [ 'A17 Pro','A16 Bionic','A15 Bionic','A14 Bionic','A13 Bionic'], "date":['2023-09-12', '2022-09-07','2021-09-14','2020-09-15','2019-09-10'], "max.CPU_clock(GHz)":['3.78','3.46','3.23','3.1','2.65'], "Tech. node(nm)":['3','5','5','5','7'], "transistors(billion)":['19','16','15','11.8','8.5'] } df = pd.DataFrame(data) print(df) |
1 2 3 4 5 6 |
model date max.CPU_clock(GHz) Tech. node(nm) transistors(billion) 0 A17 Pro 2023-09-12 3.78 3 19 1 A16 Bionic 2022-09-07 3.46 5 16 2 A15 Bionic 2021-09-14 3.23 5 15 3 A14 Bionic 2020-09-15 3.1 5 11.8 4 A13 Bionic 2019-09-10 2.65 7 8.5 |
[실습코드01 해설]
▶ import pandas as pd : 판다스를 사용하려면 pandas라는 패키지를 불러와야 합니다. 패키지는 여러 개의 모듈로 구성되고, 각 모듈들은 또 여러 개의 함수로 구성됩니다. 패키지에 들어있는 함수를 이용하려면 패키지 이름부터 순차적으로 써 줘야 하는데, 패키지 이름이 긴 경우에는 번거롭습니다. 이를 간편하게 해주는 것이 import pandas as pd와 같이 as 뒤에 줄임말을 쓰는 것입니다. pandas는 보통 pd로 줄여 씁니다.
▶ df : 데이터프레임의 이름을 정할 때, 다른 변수와 구분하기 쉽도록 보통 DataFrame를 줄인 df를 사용합니다.
▶ , : data라는 변수에 딕셔너리 형태의 데이터를 저장하였습니다. 데이터가 길어지면 한눈에 파악하기 힘듭니다. 파이썬은 쉼표(,)를 찍은 후 ‘enter’를 치면 그 문장이 연결되어 있다고 간주합니다.
▶ 인덱스(index) : 실습코드01 출력 결과를 보면, 왼쪽 끝에 0, 1, 2, 3, 4가 찍혀 있는데, 이것이 바로 인덱스입니다. 인덱스는 각 행이 몇 번째 순서에 위치하는지 알려줍니다.
판다스 데이터프레임 인덱스 설정
pandas의 set_index 함수로 데이터프레임에 원래 있던 column을 인덱스로 설정할 수 있습니다. pandas DataFrame의 열(column)을 index로 설정할 때, set_index를 사용합니다.
DataFrame.set_index(keys, drop=True, append=False, inplace=False)
set_index를 사용할 때 사용빈도가 높은 옵션과 기본값은 다음과 같습니다. 실습코드02에 사용법을 나타내었습니다.
▶keys : 인덱스로 설정하고자 하는 데이터프레임 열 이름을 적는다.
▶drop=True : 인덱스로 설정한 열을 인덱스로 사용하고 난 후 지운다.
▶append = False : 기존에 사용하고 있던 인덱스를 지운다.
▶inplace = False : 원본 DataFrame를 그대로 유지한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import pandas as pd # 01) 직접 입력하여 데이터프레임 생성 data= { "model" : [ 'A17 Pro','A16 Bionic','A15 Bionic','A14 Bionic','A13 Bionic'], "date":['2023-09-12', '2022-09-07','2021-09-14','2020-09-15','2019-09-10'], "CPU_clock(GHz)":['3.78','3.46','3.23','3.1','2.65'], "process(nm)":['3','5','5','5','7'], "transistors(billion)":['19','16','15','11.8','8.5'] } df = pd.DataFrame(data) print('\n--판다스 데이터프레임 생성') print(df) # 02) 인덱스 설정 df1 = df.set_index('date') print('\n--date로 인덱스 설정, drop=True가 기본값') print(df1) # 03) 기존 인덱스를 그대로 두기 print('\n--date로 인덱스 설정, 기존 column 데이터와 기존 인덱스 그대로 두기') df2 = df.set_index('date', drop=False, append=True) print(df2) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
--판다스 데이터프레임 생성 model date CPU_clock(GHz) process(nm) transistors(billion) 0 A17 Pro 2023-09-12 3.78 3 19 1 A16 Bionic 2022-09-07 3.46 5 16 2 A15 Bionic 2021-09-14 3.23 5 15 3 A14 Bionic 2020-09-15 3.1 5 11.8 4 A13 Bionic 2019-09-10 2.65 7 8.5 --date로 인덱스 설정, drop=True가 기본값 model CPU_clock(GHz) process(nm) transistors(billion) date 2023-09-12 A17 Pro 3.78 3 19 2022-09-07 A16 Bionic 3.46 5 16 2021-09-14 A15 Bionic 3.23 5 15 2020-09-15 A14 Bionic 3.1 5 11.8 2019-09-10 A13 Bionic 2.65 7 8.5 --date로 인덱스 설정, 기존 column 데이터와 기존 인덱스 그대로 두기 model date CPU_clock(GHz) process(nm) transistors(billion) date 0 2023-09-12 A17 Pro 2023-09-12 3.78 3 19 1 2022-09-07 A16 Bionic 2022-09-07 3.46 5 16 2 2021-09-14 A15 Bionic 2021-09-14 3.23 5 15 3 2020-09-15 A14 Bionic 2020-09-15 3.1 5 11.8 4 2019-09-10 A13 Bionic 2019-09-10 2.65 7 8.5 |
pandas 데이터프레임 인덱스 초기화
파이썬 판다스 데이터프레임의 인덱스는 원하면 언제든지 초기화 할 수 있습니다. 판다스 DataFrame의 index를 초기화할 때, reset_index를 사용합니다.
DataFrame.reset_index(drop=False, inplace=True)
reset_index를 사용할 때 사용빈도가 높은 옵션과 기본값은 다음과 같습니다. 실습코드03에 사용법을 나타내었습니다.
▶drop=False : 인덱스를 초기화하면서, 열(column) 데이터로 바꿔줍니다. 만약 drop=True로 설정한다면, 기존의 인덱스가 열 데이터로 바뀌는 게 아니라 없어집니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import pandas as pd # 01) 직접 입력하여 데이터프레임 생성 data= { "model" : [ 'A17 Pro','A16 Bionic','A15 Bionic','A14 Bionic','A13 Bionic'], "date":['2023-09-12', '2022-09-07','2021-09-14','2020-09-15','2019-09-10'], "CPU_clock(GHz)":['3.78','3.46','3.23','3.1','2.65'], "process(nm)":['3','5','5','5','7'], "transistors(billion)":['19','16','15','11.8','8.5'] } df = pd.DataFrame(data) print('\n--판다스 데이터프레임 생성') print(df) # 02) 인덱스 설정 df1 = df.set_index('date') print('\n--date로 인덱스 설정, drop=True가 기본값') print(df1) # 03) 인덱스 초기화 df4 = df1.reset_index() print('\n--index 초기화') print(df4) print('\n--index 초기화, drop=True 옵션을 준 경우') df5 = df1.reset_index(drop=True) print(df5) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
--판다스 데이터프레임 생성 model date CPU_clock(GHz) process(nm) transistors(billion) 0 A17 Pro 2023-09-12 3.78 3 19 1 A16 Bionic 2022-09-07 3.46 5 16 2 A15 Bionic 2021-09-14 3.23 5 15 3 A14 Bionic 2020-09-15 3.1 5 11.8 4 A13 Bionic 2019-09-10 2.65 7 8.5 --date로 인덱스 설정, drop=True가 기본값 model CPU_clock(GHz) process(nm) transistors(billion) date 2023-09-12 A17 Pro 3.78 3 19 2022-09-07 A16 Bionic 3.46 5 16 2021-09-14 A15 Bionic 3.23 5 15 2020-09-15 A14 Bionic 3.1 5 11.8 2019-09-10 A13 Bionic 2.65 7 8.5 --index 초기화 date model CPU_clock(GHz) process(nm) transistors(billion) 0 2023-09-12 A17 Pro 3.78 3 19 1 2022-09-07 A16 Bionic 3.46 5 16 2 2021-09-14 A15 Bionic 3.23 5 15 3 2020-09-15 A14 Bionic 3.1 5 11.8 4 2019-09-10 A13 Bionic 2.65 7 8.5 --index 초기화, drop=True 옵션을 준 경우 model CPU_clock(GHz) process(nm) transistors(billion) 0 A17 Pro 3.78 3 19 1 A16 Bionic 3.46 5 16 2 A15 Bionic 3.23 5 15 3 A14 Bionic 3.1 5 11.8 4 A13 Bionic 2.65 7 8.5 |
마치며 …
파이썬 판다스는 numpy를 기반으로 만들어진 데이터 분석용 패키지입니다. 이번 포스팅에서는 판다스를 좀 더 다양하게 활용할 수 있도록 판다스 데이터프레임 인덱스가 무엇인지부터 인덱스를 설정하고, 초기화 하는 방법까지 알아보았습니다.
데이터프레임을 만든 데이터는 아이폰 프로세서를 시계열 관점에서 정리한 것입니다. A13 바이오닉 칩부터 A17 프로 칩까지 어떤 기술적 변화가 있는지도 확인해보시기 바랍니다.
함께 참고하면 좋은 글 :
▶ 파이썬 판다스로 엑셀 파일의 원하는 부분 골라 읽기
▶ 파이썬 판다스로 텍스트 파일 읽기 : read_table()
▶ 파이썬 판다스 데이터 분석 : pivot, 엑셀 입력, 출력
▶ 파이썬 바이낸스 API로 비트코인 투자 백테스팅 : 일중 강도(II) 매매 전략
▶ 파이썬 데이터 분석 : 판다스 데이터프레임 통계량, 그래프
참고자료
pandas, pandas.DataFrame.set_index