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

001–010 Series와 DataFrame 만들기

pd.Series, pd.DataFrame 생성, 인덱스 지정, shape, rename, set_index 연습문제

4분 읽기

pandas의 두 기본 자료구조를 직접 만들어 봅니다. 이 장은 준비 코드 없이 시작하고, 5번 문제에서 만든 df를 이어서 씁니다.

모든 정답의 실행 결과는 pandas 2.3에서 확인했습니다. numpy 2 이상에서는 숫자 하나가 np.int64(3000)처럼 보일 수 있는데, 값은 같습니다.

Pythonimport pandas as pd
import numpy as np

001. 리스트로 Series 만들기

리스트 [10, 20, 30, 40]으로 Series를 만드세요.

정답 보기
Pythonpd.Series([10, 20, 30, 40])
결과0    10
1    20
2    30
3    40
dtype: int64

인덱스를 정하지 않으면 0부터 번호가 붙습니다.

002. 인덱스를 지정한 Series

값 [3, 5, 2]에 인덱스 사과, 배, 귤을 붙인 Series를 만드세요.

정답 보기
Pythonpd.Series([3, 5, 2], index=['사과', '배', '귤'])
결과사과    3
배      5
귤      2
dtype: int64

003. 딕셔너리로 Series 만들기

딕셔너리 {"사과": 1200, "바나나": 800, "딸기": 3000}으로 Series를 만들고 이름을 price로 정하세요.

정답 보기
Pythonpd.Series({'사과': 1200, '바나나': 800, '딸기': 3000}, name='price')
결과사과      1200
바나나     800
딸기      3000
Name: price, dtype: int64

딕셔너리의 키가 인덱스가 됩니다.

004. 가장 큰 값과 그 인덱스

3번 Series에서 가장 비싼 과일의 이름과 가격을 구하세요.

정답 보기
Pythonprice = pd.Series({'사과': 1200, '바나나': 800, '딸기': 3000})
price.idxmax(), price.max()
결과('딸기', 3000)

idxmax는 최댓값의 인덱스를, max는 값을 돌려줍니다.

005. 딕셔너리로 DataFrame 만들기

학생 이름(name), 반(class), 국어(kor), 영어(eng), 수학(math) 점수로 이루어진 DataFrame df를 만드세요. 이 책의 기본 예제입니다.

정답 보기
Pythondf = 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],
})
df
결과     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

이후 장의 준비 코드에도 같은 표가 나옵니다.

006. 리스트의 리스트로 DataFrame

[["서울", 9.4], ["부산", 3.3]]을 열 이름 city, value로 DataFrame으로 만드세요.

정답 보기
Pythonpd.DataFrame([['서울', 9.4], ['부산', 3.3]], columns=['city', 'value'])
결과   city  value
0  서울    9.4
1  부산    3.3

바깥 리스트 하나가 한 행입니다.

007. numpy 배열로 DataFrame

0부터 11까지의 수를 3행 4열로 배치하고 열 이름을 A~D로 정하세요.

정답 보기
Pythonpd.DataFrame(np.arange(12).reshape(3, 4), columns=list('ABCD'))
결과   A  B   C   D
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11

008. 행과 열의 개수

df의 행 수와 열 수를 구하세요.

정답 보기
Pythondf.shape
결과(8, 5)

(행, 열) 순서의 튜플입니다. 행 수만 필요하면 len(df).

009. 열 이름 바꾸기

df의 kor, eng, math를 국어, 영어, 수학으로 바꾼 표를 앞 3행만 보이세요. 원본은 바꾸지 마세요.

정답 보기
Pythondf.rename(columns={'kor': '국어', 'eng': '영어', 'math': '수학'}).head(3)
결과     name class  국어  영어  수학
0  김민준     A    85    78    92
1  이서연     B    92    88    75
2  박지호     A    58    64    49

rename은 새 표를 돌려주므로 원본 df는 그대로입니다.

010. 열을 인덱스로

name 열을 인덱스로 만든 표의 앞 3행을 보이세요.

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

되돌릴 때는 reset_index()를 씁니다.

전체 메뉴