pandas 100제: 판다스 연습문제와 풀이 · 7장
061–070 문자열과 날짜
str.strip, lower, replace, split, len, startswith, to_datetime, dt 연·월·요일, 날짜 차이, 월별 집계 연습문제
문자열 열은 .str, 날짜 열은 .dt로 다룹니다. 준비 코드의 고객 이름에는 공백과 대소문자가 섞여 있습니다.
준비 코드
이 장의 문제는 아래 코드를 먼저 실행한 상태에서 풉니다.
Pythonimport pandas as pd
orders = pd.DataFrame({
'customer': [' Kim ', 'lee', 'PARK', 'Choi ', 'kim'],
'email': ['kim@naver.com', 'lee@gmail.com', 'park@daum.net', 'choi@gmail.com', 'kim2@naver.com'],
'phone': ['010-1234-5678', '010-2222-3333', '010-9876-5432', '010-5555-0000', '010-1111-2222'],
'order_date': ['2026-01-15', '2026-01-28', '2026-02-03', '2026-02-17', '2026-03-09'],
'amount': [32000, 15000, 47000, 22000, 18000],
})
061. 공백 지우고 소문자로
customer의 앞뒤 공백을 지우고 소문자로 바꾸세요.
정답 보기
Pythonorders['customer'].str.strip().str.lower()
결과0 kim
1 lee
2 park
3 choi
4 kim
Name: customer, dtype: object062. 글자 바꾸기
phone의 하이픈(-)을 모두 지우세요.
정답 보기
Pythonorders['phone'].str.replace('-', '')
결과0 01012345678
1 01022223333
2 01098765432
3 01055550000
4 01011112222
Name: phone, dtype: object063. 문자열 나누기
email에서 @ 뒤의 도메인만 꺼내세요.
정답 보기
Pythonorders['email'].str.split('@').str[1]
결과0 naver.com
1 gmail.com
2 daum.net
3 gmail.com
4 naver.com
Name: email, dtype: object064. 글자 수
email의 글자 수를 구하세요.
정답 보기
Pythonorders['email'].str.len()
결과0 13
1 13
2 13
3 14
4 14
Name: email, dtype: int64065. 특정 글자로 시작
이메일이 kim으로 시작하는 주문을 고르세요.
정답 보기
Pythonorders[orders['email'].str.startswith('kim')]
결과 customer email phone order_date amount
0 Kim kim@naver.com 010-1234-5678 2026-01-15 32000
4 kim kim2@naver.com 010-1111-2222 2026-03-09 18000066. 날짜형으로 바꾸기
order_date를 날짜형으로 바꾸고 자료형을 확인하세요.
정답 보기
Pythonorders['order_date'] = pd.to_datetime(orders['order_date'])
orders.dtypes
결과customer object
email object
phone object
order_date datetime64[ns]
amount int64
dtype: object067. 연·월·요일 꺼내기
날짜에서 월(month)과 요일(weekday) 열을 만드세요.
정답 보기
Pythonorders['month'] = orders['order_date'].dt.month
orders['weekday'] = orders['order_date'].dt.day_name()
orders[['order_date', 'month', 'weekday']]
결과 order_date month weekday
0 2026-01-15 1 Thursday
1 2026-01-28 1 Wednesday
2 2026-02-03 2 Tuesday
3 2026-02-17 2 Tuesday
4 2026-03-09 3 Monday068. 날짜 차이
각 주문이 2026-03-31로부터 며칠 전인지 구하세요.
정답 보기
Python(pd.Timestamp('2026-03-31') - orders['order_date']).dt.days
결과0 75
1 62
2 56
3 42
4 22
Name: order_date, dtype: int64069. 기간으로 거르기
2026년 2월에 들어온 주문만 고르세요.
정답 보기
Pythonorders[orders['order_date'].between('2026-02-01', '2026-02-28')]
결과 customer email phone order_date amount month weekday
2 PARK park@daum.net 010-9876-5432 2026-02-03 47000 2 Tuesday
3 Choi choi@gmail.com 010-5555-0000 2026-02-17 22000 2 Tuesday070. 월별 합계
월별 주문 금액 합계를 구하세요.
정답 보기
Pythonorders.groupby(orders['order_date'].dt.to_period('M'))['amount'].sum()
결과order_date
2026-01 47000
2026-02 69000
2026-03 18000
Freq: M, Name: amount, dtype: int64
to_period("M")는 날짜를 연-월 단위로 묶습니다.