본문으로 건너뛰기

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

부록 pandas 치트시트: 100제 핵심 문법 한눈에 보기

pandas 100제에 나온 핵심 문법을 장별 표로 정리하고, loc·iloc, agg·transform, merge·concat처럼 헷갈리는 짝을 비교한 치트시트

9분 읽기

이 장의 목차 13개

pandas 100제에서 쓴 핵심 문법을 장별로 모은 요약표입니다. 각 표의 "문제" 칸 번호로 돌아가면 같은 문법을 쓴 실제 예제와 실행 결과, 풀이가 있습니다.

처음 데이터를 받으면 이 순서로

  1. 모양 보기 — df.shape, df.head(), df.tail()
  2. 열과 자료형 — df.columns, df.dtypes (숫자여야 할 열이 문자열로 들어오지 않았는지)
  3. 빈 값과 중복 — df.isna().sum(), df.duplicated().sum()
  4. 요약과 분포 — df.describe(), df["범주"].value_counts()
  5. 정리 — 공백·대소문자(.str), 날짜 변환(pd.to_datetime), 결측치 처리
  6. 질문에 답하기 — 거르기·정렬·groupby·merge
  7. 그래프로 확인 — plot()으로 숫자가 말하는 것을 눈으로 확인

헷갈리는 짝 한 번에 비교

짝앞의 것뒤의 것문제
df["a"] vs df[["a"]]Series(1차원)DataFrame(열 하나짜리 표)021–022
loc vs iloc라벨로, 끝 포함위치로, 끝 미포함024–025
and·or vs &·파이프파이썬 값 하나끼리Series끼리 칸별 계산(괄호 필수)032–033
sort_values vs sort_index값으로 정렬인덱스(라벨)로 정렬041, 045
rank(method="min") vs "dense"1, 1, 31, 1, 2046
dropna vs fillna빈 값이 있는 행을 지움빈 값을 다른 값으로 채움053–057
size() vs count()그룹의 행 수(빈 값 포함)열별 유효 값 수(빈 값 제외)077
agg vs transform그룹 하나에 결과 하나(행 수 줄어듦)원래 행마다 결과(행 수 유지)074, 078
merge vs concat키 값으로 짝지어 붙임순서·인덱스대로 이어 붙임081–086
pivot vs pivot_table중복 없으면 모양만 바꿈중복을 집계 함수로 합침076, 088
cut vs qcut정한 경계값으로인원이 비슷하도록 분위수로091, 094
shift vs diff값을 한 칸 밀기직전 값과의 차이098

001–010 Series와 DataFrame 만들기

문법하는 일문제
pd.Series(리스트, index=[...])값 목록에 이름표(인덱스)를 붙인 1차원 자료001–002
pd.Series(딕셔너리, name=...)키가 인덱스, 값이 값003
s.idxmax() / s.max()최댓값의 인덱스 / 최댓값004
pd.DataFrame({열: [값...]})열 단위 자료로 표 만들기005
pd.DataFrame(행 리스트, columns=[...])행 단위 자료로 표 만들기006–007
df.shape(행 수, 열 수)008
df.rename(columns={옛: 새})열 이름 바꾸기(새 표 반환)009
df.set_index("열")열을 인덱스로 옮기기010

문제 풀러 가기 →

011–020 데이터 살펴보기

문법하는 일문제
df.head(n) / df.tail(n)앞 / 뒤 n행 보기011–012
df.columns.tolist()열 이름 리스트013
df.dtypes열별 자료형014
s.describe()개수·평균·표준편차·사분위수 요약015
s.value_counts()값별 등장 횟수(많은 순)016
s.unique() / s.nunique()고유 값 목록 / 개수017
s.mean(), s.max(), df[[...]].mean()평균·최댓값, 열별 평균018–019
df.sample(n, random_state=0)무작위 n행(재현 가능)020

문제 풀러 가기 →

021–030 열과 행 선택하기

문법하는 일문제
df["열"]열 하나 → Series021
df[["열1", "열2"]]여러 열 → DataFrame022
df.loc[라벨]라벨로 행 하나023
df.iloc[행 위치, 열 위치]위치로 고르기(끝 미포함)024
df.loc[행 라벨, [열 이름]]라벨로 고르기(끝 포함)025
df.at[라벨, "열"]값 하나026
df.drop(columns="열")열 빼기(새 표 반환)027
df["새 열"] = 식열 추가·덮어쓰기028–029

문제 풀러 가기 →

031–040 조건으로 거르기

문법하는 일문제
df[df["열"] >= 값]조건에 맞는 행만031
df[(조건1) & (조건2)]두 조건 모두(조건마다 괄호)032
파이프 기호로 묶기조건 중 하나라도(또는)033
s.isin([...])목록 중 하나인가034
df[~조건]조건 뒤집기035
df.query("kor > eng")문자열로 조건 쓰기036
s.between(a, b)a 이상 b 이하037
s.str.contains("글자")글자가 들어 있나038
조건.sum()조건에 맞는 개수039
np.where(조건, 참값, 거짓값)조건으로 값 정하기040

