자신에게 친절할 것 :)

Data Science/Pandas

[Pandas] boolean indexing 불린 인덱싱, 다중 조건 인덱싱

Tashapark 2024. 5. 31. 22:25
728x90

#코드잇 데이터 사이언스 강의 듣는 중

#데이터 사이언스 Toolkit  renewal 버전 다시 듣는 중


<불린 인덱싱>

 

...ㅎ 진작에 이걸 설명해 주시지..

뭐.. 실습하면서 익히긴 했지만, 계속 헷갈렸던 내용이라서.. 정리한다..ㅎ

++ 이전 강의보다 훨씬 순서도 깔끔하고 디테일하게 설명해주심. 

근데 이전에 했던 내용을 안 다루는 메소드가 많아서 리뉴얼 전이랑 같이 보면 좋을 듯. 

 

- .iloc, .loc 은 원래 포스팅에 설명을 추가했기에 제외하고 조건문 넣은 불린 인덱싱.. 이게 길어져서 그런 지 생각보다 헷갈린다.

 

1. 조건문만 쓰면 -->  불린 값을 시리즈로 출력

import pandas as pd

burger_df = pd.read_csv("data/burger.csv", index_col = "product_name")

burger_df['calories'] <500

 

2. .loc[] 넣으면 -->  불린 값에서 True만 dataframe으로 출력되고, 행 전체 다 출력.

burger_df.loc[burger_df['calories'] <500]

 

3. .loc[조건문, '특정 벡터']  -->  불린 값에서 True만 특정 벡터 값이 출력되고, series로 나타남. 

burger_df.loc[burger_df['calories'] <500, 'protein']

 

4. .loc[조건문, ['특정 벡터', '특정 벡터']]  -->  불린 값에서 True만 특정 벡터 값들이 dataframe으로 출력.

burger_df.loc[burger_df['calories'] <500, ['carb','protein']]

 

5. .loc[조건문, '특정 벡터' :'특정 벡터']  -->  불린 값에서 True만 특정 벡터들의 슬라이싱 값들이 dataframe으로 출력.

- 이 때는 벡터 값에 []를 쓰지 않는 것 주의...

burger_df.loc[burger_df['calories'] <500, 'carb':'fat']

 

6. mask =[조건문]  df[mask] -->  불린 값에서 True만 dataframe으로 출력.

조건문이 너무 길어질 때 변수로 쪼개는 것. mask 해줌. 

- 마찬가지로 슬라이싱이나 특정 벡터 값들만 보는 것 전부 가능 

mask =  burger_df['calories'] <500
burger_df[mask]

 

burger_df.loc[mask, 'calories':'fat']

 

 

7. .loc[조건문, '특정 벡터'] = '' -->  불린 값에서 True만 특정 벡터 값을 만들거나, 수정해서 dataframe으로 출력.

- 이전에 없던 벡터 변수면 값을 추가하는 것이고, 이전에 있던 변수 명이면 값을 수정하는 것. 

- 예시는 불리안 조건에 불리안 값을 새로운 벡터에 넣었음. (길어서 잘랐음)

- 조건에 안 맞는 경우는 Nan이 들어가기 때문에 주의할 것. 

+ 그니깐 굳이, 변수를 따로 만들고 선언할 필요없이 한 번에 가능함. 

burger_df.loc[burger_df['calories'] >=500, 'high_calorie'] = True
burger_df.loc[burger_df['calories'] <500, 'high_calorie'] = False

 

 

++ 헷갈리지 말자... ㅎㅜ..헷갈리면 다시 들어와서 확인하쟈...ㅎ

 


<다중 조건 불린 인덱싱>

 

[파이썬 논리 연산자]

 

--> and는 모든 조건이 True일때 True 리턴

--> or은 한 조건 이상이 True일때 True 리턴

--> not은  True를 False로, False를 True 로 리턴

 

 

 

- 파이썬 논리 연산자를 이용해서 다중 조건 불린 인덱싱을 해줌. 

- 특별한 것은 아니고, 변수에 넣어주고 인덱싱을 변수들에 논리연산자를 사용해서 해주는 것.

condition1 = loan_df['married'] == 'Y'
condition2 = loan_df['applicant_income'] > loan_df['applicant_income'].mean()

loan_df[condition1 | condition2]

 

- 조건식이 짧은 경우에는 변수에 넣지 않고 바로 인자로 넣어줘도 됨. 

- 다만, ()로 구분을 해줘야 함. 

loan_df[(loan_df['married'] == 'Y') | (loan_df['applicant_income'] > loan_df['applicant_income'].mean())]

 

- 3개 이상의 조건을 주는 경우에는 우선순위를 고려해야 함. 

- 사실 컴퓨터가 계산을 알아서 해주지만, 코드를 읽을 때 헷갈리지 않도록 ()를 쳐주는 편임.

 

--> A | B & ~ C  --> 순서가  뒤에서 부터 비교됨

 

 

 

 

condition1 = loan_df['married'] == 'Y'
condition2 = loan_df['applicant_income'] > loan_df['applicant_income'].mean()
condition3 = loan_df['property_area']=='City'

loan_df[condition1 | condition2 & ~condition3]

#이렇게 해주는 게 코드 읽기가 더 편함 
loan_df[condition1 | (condition2 & ~condition3)]

 

728x90
반응형