pandas 100제: 판다스 연습문제와 풀이 · 1장
001–010 Series와 DataFrame 만들기
pd.Series, pd.DataFrame 생성, 인덱스 지정, shape, rename, set_index 연습문제
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: int64003. 딕셔너리로 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 11008. 행과 열의 개수
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()를 씁니다.