데이터 분석에서 핵심이 되는 부분중 하나인 색인 기능에 대해 알아보겠다. 개인적으로는 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 과일가게
이로써 파이썬을 이용한 기본 조건문을 거는 방법들을 알아보았다. 실제로 데이터를 다룰때 가장 많이 이용되는 부분인 만큼 잘 익히는것이 중요하다. 다음 포스트는 조건의 종류가 여러개인 경우 등 파이썬의 색인에대해 더 자세히 알아보겠다.
'OO하는 데이터분석가' 카테고리의 다른 글
[파이썬]판다스(pandas)로 행,열,행렬 가져오기 (1) | 2021.01.02 |
---|---|
[파이썬]으로 데이터 분석하기, 판다스(pandas) 기초2 (2) | 2020.12.21 |
[google cloud platform]구글 클라우드 플랫폼 api 부여받기 (0) | 2020.12.16 |
[파이썬]으로 데이터 분석하기, 판다스(pandas) 기초 (0) | 2020.12.16 |
[파이썬]문자형 변수 인덱싱(indexing)과 슬라이싱(slicing) (0) | 2020.11.22 |