4 분 소요

9. 데이터 선택 (조건)

조건에 해당하는 데이터 선택

import pandas as pd
df = pd.read_excel('score.xlsx', index_col='지원번호')
df
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
1번 채치수 북산고 197 90 85 100 95 85 Python
2번 정대만 북산고 184 40 35 50 55 25 Java
3번 송태섭 북산고 168 80 75 70 80 75 Javascript
4번 서태웅 북산고 187 40 60 70 75 80 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
6번 변덕규 능남고 202 80 100 95 85 80 C
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
8번 윤대협 능남고 190 100 85 90 95 95 C#
df['키'] >= 185 # 학생들의 키가 185 이상인지 여부를 True / False
지원번호
1번     True
2번    False
3번    False
4번     True
5번     True
6번     True
7번     True
8번     True
Name: 키, dtype: bool
filt = (df['키'] >= 185)
df[filt]
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
1번 채치수 북산고 197 90 85 100 95 85 Python
4번 서태웅 북산고 187 40 60 70 75 80 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
6번 변덕규 능남고 202 80 100 95 85 80 C
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
8번 윤대협 능남고 190 100 85 90 95 95 C#
df [~filt] # filter 를 역으로 적용
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
2번 정대만 북산고 184 40 35 50 55 25 Java
3번 송태섭 북산고 168 80 75 70 80 75 Javascript
df[df['키'] >= 185]
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
1번 채치수 북산고 197 90 85 100 95 85 Python
4번 서태웅 북산고 187 40 60 70 75 80 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
6번 변덕규 능남고 202 80 100 95 85 80 C
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
8번 윤대협 능남고 190 100 85 90 95 95 C#
df.loc[df['키'] >= 185 , '수학'] # df.loc[row_sel, col_sel] 
지원번호
1번    100
4번     70
5번     10
6번     95
7번     45
8번     90
Name: 수학, dtype: int64
df.loc[df['키'] >= 185 , ['이름','수학','과학']] # 키가 185 이상인 학생들의 이름,수학,과학 데이터 
이름 수학 과학
지원번호
1번 채치수 100 95
4번 서태웅 70 75
5번 강백호 10 35
6번 변덕규 95 85
7번 황태산 45 40
8번 윤대협 90 95

다양한 조건

& 그리고

df.loc[(df['키'] >= 185) & (df['학교'] == '북산고')] # 키가 185 이상인 북산고 학생 데이터
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
1번 채치수 북산고 197 90 85 100 95 85 Python
4번 서태웅 북산고 187 40 60 70 75 80 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN

| 또는

df.loc[(df['키'] < 170) | (df['키'] > 200)] # 키가 170보다 작거나, 200 보다 큰 학생 데이터
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
3번 송태섭 북산고 168 80 75 70 80 75 Javascript
6번 변덕규 능남고 202 80 100 95 85 80 C

str 함수

filt = df['이름'].str.startswith('송') # '송'씨 성을 가진 사람
df[filt]
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
3번 송태섭 북산고 168 80 75 70 80 75 Javascript
filt = df['이름'].str.contains('태') # 이름에 '태'가 들어가는 사람
df[filt]
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
3번 송태섭 북산고 168 80 75 70 80 75 Javascript
4번 서태웅 북산고 187 40 60 70 75 80 NaN
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
df[~filt] # 이름에 '태'가 들어가는 사람을 제외
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
1번 채치수 북산고 197 90 85 100 95 85 Python
2번 정대만 북산고 184 40 35 50 55 25 Java
5번 강백호 북산고 188 15 20 10 35 10 NaN
6번 변덕규 능남고 202 80 100 95 85 80 C
8번 윤대협 능남고 190 100 85 90 95 95 C#
langs = ['Python', 'Java']
filt = df['SW특기'].isin(langs) # SW 특기가 Python 이거나 Java 인 사람
df[filt] # 황태산이 빠졌다.
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
1번 채치수 북산고 197 90 85 100 95 85 Python
2번 정대만 북산고 184 40 35 50 55 25 Java
langs = ['python', 'java']
filt = df['SW특기'].str.lower().isin(langs)
df[filt]
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
1번 채치수 북산고 197 90 85 100 95 85 Python
2번 정대만 북산고 184 40 35 50 55 25 Java
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
filt = df['SW특기'].str.contains('Java', na=True) # NaN 데이터에 대해서 True로 설정
df[filt]
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
2번 정대만 북산고 184 40 35 50 55 25 Java
3번 송태섭 북산고 168 80 75 70 80 75 Javascript
4번 서태웅 북산고 187 40 60 70 75 80 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
filt = df['SW특기'].str.contains('Java', na=False) # NaN 데이터에 대해서 False로 설정
df[filt]
이름 학교 국어 영어 수학 과학 사회 SW특기
지원번호
2번 정대만 북산고 184 40 35 50 55 25 Java
3번 송태섭 북산고 168 80 75 70 80 75 Javascript

댓글남기기