본문 바로가기
self.python

[python] isin() 사용해서 데이터 프레임에서 데이터 값으로 행 추출하는 방법

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

 

 

isin() 사용해서 데이터 프레임에서 데이터 값으로 행 추출하는 방법

 

 

 

데이터 프레임에서 데이터 값으로 그 행을 가져오는 방법은 isin 함수를 사용하는 것이다.

isin 함수를 사용하지 않고 데이터 프레임 필터 기능을 사용해서 가져오는 방법도 물론 가능한데

이 경우 여러개를 가져오고 싶을때 여러번 써줘야 한다는 단점이 있다.

 

지정하려는 데이터가 있는 열을 index로 지정하여 가져오는 방법도 있지만, 그 데이터가 이후에 접근해야 하는 데이터라면 index에서 다시 데이터로 변환해주어야 하기 때문에 isin 함수를 사용하는 것이 편리할 것이라 생각한다.

 

코드로 보면 더 이해가 될 것 같다.

 

 

1. 데이터 프레임 준비

import numpy as np
import pandas as pd

score = {'Year' : ['2016', '2017', '2018', '2019', '2020', '2021', '2022'],
            '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]}

df = pd.DataFrame(score) # 임의의 데이터프레임을 생성했음
df

 

 

임의의 데이터 프레임 df를 만들었다.

이전 글에서 사용했던 데이터 프레임을 재활용 한 것이다.

 

 


 

2. 데이터 프레임 필터 기능 이용하기

 

여기서 2019년도의 데이터를 가져온다고 하자.

 

df_filter = df[df['Year'] == "2019"]
df_filter

 

이렇게 df의 'Year' 열이 '2019' 인 행을 모두 가져왔다.

 

 

만약 2019년도랑 2022 년도 데이터 두 개를 한 번에 가져오려면 ?

 

df_1 = df[(df['Year'] == "2019")]
df_2 = df[(df['Year'] == "2022")]
# 하나씩 만든 다음 concat으로 합쳐주어야 함

df_filter = pd.concat([df_1, df_2])
df_filter

 

이렇게 데이터 프레임의 필터를 사용하게 되면 여러개를 가져와야 할 경우 concat을 써줘야 해서

두 개가 아니고 만약 다섯 개를 가져와야 한다면 정말 번거로울 것이다.

 

 

*참고* 여기서 index 를 reset 하려면

df_1 = df[(df['Year'] == "2019")]
df_2 = df[(df['Year'] == "2022")]

df_filter = pd.concat([df_1, df_2], ignore_index=True) # ignore_index 를 True로 해주면 됨!
df_filter

index가 0, 1로 잘 reset 된 것을 확인할 수 있다. 그냥 참고

 

 


 

2. isin 함수 사용하기

 

isin 함수를 사용해서 2019년도 데이터를 가져와보자.

isin( [이렇게 리스트 형식으로 데이터를 적어주어야 한다.] )

 

df_isin = df[df['Year'].isin(['2019'])]
df_isin

 

만약 2019년도랑 2022 년도 데이터 두 개를 한 번에 가져오려면 ?

 

df_isin = df[df['Year'].isin(['2019', '2022'])]
df_isin

 

이렇게 데이터를 여러개 가져오고 싶을 때는 isin을 사용하는 것이 훨씬 편하다.

 

*참고* 여기서 index 를 reset 하려면

df_isin = df[df['Year'].isin(['2019', '2022'])].reset_index(drop = True)
df_isin

index가 0, 1로 잘 reset 된 것을 확인할 수 있다. 그냥 참고

 

 

만약 2019년도랑 2017, 2020, 2022 년도 데이터를 모두 한 번에 가져오려면 ?

 

year = ['2017', '2019', '2020', '2022']
df_isin = df[df['Year'].isin(year)].reset_index(drop = True)
df_isin

 

이렇게 잘 가져와진 것을 확인할 수 있다.

이렇게 가져오는 경우 Year을 여전히 열로 접근할 수 있다는 점이 장점이다.

df_isin['Year'] 이 가능하다는 것이다.

 

반응형

댓글