pandas 100제: 판다스 연습문제와 풀이 · 7장

061–070 문자열과 날짜

str.strip, lower, replace, split, len, startswith, to_datetime, dt 연·월·요일, 날짜 차이, 월별 집계 연습문제

5분 읽기

문자열 열은 .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: object

062. 글자 바꾸기

phone의 하이픈(-)을 모두 지우세요.

정답 보기
Pythonorders['phone'].str.replace('-', '')
결과0    01012345678
1    01022223333
2    01098765432
3    01055550000
4    01011112222
Name: phone, dtype: object

063. 문자열 나누기

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: object

064. 글자 수

email의 글자 수를 구하세요.

정답 보기
Pythonorders['email'].str.len()
결과0    13
1    13
2    13
3    14
4    14
Name: email, dtype: int64

065. 특정 글자로 시작

이메일이 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   18000

066. 날짜형으로 바꾸기

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: object

067. 연·월·요일 꺼내기

날짜에서 월(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     Monday

068. 날짜 차이

각 주문이 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: int64

069. 기간으로 거르기

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  Tuesday

070. 월별 합계

월별 주문 금액 합계를 구하세요.

정답 보기
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")는 날짜를 연-월 단위로 묶습니다.

전체 메뉴