본문 바로가기
self.python

[python] loc , iloc 으로 행 데이터 접근하기

by 톤토니 2022. 5. 19.
반응형

 

 

데이터 프레임에서 loc , iloc 으로 행 데이터 접근하기

 

 

열 데이터를 접근하려면 그냥 column 명으로 접근하면 된다.

여러 column의 값을 가져오고 싶으면 원하는 column 명을 리스트 형식으로 쓰면 된다.

 

데이터 프레임에서 행 방향으로 데이터를 접근.. 또는 선택 하는 방법은 .loc 와 .iloc 이 있다.

 

 

.loc : 인덱스 명을 적어서 참조하는 방법

.iloc :  정수 인덱스 형식으로 적어서 참조하는 방법

 

 

예시를 위해 임의의 데이터 프레임을 하나 만들어보겠다.

 

import numpy as np
import pandas as pd
import seaborn as sns

score = {'Mary': [90, 68, 70, 80, 92, 68, 78],
            'Kate': [90, 68, 70, 80, 92, 68, 78],
            'Mark': [39, 59, 60, 73, 84, 87, 92],
            'Maxi': [83, 92, 71, 56, 79, 93, 85],
            'Jess': [np.nan,0, 0, 0, 44, 74, 49]}
col_list = ['Mary','Kate','Mark','Maxi','Jess']
index_list = ['2016', '2017', '2018', '2019', '2020', '2021', '2022']

df = pd.DataFrame(score, columns = col_list, index = index_list)
df

 

 

학생 5명의 어떤 과목의 16 ~ 22 년도의 점수를 데이터 프레임으로 만들었다.

 

 

 

 

df 라는 이름의 데이터 프레임은 위와 같은 모양이다.

행은 16년부터 22년도까지의 연도이고, 열은 각 학생의 이름으로 되어 있다.

 

 

 

loc 으로 접근하기

 

원하는 행의 인덱스를 알고 있다면, loc 으로 인덱스를 지정하여 해당 행의 값을 시리즈 type으로 가져올 수 있다.

 

print(type(df.loc['2019']))
df.loc['2019']

 

2019년도의 학생들의 점수를 시리즈 형식으로 불러왔다.

 

 

여기서 한 행의 값을 전부 다 불러오는 것이 아니라, 내가 원하는 학생의 값을 가져오고 싶다면 여러가지 방법이 있다.

예를 들어 Mary의 점수만을 보고 싶다면 아래와 같은 방법들을 사용할 수 있다.

 

print(type(df.loc['2019']['Mary']))
df.loc['2019']['Mary']

# <class 'numpy.float64'>
# 80.0

2019년도 행의 시리즈 데이터에서 Mary 의 값을 float 형식으로 접근했다.

 

print(type(df.loc['2019', 'Mary']))
df.loc['2019', 'Mary']

# <class 'numpy.int64'>
# 80

2019와 Mary에 접근하여 점수를 가져왔다.

 

print(type(df['Mary'].loc['2019']))
df['Mary'].loc['2019']

# <class 'numpy.int64'>
# 80

Mary 열에서 2019 행의 데이터를 가져와서 19년도 Mary의 점수에 접근했다.

 

 

값을 바꾸는 것도 가능하다.

df.loc['2019', 'Mary'] = 100 # 19년도 Mary의 점수를 100점으로 변경
df

 

 

원래 80점이었는데 100점으로 변경되었음을 확인할 수 있다.

 

 

인덱싱도 가능하다. 특이한 점은 행 이름으로 인덱싱을 하는 경우 끝 값이 포함되어 나온다는 것이다.

df.loc['2019':'2022'] # 19년도부터 22년도 까지의 값

 

인덱싱으로 가져온 값에 당연히 열 이름으로 접근할 수 있다.

print(type(df.loc['2019':'2022']['Mary']))
df.loc['2019':'2022']['Mary']

 

Mary의 19년부터 22년도까지의 점수를 전부 가져왔다.

 

 

iloc 으로 접근하기

 

iloc은 인덱스 번호로 접근하는 방법이다. 리스트에서 인덱스 번호로 접근하는 방법이라고 생각하면 좋을 것 같다.

이렇게 접근하려면 내가 원하는 값이 인덱스 몇 번째에 있는지 알아야한다.

 

print(type(df.iloc[0]))
df.iloc[0] # 첫 번째 행의 값을 가져옴

 

인덱스 0번은 첫 번째 행이니, 16 년도의 학생들의 점수를 시리즈 type으로 가져온 것을 확인할 수 있다.

 

df.iloc[3]['Mary']

# 100.0

인덱스 3번은 4번째 행이고, 19년도의 Mary의 점수를 접근하는 방법이다.

 

보통 이렇게 인덱스 번호로 접근할 때에는 슬라이싱 하는 경우에 자주 사용하는 것 같다.

 

df.iloc[3:] # 19 년도부터 끝까지

 

 

 

이렇게 데이터 프레임을 특정 행 값으로 슬라이싱 해야 할 때 iloc을 사용하면 좋을 것 같다.

 

 

반응형

댓글