녕녀기의 실험일지

[ Pandas ] filter()를 사용해, 조건에 맞는 컬럼(혹은 인덱스) 검색 본문

-- Data --/- Python -

[ Pandas ] filter()를 사용해, 조건에 맞는 컬럼(혹은 인덱스) 검색

녕녀기 2023. 5. 19. 13:16

본문으로

안녕하세요. 녀기입니다.

 

공공 데이터를 python으로 가지고 놀다가

 

연도별로 순서만 추가 돼서 컬럼이 형성된다는 것을 한번쯤 보셨을 것입니다.

 

연도를 하나씩 설정해서 받아도 되지만,

 

python을 이용해 나눠 보려고 하다가 좋은 method를 알게 돼서 글을 쓰게 되네요ㅋㅋㅋㅋ


filter()

아래 코드와 같이 데이터프레임을 하나 생성해 줍시다.

 

df = pd.DataFrame(data=np.array([['A','B','C','D','E'], 
                                 ['E','F','C','D','Z'], 
                                 ['E','F','G','H','A'], 
                                 ['I','J','G','H','B'], 
                                 ['K','L','M','N','E']]),
                  columns=["2016.1", "2016.2", "2017", "2018.3", "1-2018"])

Table 1. 'df'에 저장된 데이터프레임

 

Table 1처럼 만들어진 데이터프레임에서 

 

특정 컬럼만 필터링해서 가져오기 위해 

 

filter() 메소드를 사용합니다.

 

매개변수에는 items, like, regex가 있습니다.


items

items 는 지정한 컬럼명을 필터링해서 불러옵니다.

 

아래 코드와 같이 입력하면

df.filter(items=["2016.1", "2017"], axis=1)

Table 2. 특정 컬럼명을 이용한 필터링

 

items의 리스트 안에 있는 '2016.1', '2017'의 컬럼명을 가진 컬럼만 출력해 줍니다.

 

axis=1로 설정했으므로 열 기준이죠.

 

그럼 행 기준도 될까요?

df.filter(items=[0,3], axis=0)

Table 3. 특정 행 인덱스를 이용한 필터링

axis=0으로 설정하고,

 

0번째 인덱스와 3번째 인덱스를 필터링한 결과가 Table 3입니다.


like

like 는 해당 조건이 포함돼 있는 것을 필터링해서 불러옵니다.

 

아래와 같이 '2016'을 넣으면

df.filter(like="2016",axis=1)

Table 4. '2016'이 포함된 필터링

컬럼명에 2016이 포함돼 있는 컬럼만 불러옵니다.

df.filter(like="2018",axis=1)

Table 5. '2018'이 포함된 필터링

2018을 넣으니 2018이 포함돼 있는 컬럼만 불러오는군요.


regex

regex 는 정규표현식에 해당하는 조건을 필터링해서 부릅니다.

 

아래와 같이 코드를 작성하면, 

df.filter(regex="\.",axis=1)

Table 6. 정규표현식을 이용한 필터링 1

컬럼명에 "."이 포함된 컬럼을 반환하죠.

df.filter(regex="\-",axis=1)

Table 7. 정규표현식을 이용한 필터링 2

"-"가 포함된 컬럼도 불러올 수 있습니다.


filter를 몰랐을 때는 

 

apply랑 정규표현식으로 온갖 똥꼬쇼를 다 했는데,

 

filter를 알고 나니 너무 편하군요ㅠㅠㅠ

 

(검색을 생활화합시다!)

 

자주 써먹어보도록 하겠습니다ㅋㅋㅋㅋㅋ

 

그럼 저는 사라져 볼게요~~

 

뿅!

Comments