문제 풀러 가기 →

041–050 정렬과 순위

문법하는 일문제
df.sort_values("열", ascending=False)내림차순 정렬041
sort_values([열1, 열2], ascending=[True, False])여러 기준 정렬042
df.nlargest(n, "열") / nsmallest상위 / 하위 n행043–044
df.sort_index() / sort_index(axis=1)인덱스 순 / 열 이름 순045, 050
s.rank(ascending=False, method="min")순위(동점은 같은 순위)046
df.groupby("반")["열"].rank(...)그룹 안 순위047
df.reset_index(drop=True)인덱스 0부터 다시048
df.loc[s.idxmax(), "name"]최댓값 행의 다른 열 값049

문제 풀러 가기 →

051–060 결측치와 중복

문법하는 일문제
df.isna().sum()열별 결측치 수051
df[df.isna().any(axis=1)]결측치가 있는 행052
df.dropna() / dropna(subset=[열])결측 행 지우기(전체 / 특정 열 기준)053–054
s.fillna(값)빈 값 채우기055–056
s.fillna(df.groupby(g)[열].transform("mean"))그룹 평균으로 채우기057
s.ffill()위 값으로 채우기058
df.duplicated()앞에 같은 행이 있었나059
df.drop_duplicates(subset=, keep=)중복 지우기060

문제 풀러 가기 →

061–070 문자열과 날짜

문법하는 일문제
s.str.strip() / .str.lower()앞뒤 공백 제거 / 소문자061
s.str.replace("-", "")글자 바꾸기062
s.str.split("@").str[1]나눠서 n번째 조각063
s.str.len() / .str.startswith()글자 수 / 시작 글자 검사064–065
pd.to_datetime(s)날짜형으로 변환066
s.dt.month / .dt.day_name()월 / 요일 이름067
(날짜1 - 날짜2).dt.days날짜 차이(일)068
s.dt.to_period("M")연-월 단위로 묶기070

문제 풀러 가기 →

071–080 그룹별 집계

문법하는 일문제
df.groupby("키")["열"].sum()그룹별 합계071–072
.agg(["sum", "mean", "max"])여러 집계 한 번에073
.agg(새이름=("열", "함수"))이름 붙인 집계074
groupby([키1, 키2])[열].sum().unstack()두 기준 집계를 표로 펼치기075
df.pivot_table(index=, columns=, values=, aggfunc=)피벗 테이블076
groupby("키").size()그룹별 행 수077
groupby("키")[열].transform("sum")그룹 결과를 행마다 붙이기078
groupby("키").filter(lambda g: ...)조건 맞는 그룹의 행만079
df.loc[groupby("키")[열].idxmax()]그룹별 최댓값 행080

문제 풀러 가기 →

081–090 합치기와 모양 바꾸기

문법하는 일문제
a.merge(b, on="키")공통 키로 합치기(inner)081
merge(..., how="left")왼쪽 행 모두 유지082
merge(left_on=, right_on=)키 열 이름이 다를 때083
merge(how="outer", indicator=True)전부 남기고 출처 표시084
pd.concat([a, b], ignore_index=True)위아래로 붙이기085
pd.concat([a, b], axis=1)옆으로 붙이기(인덱스 기준)086
df.melt(id_vars=, var_name=, value_name=)넓은 표 → 긴 표087
df.pivot(index=, columns=, values=)긴 표 → 넓은 표088
pd.crosstab(행, 열)교차표(빈도)089
df.explode("열")리스트를 행으로 펼치기090

문제 풀러 가기 →

091–100 실전 종합

문법하는 일문제
pd.cut(s, bins=, labels=, include_lowest=True)경계값으로 구간091
s.map({옛값: 새값})값 바꿔 끼우기092
df.idxmax(axis=1)행마다 최댓값의 열 이름093
pd.qcut(s, 4, labels=)분위수로 구간094
s.cumsum()누적 합계095
s.rolling(3).mean()이동 평균096
s.pct_change()직전 대비 변화율097
s.shift(1)한 칸 밀기(전날 값)098
df.corr()상관계수 표099
groupby().agg(이름=(열, 함수))종합 리포트100

문제 풀러 가기 →

보너스: 그래프

그래프코드문제
선df.plot(x=, y=, marker="o")V01, V09
막대 / 가로 막대s.plot(kind="bar", rot=0) / kind="barh"V02–V03
히스토그램s.plot(kind="hist", bins=...)V04
상자그림df[[...]].plot(kind="box")V05
산점도df.plot(kind="scatter", x=, y=)V06
묶은 / 누적 막대피벗표.plot(kind="bar", stacked=True)V07–V08
여러 칸, 저장fig, axes = plt.subplots(1, 2), ax=axes[0], fig.savefig()V10
한글 글꼴import koreanize_matplotlib보너스 준비 코드

그래프 문제 풀러 가기 →

전체 메뉴