본문으로 건너뛰기

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

011–020 데이터 살펴보기

head, tail, dtypes, describe, value_counts, unique, nunique, mean, sample 연습문제

7분 읽기

이 장의 목차 13개

처음 받은 데이터를 훑어보는 함수들입니다. 실무에서 가장 자주 치는 코드이기도 합니다.

수학 점수 8개를 수직선에 놓고 describe() 결과를 표시한 그림
수학 점수 8개를 수직선에 놓고 describe() 결과를 표시한 그림

describe()가 돌려주는 숫자를 수직선에 그려 보면 의미가 바로 보입니다. min과 max는 양 끝, 50%(중앙값)는 한가운데 학생의 점수, 25%~75% 상자 안에는 가운데 절반의 학생이 들어 있습니다. mean(평균)은 낮은 점수 하나에도 끌려가기 때문에 중앙값과 다를 수 있습니다. count는 빈 값을 뺀 개수입니다.

준비 코드와 데이터

노트북 첫 셀에 아래 준비 코드를 붙여 넣어 실행한 뒤 문제를 푸세요.

Pythonimport pandas as pd
import numpy as np

df = pd.DataFrame({
    'name': ['김민준', '이서연', '박지호', '최수아', '정민서', '강도윤', '윤하은', '임시우'],
    'class': ['A', 'B', 'A', 'C', 'B', 'C', 'A', 'B'],
    'kor': [85, 92, 58, 77, 66, 90, 73, 81],
    'eng': [78, 88, 64, 95, 59, 70, 82, 91],
    'math': [92, 75, 49, 88, 71, 66, 95, 60],
})

이 장 실습 노트북 내려받기 (.ipynb) — 준비 코드와 문제가 들어 있고 답 칸은 비어 있습니다. 코랩에서는 파일 → 노트 업로드로 엽니다.

준비 코드를 실행하면 df는 다음 표가 됩니다(8행 × 5열, 맨 왼쪽 숫자는 인덱스).

결과     name class  kor  eng  math
0  김민준     A   85   78    92
1  이서연     B   92   88    75
2  박지호     A   58   64    49
3  최수아     C   77   95    88
4  정민서     B   66   59    71
5  강도윤     C   90   70    66
6  윤하은     A   73   82    95
7  임시우     B   81   91    60

장 안의 문제는 번호 순서대로 이어집니다. 앞 문제에서 만든 열이나 변수를 다음 문제가 쓸 수 있으니, 중간부터 풀 때는 준비 코드와 앞의 필요한 문제를 먼저 실행하세요.

011. 앞부분 보기

df의 처음 3행을 보이세요.

힌트 보기

head() 괄호 안에 보고 싶은 행 수를 넣습니다.

정답 보기
Pythondf.head(3)
결과     name class  kor  eng  math
0  김민준     A   85   78    92
1  이서연     B   92   88    75
2  박지호     A   58   64    49

풀이: head는 현재 순서에서 앞의 행을 고릅니다. 점수 순위로 정렬하는 함수는 아닙니다.

head()만 쓰면 5행입니다.

012. 뒷부분 보기

df의 마지막 2행을 보이세요.

힌트 보기

head의 반대는 tail입니다.

정답 보기
Pythondf.tail(2)
결과     name class  kor  eng  math
6  윤하은     A   73   82    95
7  임시우     B   81   91    60

풀이: tail은 현재 순서에서 마지막 행을 고릅니다. 원래 인덱스도 함께 남습니다.

013. 열 이름 목록

df의 열 이름을 리스트로 구하세요.

힌트 보기

df.columns는 Index 객체입니다. 파이썬 리스트로 바꾸는 메서드를 붙이세요.

정답 보기
Pythondf.columns.tolist()
결과['name', 'class', 'kor', 'eng', 'math']

풀이: columns는 열 라벨을 담는 Index입니다. tolist로 일반 파이썬 리스트로 바꿉니다.

014. 열별 자료형

df의 열별 자료형을 확인하세요.

힌트 보기

