본문 바로가기

머신러닝 공부

Pandas (판다스) - Index

SMALL

판다스를 구성하는 3가지 큰 요소라고 하면 DataFrame, Series, Index입니다.

 

판다스 Index 개요

  • 판다스의 Index 객체는 RDBMS의 PK(Primary Key)와 유사하게 DataFrame, Series의 레코드를 고유하게 식별하는 객체입니다. (하지만 판다스 Index는 별도의 컬럼값이 아닙니다.)
  • DataFrame/Series 객체는 Index 객체를 포함하긴 하지만, Series 객체에 연산 함수를 적용할 때 Index는 연산에서 제외됩니다. Index는 오직 식별용으로만 사용됩니다.
  • DataFrame, Series에서 Index 객체만 추출하기 위해서는 DataFrame.index 또는 Series.index 속성을 통해 가능합니다.
  • 판다스 Index는 반드시 숫자형 값이 아니여도 괜찮으며, 고유한 값을 유지할 수 있다면 Datetime/문자형도 상관없습니다.
  • DataFrame 및 Series에 reset_index() method를 수행하게 되면 새롭게 인덱스를 연속 숫자 형으로 할당하며 기존 인덱스는 'index'라는 새로운 컬럼 명으로 추가합니다.

참고로 index로 접근하여서 값을 변경하는 것은 안됩니다.

예를 들어 titanic_train.csv파일을 dataframe으로 로딩해주고 이의 index를 저장하겠습니다.

titanic_df = pd.read_csv('titanic_train.csv')

Indexes = titanic_df.index

이후 Indexes[0] = 2와 같이 접근하는 것은 오류가 나게 됩니다. 한번 index에 해당하는 값이 고정되면 바뀌지 않습니다. 이 때 바꿀 수 있는 함수가 set, reset함수입니다.

 

위와 같이 기존 titanic_df를 titanic_reset_df라는 이름으로 인덱스를 reset 시킨 걸 생성해주었고 이를 비교하며 확인할 수 있었습니다. 

 

또한 index를 reset시키고 나서 column 명을 새롭게 변환시키는 것은 DataFrame의 rename()함수로 인자로 column를 dictionary 형태로 받아 기존컬럼명 : 신규 컬럼명 형태로 변환시키는 함수를 써서 바꾼다.

 

 

DataFrame 인덱싱 및 필터링

DataFrame의 인덱싱은 numpy의 ndarray의 인덱싱과 많이 비슷합니다.

 

1. [ ]

예를들어 titanic_df['name']이라고 쓴다면 반환 되는 것은 titanic DataFrame에 name이라는 이름을 가진 컬럼의 values를 series형태로 반환합니다. 

이렇듯 bracket (대괄호)가 적용이 되면 (DataFrame바로 뒤에 적용이 된다면) 컬럼 기반 필터링 또는 불린 인덱싱 필터링 제공을 합니다. 

앞서본 numpy 의 ndarray와 DataFrame의 가장 큰 차이는 Column 명이 있냐없냐입니다. 그래서 DataFrame에서는 Column 명으로 interface를 많이 합니다. 

 

2. loc[ ] , iloc[ ]

DataFrame은 2가지 인덱싱 기능을 제공합니다. 하나는 명칭 기반 인덱싱, 다른 하나는 위치 기반 인덱싱을 제공합니다.

이때 대괄호로 써지는 것을 유의해야 합니다.

 

3. Boolean Indexing

위치기반, 명칭기반 인덱싱 모두 사용할 필요 없이 조건식을 [ ] 안에 기입하여 간편하게 필터링을 수행시키게 합니다.

 

 

Pandas DataFrame [ ] 기능

- [ ]에 단일 컬럼명을 입력하면 컬럼명에 해당하는 Series 객체를 반환합니다.

[ ]안에 여러개의 컬럼명들을 list로 입력하면 컬럼명들에 해당하는 DataFrame 객체를 반환합니다.

하지만 numpy의 ndarray에서의 [ ]는 위치 인덱스 값을 입력하여 해당 위치에 있는 값으로 ndarray를 반환합니다.

 

 

 

DataFrame 인덱싱 및 필터링 - loc, iloc

명칭(Label) 기반 인덱싱은 컬럼의 명칭을 기반으로 위치를 지정하는 방식입니다. 

'컬럼 명'같이 명칭으로 열 위치를 지정하는 방식입니다. (행 위치는 Index를 이용)

==> loc[ ] 

 

위치(Position) 기반 인덱싱은 0을 출발점으로 하는 가로축, 세로축 좌표 기반의 행과 열 위치를 기반으로 데이터를 지정합니다. 따라서 행, 열 위치값으로 정수가 입력됩니다. (Index를 이용하지 않습니다.)

==> iloc[ ]

 

위와 같은 상황에서 빨간색 글씨는 위치기반, 파란색 글씨는 명칭기반입니다.

따라서 iloc[0, 1]은 위치기반으로 행 위치 0, 열 위치 1로 iloc[0, 1] = 3을 나타냅니다.

그리고 loc[0, 'PassengerID']는 인덱스값 0 , column명 중 PassengerID를 찾아 loc[0, 'PassengerID'] = 1이 됩니다.

그렇다면 행 위치 (인덱스)는 똑같지 않냐고 궁금증이 있을 수 있지만 무조건 숫자로 인덱스가 지정되는 것이 아니라 문자열과 같은 고유의 표시만 되면 가능하기 때문에 이를 유의해야합니다.

 

 

 

LIST