pandas 100제: 판다스 연습문제와 풀이 · 3장
021–030 열과 행 선택하기
열 선택, loc, iloc, at, drop, 새 열 추가, 열 순서 바꾸기 연습문제
원하는 열과 행만 꺼내는 연습입니다. 28번부터는 df에 열을 추가하고, 그 뒤 문제가 이어서 씁니다.
준비 코드
이 장의 문제는 아래 코드를 먼저 실행한 상태에서 풉니다.
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],
})
021. 열 하나 꺼내기
name 열을 Series로 꺼내세요.
정답 보기
Pythondf['name']
결과0 김민준
1 이서연
2 박지호
3 최수아
4 정민서
5 강도윤
6 윤하은
7 임시우
Name: name, dtype: object022. 여러 열 꺼내기
name과 math 두 열을 DataFrame으로 꺼내세요.
정답 보기
Pythondf[['name', 'math']]
결과 name math
0 김민준 92
1 이서연 75
2 박지호 49
3 최수아 88
4 정민서 71
5 강도윤 66
6 윤하은 95
7 임시우 60
대괄호를 두 번 쓰면 DataFrame입니다.
023. loc로 한 행
인덱스가 2인 학생의 정보를 보이세요.
정답 보기
Pythondf.loc[2]
결과name 박지호
class A
kor 58
eng 64
math 49
Name: 2, dtype: object024. iloc로 범위
처음 3행의 두 번째·세 번째 열을 위치로 꺼내세요.
정답 보기
Pythondf.iloc[:3, 1:3]
결과 class kor
0 A 85
1 B 92
2 A 58
iloc의 끝 번호는 포함되지 않습니다.
025. loc로 행과 열
인덱스 0~2 학생의 name, kor를 꺼내세요.
정답 보기
Pythondf.loc[0:2, ['name', 'kor']]
결과 name kor
0 김민준 85
1 이서연 92
2 박지호 58
loc에 이름으로 범위를 주면 끝(2)까지 포함합니다.
026. 값 하나 꺼내기
인덱스 3 학생의 영어 점수 하나만 꺼내세요.
정답 보기
Pythondf.at[3, 'eng']
결과95
값 하나는 at이 가장 빠릅니다.
027. 열 지우기
class 열을 뺀 표의 앞 3행을 보이세요.
정답 보기
Pythondf.drop(columns='class').head(3)
결과 name kor eng math
0 김민준 85 78 92
1 이서연 92 88 75
2 박지호 58 64 49028. 새 열 만들기
세 과목 합계 열 total을 추가하고 앞 3행을 보이세요.
정답 보기
Pythondf['total'] = df['kor'] + df['eng'] + df['math']
df.head(3)
결과 name class kor eng math total
0 김민준 A 85 78 92 255
1 이서연 B 92 88 75 255
2 박지호 A 58 64 49 171029. 계산 열 추가
평균 열 avg(소수 첫째 자리 반올림)를 추가하고 name, total, avg를 보이세요.
정답 보기
Pythondf['avg'] = (df['total'] / 3).round(1)
df[['name', 'total', 'avg']]
결과 name total avg
0 김민준 255 85.0
1 이서연 255 85.0
2 박지호 171 57.0
3 최수아 260 86.7
4 정민서 196 65.3
5 강도윤 226 75.3
6 윤하은 250 83.3
7 임시우 232 77.3030. 열 순서 바꾸기
class, name, avg 순서로 열을 골라 앞 3행을 보이세요.
정답 보기
Pythondf[['class', 'name', 'avg']].head(3)
결과 class name avg
0 A 김민준 85.0
1 B 이서연 85.0
2 A 박지호 57.0