01 조건문
-01 if문
-02 np.where
02 반복문
-01 for문
-02 while문
03 반복문 심화
-01 여러 대상에 대한 반복처리
-02 중첩 반복문
01 조건문
-01 if문
하나의 상수에 대한 조건 처리가 가능하다.
if 조건 :
참일 때 명령어
else :
거짓일 때 명령어
마지막 포지션 구분기호는 정해져있지 않다.
엔터로 빈 줄을 입력하면 코드의 끝을 선언한다.
만약 조건 내에 조건이 추가적으로 포함된다면 코드는 다음과 같다.
if 조건1 :
조건1이 참일 때 명령어
elif 조건2 :
조건1이 거짓이면서 조건2가 참일 때 명령어
else :
모두 거짓일 때 명령어
ex) 10보다 크면 A, 작거나 같으면 B 리턴
a1 = 15
s1 = Series([1,10,15,3,25])
if a1 > 10 :
print('A')
else :
print('B')
if a1 > 10 :
print('A')
else :
print('B')
A
if s1 > 10 : # 불가
print('A')
else :
print('B')
if s1 > 10 : # 불가
print('A')
else :
print('B')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_6544\759120846.py in ?()
----> 1 if s1 > 10 : # 불가
2 print('A')
3 else :
4 print('B')
~\anaconda3\Lib\site-packages\pandas\core\generic.py in ?(self)
1578 @final
1579 def __nonzero__(self) -> NoReturn:
-> 1580 raise ValueError(
1581 f"The truth value of a {type(self).__name__} is ambiguous. "
1582 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
1583 )
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
-02 np.where
numpy 제공 함수이며 R의 ifelse처럼 여러 대상에 대한 조건 처리가 가능하다. (반복문 없이)
출력 결과는 항상 array로 리턴된다.
ex) 10보다 크면 A, 작거나 같으면 B 리턴
s1 = Series([1,10,15,3,25])
np.where(s1 > 10, 'A', 'B')
np.where(s1 > 10, 'A', 'B')
Out[82]: array(['B', 'B', 'A', 'B', 'A'], dtype='<U1')
ex) emp.csv 파일을 이용한 np.where 실습
emp = pd.read_csv('emp.csv')
emp.dtypes
#1) DEPTNO가 10이면 인사부, 20이면 총무부, 그 외면 재무부 출력
np.where(emp['DEPTNO'] == 10, '인사부', np.where(emp['DEPTNO'] == 20, '총무부', '재무부'))
np.where(emp['DEPTNO'] == 10, '인사부', np.where(emp['DEPTNO'] == 20, '총무부', '재무부'))
Out[112]:
array(['총무부', '재무부', '재무부', '총무부', '재무부', '재무부', '인사부', '총무부', '인사부',
'재무부', '총무부', '재무부', '총무부', '인사부'], dtype='<U3')
#2) 급여등급 컬럼 생성
# 단, 급여등급은 급여가 3000 이상이면 A, 2000이상 3000 미만이면 B, 2000 미만이면 C
emp['GRADE'] = np.where(emp['SAL'] >= 3000, 'A', np.where(emp['SAL'] >= 2000, 'B', 'C'))
emp
Out[117]:
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO \
0 7369 SMITH CLERK 7902.0 1980-12-17 0:00 800 NaN 20
1 7499 ALLEN SALESMAN 7698.0 1981-02-20 0:00 1600 300.0 30
2 7521 WARD SALESMAN 7698.0 1982-02-22 0:00 1250 500.0 30
3 7566 JONES MANAGER 7839.0 1981-04-02 0:00 2975 NaN 20
4 7654 MARTIN SALESMAN 7698.0 1981-09-28 0:00 1250 1400.0 30
5 7698 BLAKE MANAGER 7839.0 1981-05-01 0:00 2850 NaN 30
6 7782 CLARK MANAGER 7839.0 1981-06-09 0:00 2450 NaN 10
7 7788 SCOTT ANALYST 7566.0 1987-04-17 0:00 3000 NaN 20
8 7839 KING PRESIDENT NaN 1981-11-17 0:00 5000 NaN 10
9 7844 TURNER SALESMAN 7698.0 1981-09-08 0:00 1500 0.0 30
10 7876 ADAMS CLERK 7788.0 1987-05-23 0:00 1100 NaN 20
11 7900 JAMES CLERK 7698.0 1981-12-03 0:00 950 NaN 30
12 7902 FORD ANALYST 7566.0 1981-12-03 0:00 3000 NaN 20
13 7934 MILLER CLERK 7782.0 1982-01-23 0:00 1300 NaN 10
GRADE
0 C
1 C
2 C
3 B
4 C
5 B
6 B
7 A
8 A
9 C
10 C
11 C
12 A
13 C
02 반복문
-01 for문
반복횟수 혹은 대상이 정해진 경우의 반복을 처리한다.
for 반복변수 in 대상 :
반복할 문장
마지막 포지션 구분기호는 정해져있지 않다.
엔터로 빈 줄을 입력하면 코드의 끝을 선언한다.
+) 최적의 매개변수 조합을 찾는 것을 그리드 서치라고 한다.
c에 따른 gamma의 변화 등을 확인해야하다보니 for문이 2번씩 필요한 상황이 생긴다. (중첩 for문)
예) 1~10까지 출력
# sequence와 같은 기능을 하는 range를 사용한다.
# range는 마지막 범위를 세지 않기 때문에 10이 아닌 11을 입력해야 한다.
list(range(1,11))
list(range(1,11,2))
list(range(1,11))
Out[121]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(range(1,11,2))
Out[122]: [1, 3, 5, 7, 9]
for i in range(1,11) :
print(i)
for i in range(1,11) :
print(i)
1
2
3
4
5
6
7
8
9
10
예) 각 리스트의 원소에 100을 더한 값을 리턴
list1 = [1,2,3,4,5]
for i in list1 :
i + 100
result = []
for i in list1 :
result.append(i + 100)
▲ list의 append는 즉시 반영이기 때문에 result = result.appne(i+100)의 형태로 작성하지 않아도 충분하다.
result
Out[133]: [101, 102, 103, 104, 105]
ex) emp.csv 파일을 이용한 for문 실습
# 1) 입사일에서 입사연도 추출하기
emp['HIREDATE'].split('-')
year = []
for i in emp['HIREDATE'] :
year.append(i.split('-')[0])
year
Out[141]:
['1980',
'1981',
'1982',
'1981',
'1981',
'1981',
'1981',
'1987',
'1981',
'1981',
'1987',
'1981',
'1981',
'1982']
# 또는
result = []
for i in emp['HIREDATE'] :
result.append(int(i[:4]))
result
emp['입사연도'] = result
# 2) 이름을 모두 소문자로 변경
result = []
for i in emp['ENAME'] :
result.append(i.lower())
emp['ENAME'] = result
emp
Out[160]:
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO \
0 7369 smith CLERK 7902.0 1980-12-17 0:00 800 NaN 20
1 7499 allen SALESMAN 7698.0 1981-02-20 0:00 1600 300.0 30
2 7521 ward SALESMAN 7698.0 1982-02-22 0:00 1250 500.0 30
3 7566 jones MANAGER 7839.0 1981-04-02 0:00 2975 NaN 20
4 7654 martin SALESMAN 7698.0 1981-09-28 0:00 1250 1400.0 30
5 7698 blake MANAGER 7839.0 1981-05-01 0:00 2850 NaN 30
6 7782 clark MANAGER 7839.0 1981-06-09 0:00 2450 NaN 10
7 7788 scott ANALYST 7566.0 1987-04-17 0:00 3000 NaN 20
8 7839 king PRESIDENT NaN 1981-11-17 0:00 5000 NaN 10
9 7844 turner SALESMAN 7698.0 1981-09-08 0:00 1500 0.0 30
10 7876 adams CLERK 7788.0 1987-05-23 0:00 1100 NaN 20
11 7900 james CLERK 7698.0 1981-12-03 0:00 950 NaN 30
12 7902 ford ANALYST 7566.0 1981-12-03 0:00 3000 NaN 20
13 7934 miller CLERK 7782.0 1982-01-23 0:00 1300 NaN 10
GRADE 입사연도
0 C 1980
1 C 1981
2 C 1982
3 B 1981
4 C 1981
5 B 1981
6 B 1981
7 A 1987
8 A 1981
9 C 1981
10 C 1987
11 C 1981
12 A 1981
13 C 1982
-02 while문
조건에 따라 반복을 처리한다.
초기값, 다음값에 대한 지정이 필요할 수 있다.
while 반복변수 :
반복할 문장
마지막 포지션 구분기호는 정해져있지 않다.
엔터로 빈 줄을 입력하면 코드의 끝을 선언한다.
예) 1 ~ 100의 총합 구하기
i = 1 # 초기값 선언
vsum = 0
while i <= 100 :
vsum = vsum + i # vsum += 1 (축약형 : 똑같은 변수에 계속해서 더하여 그 결과를 덮어쓸 때 사용)
i = i + 1 # i += 1 (축약형 : 똑같은 변수에 계속해서 더하여 그 결과를 덮어쓸 때 사용)
print(vsum)
i = 1 # 초기값 선언
vsum = 0
while i <= 100 :
vsum = vsum + i
i = i + 1
print(vsum)
5050
[ 연습문제 for + if ]
1. 부서이름 출력 (10:A, 20:B, 30:C)
emp
dname = []
for i in emp['DEPTNO'] :
if i == 10 :
dname.append('A')
elif i == 20 :
dname.append('B')
else :
dname.append('C')
dname
Out[170]: ['B', 'C', 'C', 'B', 'C', 'C', 'A', 'B', 'A', 'C', 'B', 'C', 'B', 'A']
2. 급여등급 출력 (3000 이상 : A, 2000 이상 : B, 2000 미만 : C)
grade = []
for i in emp['SAL'] :
if i >= 3000 :
grade.append('A')
elif i >= 2000 :
grade.append('B')
else :
grade.append('C')
grade
Out[175]: ['C', 'C', 'C', 'B', 'C', 'B', 'B', 'A', 'A', 'C', 'C', 'C', 'A', 'C']
03 반복문 심화
-01 여러 대상에 대한 반복처리
ex) emp에서 새 급여 출력
단, 10번 부서는 기존 급여의 10% 인상된 급여, 20번 부서는 15% 인상된 급여, 30번 부서는 20% 인상된 급여
# 잘못된 접근)
# 매 결과마다 SAL 열 전체를 계속해서 반복하게 되므로, 총 14 * 14개의 결과를 리턴
# 각 행마다의 DEPTNO, SAL 둘 다 하나씩 FETCH를 해야한다.
newsal = []
for i in emp['DEPTNO'] :
if i == 10 :
newsal.append(emp['SAL'] * 1.1)
elif i == 20 :
newsal.append(emp['SAL'] * 1.15)
else :
newsal.append(emp['SAL'] * 1.2)
# 방법1) 위치기반 for문
newsal = []
for i in range(0,14) :
if emp['DEPTNO'][0] == 10 :
newsal.append(int(emp['SAL'][i] * 1.1))
elif emp['DEPTNO'][0] == 20 :
newsal.append(int(emp['SAL'][i] * 1.15))
else :
newsal.append(int(emp['SAL'][i] * 1.2))
newsal
Out[182]:
[919,
1839,
1437,
3421,
1437,
3277,
2817,
3449,
5750,
1724,
1265,
1092,
3449,
1494]
# 방법2) zip을 사용한 동시 fetch (*****)
newsal = []
for i, j in zip(emp['DEPTNO'], emp['SAL']) :
if i == 10 :
newsal.append(int(j * 1.1))
elif i == 20 :
newsal.append(int(j * 1.15))
else :
newsal.append(int(j * 1.2))
newsal
Out[184]:
[919,
1920,
1500,
3421,
1500,
3420,
2695,
3449,
5500,
1800,
1265,
1140,
3449,
1430]
[ 연습문제 - zip ]
std에서 표준몸무게 출력
표준몸무게는 다음과 같이 구한다고 가정한다. :
키 >= 170 -> (키 - 100) * 0.9
키 < 170 -> 키-100
* 비만여부는
# 몸무게 > 표준몸무게 : 비만
# 몸무게 < 표준몸무게 : 저체중
# 몸무게 = 표준몸무게 : 정상
biman = []
for i, j in zip(std['HEIGHT'], std['WEIGHT']) :
# 키에 따른 표준몸무게 생성
if i >= 170 :
vweight = (i - 100) * 0.9
else :
vweight = (i - 100)
# 비만여부 결정
if j > vweight :
biman.append('비만')
elif j < vweight :
biman.append('저체중')
else :
biman.append('정상')
biman
biman
Out[217]:
['정상',
'저체중',
'저체중',
'비만',
'저체중',
'저체중',
'저체중',
'저체중',
'저체중',
'저체중',
'저체중',
'비만',
'비만',
'저체중',
'저체중',
'저체중',
'저체중',
'비만',
'비만',
'저체중']
-02 중첩 반복문
list2 = [[1,2,3],[4,5,6],[7,8,9]]
df = DataFrame(list2, columns = list('ABC'))
df
Out[229]:
A B C
0 1 2 3
1 4 5 6
2 7 8 9
for i in list2 :
for j in i :
print(j)
for i in list2 :
for j in i :
print(j)
1
2
3
4
5
6
7
8
9
ex) df 모든 출력형식을 소숫점 둘째자리로 표현해서 저장
outlist = []
for i in df.values :
inlist = []
for j in i :
inlist.append('%.2f' % j)
outlist.append(inlist)
outlist
Out[244]: [['1.00', '2.00', '3.00'], ['4.00', '5.00', '6.00'], ['7.00', '8.00', '9.00']]
df.applymap(lambda x : '%.2f' % x)
df.applymap(lambda x : '%.2f' % x)
C:\Users\--\3137142294.py:1: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.
df.applymap(lambda x : '%.2f' % x)
Out[245]:
A B C
0 1.00 2.00 3.00
1 4.00 5.00 6.00
2 7.00 8.00 9.00
ex) card_history.csv 파일을 읽고 천 단위 구분기호 삭제
card = pd.read_csv('card_history.csv', encoding = 'cp949')
card
card = card.iloc[:, 1:]
outlist = []
for i in card.values :
inlist = []
for j in i :
inlist.append(j.replace(',',''))
outlist.append(inlist)
outlist
card[:] = outlist # key-value 구조 유지를 위해 원소만 덮어씌우기를 지정한다. [:]
card
Out[271]:
식료품 의복 외식비 책값 온라인소액결제 의료비
0 19400 143000 8600 29000 5600 19200
1 22200 120400 7000 26000 3300 13000
2 24600 88500 7500 22000 7500 16600
3 22300 124800 7700 78000 3900 28100
4 31800 130100 8400 25000 7700 20500
5 43000 118200 6300 25000 4300 32500
6 29400 147600 10700 24000 12000 26500
7 29200 161900 7500 33000 6300 3500
8 29100 134900 4600 27000 7300 18700
9 24000 136100 8100 32000 6600 24400
10 30100 139600 7500 23000 7300 27300
card.applymap(lambda x : int(x.replace(',','')))
card.applymap(lambda x : int(x.replace(',','')))
C:\Users\--\3547279066.py:1: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.
card.applymap(lambda x : int(x.replace(',','')))
Out[272]:
식료품 의복 외식비 책값 온라인소액결제 의료비
0 19400 143000 8600 29000 5600 19200
1 22200 120400 7000 26000 3300 13000
2 24600 88500 7500 22000 7500 16600
3 22300 124800 7700 78000 3900 28100
4 31800 130100 8400 25000 7700 20500
5 43000 118200 6300 25000 4300 32500
6 29400 147600 10700 24000 12000 26500
7 29200 161900 7500 33000 6300 3500
8 29100 134900 4600 27000 7300 18700
9 24000 136100 8100 32000 6600 24400
10 30100 139600 7500 23000 7300 27300
-03 반복 제어문
반복문 수행 시 특정 조건의 경우 반복 행위를 스킵하거나 아예 반복문 자체를 종료하는 구문이다.
shell 스크립트에서도 동일하게 작성된다.
1) continue (in R : next)
특정 조건을 만족하는 경우 반복 행위를 스킵할 때 사용하는 구문이다.
ex) 1~10 출력 중 5의 출력만 스킵하기
for i in range(1,11) :
print(i)
for i in range(1,11) :
print(i)
1
2
3
4
5
6
7
8
9
10
for i in range(1,11) :
if i == 5 :
continue
print(i)
for i in range(1,11) :
if i == 5 :
continue
print(i)
1
2
3
4
6
7
8
9
10
2) break
특정 조건을 만족하는 경우 그 이후 반복 행위를 아예 중단하는 구문이다.
ex) 1~10 출력 중 5부터의 출력은 중단
for i in range(1,11) :
if i == 5 :
break
print(i)
1
2
3
4
3) exit
프로그램을 즉시 중단한다.
종료코드 : 0(정상), 1(비정상)
for i in range(1,11) :
if i == 5 :
exit(1)
print(i)
4) pass
v1 = 10
if v1 > 3 :
pass
else :
print('error')
v1 = 1
if v1 > 3 :
pass
else :
print('error')
v1 = 10
if v1 > 3 :
pass
else :
print('error')
v1 = 1
if v1 > 3 :
pass
else :
print('error')
error
ex) 1부터 100까지의 누적합을 연산하다가 누적합이 3000이 넘는 지점을 확인
vsum = 0
for i in range(1,101) :
vsum = vsum + i
if vsum >= 3000:
break
print(i)
vsum = 0
for i in range(1,101) :
vsum = vsum + i
if vsum >= 3000:
break
print(i)
77
print(vsum)
print(vsum)
3003'아이티윌_데이터 분석 55기 > 강의내용 필기_Python' 카테고리의 다른 글
| #6 6일차_pd의 행·열 결합 / 수학 및 통계 함수·메서드 / 결측치 처리 (0) | 2026.05.18 |
|---|---|
| #5 5일차_형 변환 함수/매서드, SQL사용, DB 연동, array (0) | 2026.05.15 |
| #4 4일차_사용자 정의함수, groupby 연산, 조인 (0) | 2026.05.14 |
| #2 2일차_문자열 매서드, pandas 자료구조(Series, DataFrame), 적용함수 (0) | 2026.05.12 |
| #1 1일차_파이썬 설치 및 실행, 실습, 자료구조(리스트) (0) | 2026.05.11 |