본문 바로가기
Deep Learning

Pandas 기초 2: Indexing & Slicing

by 자라자 2020. 9. 1.

행을 추출할 때

1) loc(iloc) 를 이용한 indexing

`.loc`와 `.iloc`를 쓸 수 있는데, `.loc`는 정수가 아닌 값을, `.iloc`는 정수값을 넣어줍니다.

import pandas as pd
d1=pd.DataFrame(data=[['3000원','2500원','1500원'],['2800원','2700원','1300원']],
                      index=['A마트','B마트'],columns=['우유','맥주','요거트'])
d1

여기서 행을(A마트만) indexing 해보자. Series로 출력됩니다.

d1.loc['A마트']

참고로, 열을 인덱싱하려면 아래와 같이 해주면 됩니다.

d1.loc[:,'우유']

 

 `Fancy Indexing`을 이용하게 되면 떨어져 있는 복수의 행도 Indexing할 수 있습니다.

 

2) slicing

slicing을 할 때는 범위가 기존 python의 slicing과 약간 다른데, `.loc`을 통한 행의 indexing에서는 [start:end] 즉 start 이상 end 이하가 됩니다. 파이썬에서 뒷 값 미만이 되는 것과 약간 차이가 있습니다.

 

열을 추출할 때

DataFrame에서 `key값`은 `column`에 대응합니다. 앞서 `.loc`으로 억지로 추출하는 것을 예로 들었지만 기본적으로 dictionary에서 추출하듯이 column의 이름을 통해 Indexing할 수 있습니다.

 

1) Indexing

d1['우유']

2) 마찬가지로 Fancy Indexing이 가능합니다.

d1[['우유','요거트']] #Fancy Indexing

3) Slicing

Slicing을 할 때는 `.loc`를 이용해야만 합니다. 그냥 dictionary의 slicing처럼 하면 아무 값도 안나옵니다. 이 때, 앞서 행에서 열을 추출할 때 처럼 slicing시 행 자리에 `:`를 넣어 2차원으로 slicing해줘야 합니다. `loc를 사용할 때는 항상 자리를 잘 지켜야 합니다.`

d1.loc[:,'맥주':'요거트']

Boolean Indexing

`Boolean Indexing`은 조건대로 Indexing을 할 수 있는 강력한 기능입니다. 이전글에서 썼던 `titanic.csv`로 Boolean Indexing을 수행해보겠습니다.

 

1) 조건식으로 Indexing하기

`pd.read_csv`로 파일을 읽었습니다.

아래와 같이 조건식을 작성하면 Boolean value를 가지는 Series를 반환합니다.

df.Age>25

2) DataFrame 재구성하기

위의 리턴 값을 다시 df[]안에 넣어주면 필터링된 DataFrame을 얻을 수 있습니다. 

df[df.Age>25]