데이터프레임에서 인덱스를 가지고 데이터를 선택하는 두가지 방법(loc/iloc)을 알아봅시다.
loc은 location의 약자로, df.loc
문법을 사용하면 인덱스의 이름을 가지고 원하는 행의 원하는 열(컬럼) 데이터를 불러올 수 있습니다.
df.loc[행 인덱싱 값, 열 인덱싱 값]
(인덱스의 이름을 넣어줌)
지난번에 만들었던 데이터프레임을 가져와 loc 문법을 실습해봅시다.
import pandas as pd
data = {
'이름' : ['유재석', '박명수', '정준하', '노홍철', '정형돈', '하하'],
'지역' : ['서울', '부산', '부산', '서울', '서울', '서울'],
'나이' : [19, 23, 20, 25, 18, 21],
'국어점수' : [86, 90, 80, 65, 50, 60],
'수학점수' : [86, 100, 66, 70, 40, 80],
'코딩' : ['Python', 'Java', '', 'Javascript', 'PYTHON', '']
}
df = pd.DataFrame(data, index=['1번', '2번', '3번', '4번', '5번', '6번'])
df.index.name = '번호'
df.loc['1번'] # '1번'에 해당하는 전체 데이터
인덱스 이름을 '1번'으로 갖고 있는 '유재석'의 전체 데이터를 불러왔습니다. 이처럼 df.loc[]
메서드에 한가지 인덱스만 채워 넣으면 해당 인덱스 행의 모든 데이터를 시리즈로 변환하여 보여줍니다.
df.loc['1번', '나이'] # index '1번'에 해당하는 나이 데이터
>> 19
df.loc에 '1번'과 '나이' 두가지를 채워 넣으면 하나는 행에 대한 정보, 하나는 열(컬럼)에 대한 정보로 인식합니다. 즉, '1번'을 인덱스로 가지고 있는 행의 '나이'데이터를 출력하는 것입니다.
df.loc[['1번', '2번'], '수학점수'] #두개의 인덱스(대괄호로 묶어줌)에 해당하는 '수학점수'데이터
여러 행을 선택하여 정보를 보고싶을때는 해당하는 인덱스 이름을 괄호로 묶으면 됩니다. 위의 예시 코드에서처럼 ['1번', '2번']은 행에 대한 정보로, '수학점수'는 열(컬럼)에 대한 정보로 읽어들입니다.
df.loc[['1번', '2번'], ['지역', '국어점수']]
위의 예시코드 처럼 여러개의 행과 여러개의 열(컬럼)을 동시에 선택하여 볼 수도 있습니다.
df.loc['1번':'4번', '지역':'국어점수']
:
을 사용하여 연속적인 순서의 데이터를 한번에 불러올 수 있습니다. 하지만 일반적인 슬라이싱 용법과 다르게 '4번'과 '국어점수' 데이터를 포함하여 불러옵니다.
iloc은 integer(정수) location의 약자로, df.iloc
문법을 사용하면 인덱스의 위치를 가지고 원하는 행의 원하는 열(컬럼) 데이터를 불러올 수 있습니다.
df.iloc[행 인덱싱 값, 열 인덱싱 값]
(인덱스의 위치을 넣어줌)
같은 데이터를 사용하여 iloc 문법을 알아봅시다.
import pandas as pd
data = {
'이름' : ['유재석', '박명수', '정준하', '노홍철', '정형돈', '하하'],
'지역' : ['서울', '부산', '부산', '서울', '서울', '서울'],
'나이' : [19, 23, 20, 25, 18, 21],
'국어점수' : [86, 90, 80, 65, 50, 60],
'수학점수' : [86, 100, 66, 70, 40, 80],
'코딩' : ['Python', 'Java', '', 'Javascript', 'PYTHON', '']
}
df = pd.DataFrame(data, index=['1번', '2번', '3번', '4번', '5번', '6번'])
df.index.name = '번호'
df.loc[0] # 첫번째 행의 전체 데이터
파이썬은 0부터 순서를 셈으로 0은 첫번째 위치를 의미합니다. 상단 코드에서도 인덱스 위치를 0으로 하는 '유재석'의 전체 데이터를 불러왔습니다. 이처럼 df.iloc[]
메서드에 한가지 인덱스만 채워 넣으면 해당 인덱스 행의 모든 데이터를 시리즈로 변환하여 보여줍니다.
df.iloc[0:5] #5번째 데이터는 포함 안함(0~4번째 위치만)
:
을 사용하여 연속적인 순서의 데이터를 한번에 불러올 수 있습니다. loc와 다르게 일반적인 슬라이싱 용법처럼 5번째 위치는 포함하지 않고 불러옵니다.
df.iloc[4, 2] #'5번' 학생의 '나이' 데이터(4번째 위치의 2번째 데이터)
>> 18
행의 위치는 4, 열의 위치는 2인 데이터를 불러옵니다. 즉, '5번' 학생의 '나이' 데이터를 불러옵니다.
df.iloc[[0, 1], [3, 4]]
여러 행과 열을 선택하여 정보를 보고싶을때는 해당하는 인덱스 위치를 괄호로 묶으면 됩니다. 위의 예시 코드에서처럼 [0, 1]은 행에 대한 정보로, [3, 4]는 열(컬럼)에 대한 정보로 읽어들입니다.
df.iloc[0:5, 3:5] #0~4번째 위치 학생의 3~4번째 데이터
슬라이싱 문법을 활용하여 행과 열의 위치를 나타낼 수도 있습니다. 상단의 코드는 0~4번째 위치(0:5)의 3~4번째 데이터인 국어, 수학 점수(3:5)를 출력해줍니다.