열마다 자료형을 보여 주는 속성 dtypes가 있습니다.

정답 보기
Pythondf.dtypes
결과name       str
class      str
kor      int64
eng      int64
math     int64
dtype: object

풀이: dtype으로 숫자와 문자열 저장 방식을 확인하면 계산 전에 자료형 오류를 발견할 수 있습니다.

문자열 열은 object로 보입니다.

pandas 2.x에서는 값은 같고 표시만 다음과 같습니다.

결과name     object
class    object
kor       int64
eng       int64
math      int64
dtype: object

015. 요약 통계

수학 점수의 개수, 평균, 표준편차, 사분위수를 한 번에 구하세요.

힌트 보기

한 열을 꺼낸 다음 describe()를 붙입니다.

정답 보기
Pythondf['math'].describe()
결과count     8.000000
mean     74.500000
std      16.274432
min      49.000000
25%      64.500000
50%      73.000000
75%      89.000000
max      95.000000
Name: math, dtype: float64

풀이: describe는 선택한 수학 열의 요약 통계입니다. count는 결측치를 제외한 값 수입니다.

016. 범주별 개수

반별 학생 수를 구하세요.

힌트 보기

범주별로 몇 번 나왔는지 세는 함수는 value_counts()입니다.

정답 보기
Pythondf['class'].value_counts()
결과class
A    3
B    3
C    2
Name: count, dtype: int64

풀이: value_counts는 각 반의 등장 횟수입니다. 결측치는 기본적으로 제외됩니다.

많은 순으로 정렬되어 나옵니다.

017. 고유한 값

반 이름의 종류와 종류 수를 구하세요.

힌트 보기

unique()는 종류 목록, nunique()는 종류 개수입니다.

정답 보기
Pythondf['class'].unique(), df['class'].nunique()
결과(<StringArray>
['A', 'B', 'C']
Length: 3, dtype: str, 3)

풀이: unique는 고유 값들을, nunique는 그 개수를 반환합니다. unique 결과를 자동으로 알파벳순 정렬하지는 않습니다.

pandas 2.x에서는 값은 같고 표시만 다음과 같습니다.

결과(array(['A', 'B', 'C'], dtype=object), 3)

018. 평균과 최댓값

국어 점수의 평균과 최댓값을 구하세요.

힌트 보기

mean()과 max()를 쉼표로 이어 씁니다.

정답 보기
Pythondf['kor'].mean(), df['kor'].max()
결과(np.float64(77.75), np.int64(92))

풀이: 같은 국어 열에 mean과 max를 따로 적용해 두 통계를 튜플로 묶습니다.

019. 여러 열의 평균

세 과목 각각의 평균을 구하세요.

힌트 보기

세 열을 df[[...]]로 먼저 고른 다음 mean()을 붙이면 열마다 계산됩니다.

정답 보기
Pythondf[['kor', 'eng', 'math']].mean()
결과kor     77.750
eng     78.375
math    74.500
dtype: float64

풀이: 선택한 세 숫자 열마다 평균을 계산합니다. axis를 생략하면 열별 계산입니다.

020. 무작위로 뽑기

df에서 3행을 무작위로 뽑으세요. 결과가 늘 같도록 random_state=0을 주세요.

힌트 보기

sample(뽑을 행 수, random_state=0).

정답 보기
Pythondf.sample(3, random_state=0)
결과     name class  kor  eng  math
6  윤하은     A   73   82    95
2  박지호     A   58   64    49
1  이서연     B   92   88    75

풀이: random_state를 고정해 같은 표에서 추출 결과를 재현합니다. 원래 행 라벨은 유지됩니다.

random_state를 고정하면 다시 실행해도 같은 행이 나옵니다.

이 장 요약

문법하는 일문제
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

이 장의 점검

describe의 count와 전체 행 수가 다른 이유를 설명하고, 고유 값과 등장 횟수를 나누어 확인해 보세요.

참고: pandas 공식 문서 · 문법이 기억나지 않으면 부록 치트시트를 찾아보세요.

전체 메뉴