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 |
|
이름 |
학교 |
키 |
국어 |
영어 |
수학 |
과학 |
사회 |
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 |
댓글남기기