인덱스(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) 을 사용할 수 있다.
'머신러닝 in Python' 카테고리의 다른 글
판다스(Pandas) 결손 데이터 처리 및 apply (0) | 2019.08.08 |
---|---|
판다스(Pandas) 정렬, Aggregation, groupby (0) | 2019.08.08 |
판다스(Pandas) 데이터프레임 활용 (0) | 2019.08.08 |
판다스(Pandas) 기초 + 타이타닉 데이터 (0) | 2019.08.08 |
넘파이(NumPy) 정렬 (0) | 2019.08.07 |