Post

[Pandas] DataFrame 데이터 조회 (2) isin


[Pandas] DataFrame 데이터 조회 (2) isin

지난번 loc에 이어 같이 알면 좋은 isin에 관하여 학습해보고자 한다.


isin은 지난번 loc에서처럼 SQLWHERE절과 유사하다.


메소드를 학습하기에 앞서 예제에서 사용할 데이터를 가져온다. 해당 데이터들은 KOSIS국가통계포털에서 찾을 수 있었던 2020년 6월 행정구역별 인구수이다.

1
2
3
4
5
6
7
8
import pandas as pd

df = pd.read_excel('./행정구역인구수.xlsx', sheet_name='데이터변경',  engine='openpyxl')
df.columns = ['region', 'tot_num', 'm_num', 'f_num']
df = df.set_index('region')
df[['tot_num', 'm_num', 'f_num']] = df[['tot_num', 'm_num', 'f_num']].astype('int64')

df.head()
tot_numm_numf_num
region
전국518394082585393725985471
서울특별시972084647322754988571
종로구1503837328877095
중구1260926169764395
용산구229431110527118904


with List

  • isin에 입력되는 값이 list형태라면 list에 들어있는 값이 데이터프레임에 들어있는지 체크한다.
  • 위의 데이터프레임에서 서울특별시의 총 인구수, 남성 인구수, 여성 인구수만 리스트형태로 isin에 입력할 경우 데이터프레임에서 해당 value와 동일한 값을 가지는 값이 True로 반환되는 것을 확인할 수 있다.
1
df.isin([9720846, 4732275, 4988571]).head(5)
tot_numm_numf_num
region
전국FalseFalseFalse
서울특별시TrueTrueTrue
종로구FalseFalseFalse
중구FalseFalseFalse
용산구FalseFalseFalse

with Dict

  • isin에 입력되는 값이 만약 {'column_name' : [value1, value2]}dict형태라면 dict 내부에 입력한 열만 부분적으로 해당 value들이 있나 없나 조회할 수 있다.
  • 쉽게확인하기 위해 region을 열로 전환시키고 region과 전국, 중구, 용산구를 dict형식으로 isin에 입력시키면 기존 region에서 전국, 중구, 용산구 값이 있던 자리만 True로 반환된 것을 확인할 수 있다.
1
2
df = df.reset_index()
df.isin({'region' : ['전국', '중구', '용산구']}).head(5)
regiontot_numm_numf_num
0TrueFalseFalseFalse
1FalseFalseFalseFalse
2FalseFalseFalseFalse
3TrueFalseFalseFalse
4TrueFalseFalseFalse


응용

  • 데이터프레임에서 True & False로 반환되는 것까지는 이해가 가지만, 이것을 어떻게 써먹을 수 있을까? 나같은 경우는 isinSQLWHERE과 동일하게 사용한다(이게 당연한 것일 수도 있지만, 또 다른 사람들은 다르게 사용할 것이라 생각한다.). 만약 MySQL이나 Oracle에서 원하는 지역데이터만을 뽑아오고 싶을 때는 WHERE region IN('서울특별시', '용산구')이런식으로 사용할 것이다. 이는 pandas에서도 isin을 통해 다음과 같이 사용할 수 있다.
1
df[df['region'].isin(['서울특별시', '용산구'])]
regiontot_numm_numf_num
1서울특별시972084647322754988571
4용산구229431110527118904

References

This post is licensed under CC BY 4.0 by the author.