코딩/Python

파이썬 기초 - dataframe 조건에 맞는 값 불러오기(불린 인덱싱) - (2)

kaki_ss 2022. 1. 5. 10:50
728x90
반응형
반응형

안녕하세요!

 

저번 게시물에 이어서 이번에도 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 코드를 활용하여 데이터가 어떻게 생겼는지 파악해보겠습니다.

 

300x250

 

불린 값을 이용하여 원하는 조건을 만족하는 열 값을 불러오는 방법은 다음과 같습니다.

#불린 값을 이용하여 원하는 조건을 만족하는 열 값을 불러오기
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']]

 

위의 경우와 같이 조건을 묶어 주면 됩니다. 참고로 동일한 것을 찾고 싶다면 =를 두번 써야 합니다. 

 

여기까지 해서 정리했는데 도움이 되셨는지 모르겠습니다. 저도 하면서 헷갈렸어가지고 계속해보고 정리했는데 말이 약간 어렵게 쓴 것 같기도 하고....? 혹시라도 틀린 부분이 있다면 지적해주시면 감사하겠습니다.

 

 

 

읽으신 분들에게 도움이 되길 바라며...

오늘 하루도 즐거운 하루 보내세요( •̀ ω •́ )✧

 

파이썬 기초 - dataframe 조건에 맞는 값 불러오기(불린 인덱싱) - (1)

안녕하세요! 오늘도 파이썬 dataframe에 대해서 정리해보겠습니다. 데이터 프레임에서 원하는 조건에 맞는 값을 불러오는 것에 대해서 설명드리려고 합니다. (참고한 책은 파이썬 머신러닝 완벽

sskaki.tistory.com

 

728x90
반응형