데이터분석/Python Pandas

<Pandas 사용하기> 3.검색 필터 작성하기 [1]

창조적생각 2021. 8. 1. 23:00

 

Pandas를 사용하여 데이터 안에서 원하는 조건에 맞는 데이터를 찾을 수 있는 필터를 작성하는 법에 대해 알아보겠습니다.

 

우선 people를 pandas를 사용하여 DataFrame을 짜 줍니다.

 

그러면 위의 표 형식으로 출력이 됩니다.

 

그럼 여기서 나이가 24인 row를 찾으려면 필터를 작성해 줘야합니다.

 

1. 필터 작성하기

 

(1)필터로 쓸 변수의 이름을 'filt'로 정하겠습니다.

 

    *파이썬에는 내장 함수로 filter가 있습니다. 그래서 filter를 직접 변수로 쓰지 마시고 다른 이름들을 사용해 주시면 

     더 좋습니다.

 

(2)그리고 필터를 작성해줍니다.

 데이터프레임의 이름이 df 이므로 df 안에 'age' 속성이 '24'인 row를 찾아야 합니다.

df['age'] == '24' 라고 표현할 수 있겠습니다.

 

(3) 위에 만든 필터를 변수 'filt'에 넣어줍니다.

 

(4) 그리고 df에서 'filt'조건에 맞는 값들을 찾아주기 위해 df[filt]를 실행해 줍니다.

 

age가 24인 박달달과 홍복길의 row가 나타나는 것을 알수 있습니다.

2. df.loc[] 를 사용하여 더 상세하게 찾아 들어가기

이전 글에서 우리는 loc[]와 iloc[]의 차이점과 그리고 사용방법에 대해서 알아보았습니다.

사실 필터를 만들고 사용하는 것은 직접 그 필터를 실행해서 사용하는 것 보다 loc[]를 이용하면 

더 자세하고 깊게 데이터 안을 검색할 수 있습니다.

일단 df.loc[]를 이용하여 필터를 적용하여 검색하는 방법은 그냥 필터를 사용하는 방법과 흡사합니다.

 

df.loc[filt]를 입력하면 아까 df[filt]를 입력했을 때와 동일한 결과값이 나옵니다.

 

그럼 더 깊이 들어가 보겠습니다.

조건을 추가하겠습니다.

 

(1)나이가 24세인 사람들의 주소만을 알고 싶다는 것은 어떻게 실행할 수 있는지 알아보겠습니다.

 

df.loc[filt,'address']를 작성해주시면 됩니다.

 

df.loc[filt]를 통해 24세 나이인 사람들의 row를 뽑아 왔다면 뒤의 ,'address'는 그 row 중에서 보고 싶은 속성을 선택하는

 

것입니다.

 

잘 나오는 것을 확인할 수 있습니다.

 

(2) 나이가 24세이고, 중동에 사는 사람의 row가 알고 싶다.

 

 다른 프로그래밍 언어나 python을 사용해보신 분들은 익숙하실 & 과 | 가 쓰입니다.

 

  **pandas에서는 &가 and, | 가 or 입니다.

 

 위의 문제가 age =='24' and adress == '중동'인 조건임으로 and 자리에 &를 넣어서 필터를 작성해주시면 됩니다.

 

filt2 = (df['age'] == '24') & (df['address'] == '중동')

 

 ***&나 | 없이 필터를 하나의 조건식으로 작성할 때는 조건식 별로 괄호를 해줄 필요가 없으나(ex)filt=df['age']=='24')

 

만약 &나 |로 두개 이상의 조건식을 묶어준다면 조건식 별로 소괄호로 묶어주어야 합니다.

나이가 24세이고, 중동에 사는 사람의 이름을 출력합니다.

 

그렇다면 나이가 24세 이거나 중동에 사는 사람의 row를 검색하실 수도 있습니다.

 

or로 이어지는 조건식이기 때문에 & 대신 |을 쓰면되겠지요. 

 

그리고 그 이름들만 뽑아서 출력할 수도 있습니다.

 

(4) 나이가 24세이거나, 중동에 사는 사람이 아닌 사람을 출력하려면?

 

필터를 작성하여 그 필터에 해당하지 않는 값을 검색할 수도 있습니다.

 

'-filt'를 사용하는 것입니다.

 

'-'는 빼라는 명령으로 사용됩니다. 그래서 나이가 24세이거나, 중동에 사는 사람이 아닌 사람의 이름들을 출력하려면

 

df.loc[-filt3,'name']을 작성해 주시면 됩니다.

 

 

다음시간에는 좀 더 커다란 데이터 내에서 검색을 어떻게 사용할 것인가에 대해서 알아보도록 하겠습니다.

 

긴 글 읽어주셔서 감사합니다.

728x90