인덱스(Index) 는 DataFrame, Series의 레코드를 고유하게 식별하는 객체이다.

 

# Index 객체 추출
indexes = titanic_df.index

- .index : RangeIndex(start=0, stop=891, step=1)으로 결과가 나오며 인덱스의 처음과 끝값을 range형태로 알려준다.

            식별성 데이터를 1차원 array로 가지고 있으며, 단일값 반환 및 슬라이싱도 가능하다.

            하지만, indexes[6] = 0 과 같이 한번 만들어진 DataFrame, Series, Index 객체는 함부로 변경할 수 없다.

 

 

series_fair = titanic_df['Fare']
print(series_fair.max())
print(series_fair.min())
print(sum(series_fair))

- 'Fare' 컬럼을 Series 형태로 뽑아서 저장하고 숫자로 된 데이터들은 max(), min(), sum() 등과 같은 연산 함수를 적용할 수 있다.

 

 

titanic_reset_df = titanic_df.reset_index(inplace=False)
print(titanic_reset_df)

- .reset_index() : 인덱스를 새로 만들어주는 함수로 0부터 시작하게 된다. 기존의 인덱스는 새로운 index라는 칼럼으로 titanic_df의 데이터 프레임에 추가된다. 또한 inplace = False를 통해 기존 데이터 프레임에 영향을 주지 않는다.

- 주로 인덱스가 연속된 int 숫자형 데이터가 아닐 경우에 사용한다.

 

 

 

- DataFrame 에서 [] 연산자

넘파이에서는  행의 위치, 열의 위치, 슬라이싱 범위 등 지정해 데이터를 가져올 수 있음

하지만 DataFrame 바로 뒤에 있는 [ ]의 안에 들어갈 수 있는 값은 컬럼명 문자, 또는 인덱스로 변환 가능한 표현식 = 칼럼을 지정할 수 있는 연산자

 

 

print(titanic_df['Pclass'].head(2))
print(titanic_df[0])

- 첫번째 프린트는 컬럼명 문자로 접근하여 출력이 가능하나, 두번째 프린트문에서는 숫자로 접근했고 해당 칼럼이 존재하지 않기 때문에 오류가 발생하게 된다.

- 하지만 판다스의인덱스 형태로 변환 가능한 표현식은 숫자도 가능 (예. titanic_df[0:2]) 하지만 비추천합니다.

 

 

titanic_df[titanic_df['Pclass'] == 3].head(3)

- 위와 같은 불린 인덱싱 표현도 가능하다. 'Pclass'가 3인 행만 추출하여 보여줄 수 있다.

 

 

 

 

명칭 기반 인덱싱과 위치 기반 인덱싱의 구분

- 명칭(label) 기반 인덱싱 : 칼럼의 명칭을 기반으로 위치를 지정하는 방식. '칼럼 명' 같이 명칭으로 열 위치를 지정하는 것

- 위치(position) 기반 인덱스  : 0을 출발점으로 하는 가로축, 세로축 좌표를 기반으로 행과 열 위치를 기반으로 데이터 지정. 따라서 행과 열 값으로 정수가 입력됨

 

data = {'name':['홍길동', '이순신', '김아무개'],'Age' :[20,40,35]}
data_df = pd.DataFrame(data,index = ['one','two','three'])

# data_df를 reset_index()로 새로운 숫자형 인덱스
data_df = data_df.reset_index() # -> 0부터 새로 인덱싱
data_df = data_df.rename(columns = {'index':'old_index'}) # index -> old_index로 변환

# 위치 기반 인덱싱으로 데이터 접근 
print(data_df.iloc[0,0])        # 홍길동
print(data_df.iloc[0,'name'])   # 위치기반이기 때문에 오류 발생

# 명칭 기반 인덱싱으로 데이터 접근
print(data_df.loc[0,'name']     # 홍길동
print(data_df.loc['one','name'] # 홍길동
print(data_df.loc[0:1,'name'])  # 0 홍길동 1 이순신

# 불린 인덱싱으로 데이터 접근
print(data_df[data_df['Age'] > 30)  # 1 이순신 40 2 김아무개 35

 

- .iloc : 위치 기반 인덱싱으로 인덱스(혹은 숫자)로만 접근 가능

- .loc : 명칭 기반 인덱싱으로 인덱스의 이름과 컬럼의 이름으로 접근 가능

- 불린 인덱싱은 여러 조건을 사용할 때 &(and), |(or), ~ (not) 을 사용할 수 있다.

 

 

+ Recent posts