OO하는 데이터분석가

[파이썬]pandas의 색인기능 (SQL where, 파이썬 판다스 조건문)

흔흔 2021. 1. 17. 20:30

데이터 분석에서 핵심이 되는 부분중 하나인 색인 기능에 대해 알아보겠다. 개인적으로는 SQL의 where문, 즉 조건문이랑 비슷하다고 생각한다. 조건에 맞는 값을 뽑아내는것이기 때문이다.

 

우선, 알아보기에 앞서 우리가 예시로 이용할 데이터프레임은 이와같다고 가정한다. 이름은 fruit이다.

 

  이름 구매일 무게 구매처
0 복숭아 2021-01-01 0.3 슈퍼마켓
1 딸기 2021-01-02 NaN 과일가게
2 아보카도 2021-01-03 0.4 슈퍼마켓
3 딸기 2021-01-04 0.5 과일가게
4 토마토 2021-01-05 0.4 과일가게
5 아보카도 2021-01-06 0.7 슈퍼마켓
6 포도 2021-01-07 0.1 과일가게

 

조건에 맞는 행만 뽑아내기(추출하기)

7개의 행이 있는 것중에서 구매처슈퍼마켓인 행들만을 뽑으려고 한다.

 

만약 SQL을 이용하여 추출한다면 아래와 같은 문구로 실행될 것이다.

select * 
from fruit
where 구매처 = '슈퍼마켓
;

 

파이썬에서는 아래와 같다. 단계적으로 진행할것이다.

 

1. 조건 만들기

아래 코드는 fruit라는 데이터의 "구매처"컬럼의 값이 "슈퍼마켓"과 일치하는지를 반환하는 값이다.

fruit["구매처"] == "슈퍼마켓"

>결과

0     True
1    False
2     True
3    False
4    False
5     True
6    False
Name: 구매처, dtype: bool

 

2. 조건을 대괄호로 감싸 데이터에서 뽑아내기

의미는 값이 True인것은 살리고, False인것은 버린다 는 뜻이다. 실행하면 "슈퍼마켓"인 행만 나온다.

fruit[fruit["구매처"] == "슈퍼마켓"]

>결과

이름 구매일 무게 구매처
0 복숭아 2021-01-01 0.3 슈퍼마켓
2 아보카도 2021-01-03 0.4 슈퍼마켓
5 아보카도 2021-01-06 0.7 슈퍼마켓

 

 

파이썬 색인(조건문)의 응용

색인이 강력한 기능은 크게 세가지이다. 1)원리 간단 2)응용하기 좋음 3)속도 빠름(백만라인 까지도 빠르게 처리가능)

그러면 이러한 색인 기능의 응용을 몇가지 진행해보겠다.

 

1. 비교연산자를 이용한 조건 추출 (>=, <=, >, < 등)

무게가 0.3이상인 행만 찾으려면? 바깥 대괄호 안에 조건을 적어두면 된다.

#무게가 0.3이상인 행만 찾기
data[data["무게"] > 0.3]

 

 

2. 찾으려는 값이 2개 이상인 경우 isin()

찾고싶은 값이 2개 이상인경우에는 isin()이라는 함수를 사용한다.

SQL에서는 in('a','b')형태로 사용하여 찾는다. 즉, SQL in()같은기능 파이썬(판다스) 는 isin()인것이다.

이름이 딸기 혹은 토마토인 행들만 찾아보자.

#응용2 : 찾으려는 값이 2개 이상인 경우. isin() 
#방법1
fruit[fruit["이름"].isin(["딸기","토마토"])]

 

다만, 이 경우 괄호가 많아진다. 어떨때 소괄호하고, 대괄호 써야하는지 헷갈린다. 그래서 isin()쓸때는 리스트를 바로 쓰지말고 리스트를 따로 빼서 지정하고 그후에 사용하면 이해하기가 좋다. 방법 2를 참고하자

#응용2 : 찾으려는 값이 2개 이상인 경우. isin() 
#방법2
people =["딸기","토마토"]
data[data["이름"].isin(people)]

한줄 늘었지만 보기에는 훨씬 편하다.

 

>결과

이름 구매일 무게 구매처
1 딸기 2021-01-02 NaN 과일가게
3 딸기 2021-01-04 0.5 과일가게
4 토마토 2021-01-05 0.4 과일가게

 

 

3. 특정 키워드를 갖는 값을 뽑아내고 싶을때. str.contains

SQL의 like, %, *와 같은 기능을 한다. str.contains("찾는값")으로 사용한다. 나중에 파이썬을 이용하여 웹페이지 스크래핑을 하는 경우 유용하게 사용할 수 있다.

과일이름에 "아"가 들어가는 과일만을 뽑아내려고 한다. 

 

#응용3 : 특정 키워드를 갖는 값을 뽑아내고 싶을때 str.contains
data[data["이름"].str.contains("아")]

 

>결과

이름 구매일 무게 구매처
0 복숭아 2021-01-01 0.3 슈퍼마켓
2 아보카도 2021-01-03 0.4 슈퍼마켓
5 아보카도 2021-01-06 0.7 슈퍼마켓

 

 

4. NaN(Not a Number, null, 결측값)만 뽑아내고 싶을때. isnull

SQL에서와 동일한 명령어이다. 값이 없는 경우의 행만 추출하려고 한다.

위 예시에서는 무게가 결측값인 행만 추출하겠다.

#응용4 : NaN(Not a Number, null)만 뽑아내고 싶을때 isnull
fruit[fruit["무게"].isnull()]

>결과

이름 구매일 무게 구매처
1 딸기 2021-01-02 NaN 과일가게

 

 

5.NaN(Not a Number, null)만 빼고 뽑아내고 싶을때. notnull

응용4의 반대버전이다. 결측값은 빼고 추출하고 싶을때는 notnull을 사용한다. 실제 데이터를 다룰때 쓸 일이 많을것같다.

#응용5 : NaN(Not a Number, null)만 빼고 뽑아내고 싶을때 notnull
fruit[fruit["무게"].notnull()]

>결과

이름 구매일 무게 구매처
0 복숭아 2021-01-01 0.3 슈퍼마켓
2 아보카도 2021-01-03 0.4 슈퍼마켓
3 딸기 2021-01-04 0.5 과일가게
4 토마토 2021-01-05 0.4 과일가게
5 아보카도 2021-01-06 0.7 슈퍼마켓
6 포도 2021-01-07 0.1 과일가게

 

이로써 파이썬을 이용한 기본 조건문을 거는 방법들을 알아보았다. 실제로 데이터를 다룰때 가장 많이 이용되는 부분인 만큼 잘 익히는것이 중요하다. 다음 포스트는 조건의 종류가 여러개인 경우 등 파이썬의 색인에대해 더 자세히 알아보겠다.

 

2021/01/02 - [OO하는 데이터분석가] - [파이썬]판다스(pandas)로 행,열,행렬 가져오기

반응형