파이썬_dataframe_loc_iloc_인덱싱

파이썬 dataframe 인덱싱하기

  • dataframe을 인덱싱할때 loc과 iloc을 사용할 수 있다.

  • 다음과 같은 데이터 프레임을 예시로 두 가지를 살펴보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas as pd

df = pd.DataFrame({
'age' : [13,17,19,21,23],
'class' : ['math','science','english','math','science'],
'city' : ['A','B','A','C','B'],
'gender' : [ 'M', 'F', 'F', 'M', 'M'],
})

print(df)
>>>
age class city gender
0 13 math A M
1 17 science B F
2 19 english A F
3 21 math C M
4 23 science B M
  • loc을 사용하여 인덱싱하기

    • loc 인덱싱은 두 가지 사용법이 있다.

      1
      2
      3
      4
      5
      df.loc[행 인덱스값]

      or

      df.loc[행 인덱스값, 열 인덱스값]
    • 이를 이용해 둘째, 셋째 행만을 가져오면 다음과 같다.

      1
      2
      3
      4
      5
      6
      7
      ex1 = print(df.loc[1:2])

      print(ex1)
      >>>
      age class city gender
      1 17 science B F
      2 19 english A F
    • boolean 시리즈를 행을 선택하는 인덱스값으로 사용할 수 있다.

    • 이를 이용하여 A 도시에 사는 행을 선택하면 다음과 같다.

      1
      2
      3
      4
      5
      6
      7
      ex2 = df.loc[df.city == 'A']

      print(ex2)
      >>>
      age class city gender
      0 13 math A M
      2 19 english A F
    • 한 걸음 더 나가서 A 도시에 사는 사람들의 성별을 나타내는 시리즈를 알고 싶다.

    • 이럴때는 열 인덱스값을 추가해서 다음과 같이 얻어낼 수 있다.

      1
      2
      3
      4
      5
      6
      ex3 = df.loc[df.city == 'A', 'gender']

      print(ex3)
      >>>
      0 M
      2 F
    • 이렇게 열 인덱스값을 추가하여 다음과 같이 나이와 성별만을 갖는 두개의 행으로 datframe을 슬라이싱 할 수도 있다.

      1
      2
      3
      4
      5
      6
      7
      ex4 = df.loc[1:2,['age','gender']]

      print(ex4)
      >>>
      age gender
      1 17 F
      2 19 F
  • iloc을 사용하여 인덱싱하기

    • iloc은 integer-location based indexing 로서 정수(integer)를 인덱스값으로 받는다는 점이 loc과의 차이점이다.

    • loc의 마지막 예제를 iloc을 통해 나타내면 다음과 같다.

      1
      2
      3
      4
      5
      6
      7
      ex5 = df.iloc[1:3,[0,3]]

      print(ex5)
      >>>
      age gender
      1 17 F
      2 19 F
    • ex4와 ex5의 코드를 살펴보면 단순히 정수값을 받는다는 점 이외에도 차이점이 있다.

    • loc 은 행 인덱스값을 1:2 까지로 나타내면 마지막 행까지 모두 포함한 결과를 내놓지만, iloc은 행 인덱스값의 마지막 행을 포함하지 않기 때문에 1:3 으로 나타내줬다.

#

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×