안녕하세요!
저번 게시물에 이어서 이번에도 dataframe에서 조건에 맞는 값을 불러오는 방법에 대해서 연습해 보겠습니다.
저번보다 약간 길지만 그래도 알아두면 확실히 데이터 프레임을 다룰 때 도움이 될 것 같습니다.
(참고한 책은 파이썬 머신러닝 완벽 가이드입니다)
먼저 필요한 라이브러리를 불러오겠습니다.
import numpy as np
import seaborn as sns
import pandas as pd
저번과 마찬가지로 numpy, seaborn, pandas를 불러왔습니다.
mpg = sns.load_dataset('mpg')
이번에는 예시 데이터를 mpg 데이터로 바꾸었습니다. mpg 데이터는 과거에 인기 있었던 자동차들의 연비 데이터입니다.
mpg.info()
먼저 mpg에 대한 정보를 한번 보겠습니다.
398개의 행과 9개의 열로 되어있습니다.
horsepower에는 null데이터가 있는 것 같습니다.
head 코드를 활용하여 데이터가 어떻게 생겼는지 파악해보겠습니다.
불린 값을 이용하여 원하는 조건을 만족하는 열 값을 불러오는 방법은 다음과 같습니다.
#불린 값을 이용하여 원하는 조건을 만족하는 열 값을 불러오기
df[조건][불러올 열이름(여러 개일 경우 리스트형)]
제가 이해한 거로는 조건에 맞아 True가 되는 데이터 중에서 뒤의 열에 해당하는 데이터를 불러온다... 고 이해하였습니다.
코드를 보시면 어떻게 사용하는지 바로 이해가 되실 겁니다.
mpg[mpg.mpg>12]['mpg']
mpg 데이터의 mpg열의 값이 12가 넘는 조건을 만족하는 데이터 중에서 열이름 mpg를 불러오라는 코드입니다. 결과를 한번 볼까요?
mpg가 12보다 큰 데이터 중에서 mpg열만 불러와졌습니다.
앞의 코드는 열 한개만 불러왔지만 열이 여러 개이면 리스트 형으로 써주어야 합니다. 바로 코드 보실게요.
mpg[mpg.mpg>12][['mpg','origin','name']]
mpg 데이터에서 열이름 mpg가 12보다 큰 데이터 중에서 mpg와 origin, name을 불러오라는 코드입니다. 앞의 코드와 다른 점은 여러 개의 열 이름을 적기 위해서 대괄호([])를 한번 더 썼다는 것입니다.
결과를 한번 보겠습니다.
이렇게 열이름 mpg가 12가 넘는 데이터 중에서 mpg, origin, name이 불러와진 것을 알 수 있습니다.
데이터 프레임에서 바로 하는 방법도 있지만 loc를 이용하여 조건에 맞는 데이터를 불러오는 방법도 있습니다.
#loc를 이용하기
df.loc[조건, 불러올 열이름(여러개일 경우 리스트 형으로 넣어주기)]
원래 loc 코드 사용 중에서 행 이름에 들어가야 될 자리에 조건을 넣어주고, 열 이름 자리에는 원래대로 원하는 열 이름을 넣어주면 됩니다.
mpg.loc[mpg.mpg>13,['mpg','name']]
mpg.loc 코드에 mpg의 열이름 mpg의 데이터가 13보다 큰 데이터 중에서 mpg와 name 데이터를 불러오는 코드입니다.
여기서는 열이름이 두 개 이상이기 때문에 ['mpg', 'name']으로 적어주었지만 한 개만 불러올 경우 바로 'mpg'로 넣어주시면 됩니다.
결괏값이 mpg가 13보다 큰 데이터의 mpg, name이 나왔습니다.
여기까지의 코드들은 모두 조건이 한 개 일 때만 다루었습니다. 하지만 조건이 여러 개일 수도 있습니다.
그럴 경우에는 조건들을 괄호(())로 묶어서 넣어주면 됩니다 아래 코드를 먼저 보실게요.
mpg[(mpg.cylinders<8)&(mpg.horsepower<130)][['name','mpg','horsepower']]
mpg[(mpg.cylinders<8)|(mpg.horsepower<130)][['name','mpg','horsepower']]
mpg[(mpg.cylinders<8)|~(mpg.horsepower<130)][['name','mpg','horsepower']]
조건을 (조건)으로 묶고 and(둘 다 만족)의 경우에는 '&', or(둘 중 하나만 만족) 일 경우에는 '|'(백스페이스 아래 있는 키로 shift+\), 그리고 조건을 제외하는 경우에는 조건 앞에 '~'를 붙이면 됩니다.
loc코드를 사용하는 경우에도 동일합니다.
mpg.loc[(mpg.mpg>13)&(mpg.origin=='usa'),['mpg','origin','name']]
mpg.loc[(mpg.mpg>13)|(mpg.origin=='usa'),['mpg','origin','name']]
mpg.loc[~(mpg.mpg>13)&~(mpg.origin=='japan'),['mpg','origin','name']]
위의 경우와 같이 조건을 묶어 주면 됩니다. 참고로 동일한 것을 찾고 싶다면 =를 두번 써야 합니다.
여기까지 해서 정리했는데 도움이 되셨는지 모르겠습니다. 저도 하면서 헷갈렸어가지고 계속해보고 정리했는데 말이 약간 어렵게 쓴 것 같기도 하고....? 혹시라도 틀린 부분이 있다면 지적해주시면 감사하겠습니다.
읽으신 분들에게 도움이 되길 바라며...
오늘 하루도 즐거운 하루 보내세요( •̀ ω •́ )✧
'코딩 > Python' 카테고리의 다른 글
파이썬 기초 - 데이터 분석할 때 필요한 데이터 결측값 대체하기 - (0) | 2022.06.13 |
---|---|
파이썬 기초 - 파이썬을 이용한 간단한 계산하기 (사칙연산, 구구단) (0) | 2022.06.07 |
파이썬 기초 - dataframe 조건에 맞는 값 불러오기(불린 인덱싱) - (1) (0) | 2022.01.04 |
파이썬 기초 - dataframe 인덱싱을 위한 코드 iloc, loc - (0) | 2022.01.04 |
파이썬 기초 - dictionary를 dataframe으로 바꾸기, dataframe을 list, dictionary로 바꾸기 (0) | 2022.01.03 |