#코드잇 데이터 사이언스 강의 듣는 중
#데이터 사이언스 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)]
'Data Science > Pandas' 카테고리의 다른 글
[EDA] 적용 예제 (0) | 2024.06.07 |
---|---|
[EDA] 가설 검정 전에 data set을 살피는 단계 (2) | 2024.06.03 |
[Pandas] DataFrame/Series 정보 확인, .describe(), .value_counts() (0) | 2024.05.30 |
[Pandas] DataFrame 값 수정/추가/삭제, header/index 명 지정하기 (0) | 2024.05.28 |
[Pandas] DataFrame indexing 문법 정리 (이름, 위치) (0) | 2024.05.27 |