[SECTION 11. 파이썬 기초 문법 - 모듈]
import 모듈명 으로 가져옵니다.# math_utils.py 파일 내용
def add(a, b):
return a + b
def mul(a, b):
return a * b
# main.py 파일 내용
import math_utils
print("3 + 5 =", math_utils.add(3, 5))
print("4 * 6 =", math_utils.mul(4, 6))
# 모듈 별칭 사용
import math_utils as mu
print("별칭 사용:", mu.add(10, 20))
# 특정 함수만 가져오기
from math_utils import mul
print("함수 직접 import:", mul(3, 7))
math_utils.py 모듈의 일부입니다.# math_utils.py
def add(a, b):
return a + b
def mul(a, b):
return a * bmain.py 코드가 올바르게 작동하도록 빈칸을 채우세요.# main.py
__________ math_utils as mu
__________ math_utils import add
print(__________.mul(2, 5)) # 결과: 10
print(__________(7, 3)) # 결과: 10
# 정답 코드
# main.py
import math_utils as mu
from math_utils import add
print(mu.mul(2, 5)) # 결과: 10
print(add(7, 3)) # 결과: 10from 모듈명 import 함수명 방식은
모듈 이름 없이 바로 함수 이름을 사용합니다.
그래서 같은 이름의 함수나 변수가 현재 파일에 있을 경우 덮어쓰기(overwrite) 될 수 있습니다.
from math_utils import add
def add(a, b):
return a - b # 기존 add()를 덮어씀!
print(add(3, 5)) # 결과: -2 ← math_utils.add() 아님
✅ 해결 방법:
- 별칭(alias) 사용:
from math_utils import add as add_func- 또는
import math_utils형태로 네임 스페이스를 유지
어떤 함수가 어디서 왔는지 한눈에 알기 어렵습니다.
특히 여러 모듈에서 from ... import ...를 동시에 사용하면
코드의 출처가 불분명해져 유지 보수가 어려워집니다.
from math_utils import add
from string_utils import add # 나중에 누가 덮어썼는지 헷갈림
✅ 해결 방법:
- 모듈이 많을 땐
import 모듈명또는import 모듈명 as 별칭사용
from math_utils import *
이렇게 쓰면 모든 함수와 변수가 현재 네임 스페이스로 들어오므로 예상치 못한 이름 충돌이 쉽게 발생합니다.
from math_utils import *
from string_utils import * # 어떤 add가 사용되는지 모름
✅ 해결 방법:
필요한 것만 명시적으로 가져오기
from math_utils import add, mul
| 문제점 | 설명 | 권장 해결법 |
|---|---|---|
| 이름 충돌 | 동일한 이름이 덮어 쓰기 될 수 있음 | 별칭(as) 사용 |
| 출처 불명확 | 코드 가독성 저하 | import 모듈명 사용 |
* 사용 | 예측 불가한 충돌 | 필요한 함수만 선택적으로 import |
math, random, datetime 등import math
print("제곱근:", math.sqrt(16))
print("원주율:", math.pi)
print("삼각함수:", math.sin(math.radians(90)))
print("올림:", math.ceil(3.2))
print("내림:", math.floor(3.8))
import random
print("랜덤 정수:", random.randint(1, 10))
print("랜덤 실수:", random.uniform(0, 1))
items = ["사과", "배", "포도"]
print("랜덤 선택:", random.choice(items))
random.shuffle(items)
print("섞기:", items)
from datetime import datetime, timedelta
# 현재 날짜와 시간
now = datetime.now()
print("현재 시각:", now)
# 날짜 포맷 변경
print("형식 지정:", now.strftime("%Y-%m-%d %H:%M:%S"))
# 일주일 후 날짜 계산
next_week = now + timedelta(days=7)
print("일주일 후:", next_week.strftime("%Y-%m-%d"))
# 특정 날짜 만들기
birthday = datetime(2025, 7, 15)
print("지정 날짜:", birthday.strftime("%Y-%m-%d"))
# 두 날짜 차이 계산
diff = birthday - now
print("생일까지 남은 일수:", diff.days, "일")
pip install 모듈명requests, numpy, pandas 등import requests
response = requests.get("https://jsonplaceholder.typicode.com/todos/1")
print("상태 코드:", response.status_code)
print("JSON 데이터:", response.json())
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print("배열:", arr)
print("합계:", np.sum(arr))
print("평균:", np.mean(arr))
print("제곱:", np.square(arr))
from tabulate import tabulate
data = [
["Alice", 90, 85, 92],
["Bob", 75, 80, 70],
["Charlie", 88, 90, 85]
]
headers = ["이름", "국어", "영어", "수학"]
print(tabulate(data, headers=headers))
[SECTION 12. 파이썬 기초 문법 - 넘파이 (Numpy)]
lst = [1, 2, 3, 4, 5]
data_set = {1,1,1,1,1,1,2,3,3,4,4,5}
data_dict = {"name" : "김수한"}
print(type(lst))
print(type(data_set))
print(type(data_dict))
import numpy as np
lst1 = [1, 2, 3, 4]
lst2 = [5, 6, 7, 8]
print("=== list와 for문 이용 ===")
for i in range(len(lst1)):
print(lst1[i] + lst2[i], end=" ")
arr1 = np.array(lst1)
arr2 = np.array(lst2)
print()
print("=== 넘파이 이용 ===")
print("arr1 + arr2:", arr1 + arr2)
print("arr1 * 2", arr1 * 2)
import numpy as np
import time
# 1. 속도 비교를 위해 대용량 데이터 준비 (100만 개의 데이터)
DATA_SIZE = 1_000_000
lst1 = list(range(DATA_SIZE))
lst2 = list(range(DATA_SIZE))
arr1 = np.array(lst1)
arr2 = np.array(lst2)
# 2. 리스트와 for문을 이용한 더하기 연산 측정
print("=== 파이썬 list와 for문 연산 시작 ===")
start_time = time.time()
# 리스트 컴프리헨션을 사용하여 각 요소를 더합니다.
list_result = [lst1[i] + lst2[i] for i in range(len(lst1))]
end_time = time.time()
list_duration = end_time - start_time
print(f"List 연산 소요 시간: {list_duration:.6f}초")
print("\n=== 넘파이(NumPy) 벡터화 연산 시작 ===")
# 3. 넘파이 배열을 이용한 더하기 연산 측정
start_time = time.time()
arr_result = arr1 + arr2
end_time = time.time()
arr_duration = end_time - start_time
print(f"NumPy 연산 소요 시간: {arr_duration:.6f}초")
# 4. 결과 및 배율 출력
print("\n=== 성능 비교 결과 ===")
if arr_duration > 0:
speed_ratio = list_duration / arr_duration
print(f"NumPy ndarray 연산이 파이썬 List보다 약 {speed_ratio:.1f}배 빠릅니다.")
else:
print("NumPy 연산이 너무 순식간에 끝나 측정 불가 수준입니다.")
import를 사용합니다. 넘파이는 전 세계적으로 np라는 별명을 사용하는 것이 약속입니다.import numpy as np| 분류 | 명령어 | 사용 예시 |
|---|---|---|
| 생성 | np.array() | 기존 리스트를 넘파이 배열로 바꿀 때 |
np.arange() | 0, 1, 2... 처럼 연속된 숫자 배열을 만들 때 | |
np.zeros() / np.ones() | 데이터를 넣기 전, 0이나 1로 빈 그릇을 준비할 때 | |
| 정보 | arr.shape | 이 배열이 몇 행 몇 열인지 확인할 때 |
arr.ndim | 이 데이터가 1차원(선)인지 2차원(면)인지 궁금할 때 | |
arr.dtype | 담긴 숫자가 정수(int)인지 실수(float)인지 확인할 때 | |
| 변형 | arr.reshape() | 1줄로 된 데이터를 2행 3열 등으로 모양을 바꿀 때 |
import numpy as np
# 1. 리스트를 넘파이 배열로 변환 (np.array)
data = [1, 2, 3, 4, 5]
arr = np.array(data)
print("1. 생성된 배열:", arr)
# 2. 배열의 '정체' 확인하기 (정보 메소드)
print(" - 모양(shape):", arr.shape) # (5,) -> 5개의 요소가 있는 1차원
print(" - 차원(ndim):", arr.ndim) # 1 -> 선 형태의 1차원 데이터
print(" - 타입(dtype):", arr.dtype) # int64 -> 정수들이 담겨 있습닏.
# 3. 연속된 숫자 만들기 (np.arange)
# 0부터 시작해서 10 '전'까지 숫자를 생성
seq_arr = np.arange(10)
print("\n2. 0부터 9까지:", seq_arr)import numpy as np
# 4. 12개의 숫자를 만듭니다 (0~11)
base = np.arange(12)
print("5. 변신 전(1차원):", base)
# 5. 3행 4열로 모양 바꾸기 (reshape)
# 주의! 전체 개수가 12개니까 3x4=12, 딱 맞아야 합니다.
transformed = base.reshape(3, 4)
print("\n6. 변신 후(2차원):\n", transformed)
# 6. 바뀐 후의 정보 확인
print(" - 바뀐 모양:", transformed.shape) # (3, 4)
print(" - 바뀐 차원:", transformed.ndim) # 2차원(면)이 생성됩니다.| 분류 | 사용 예시 (코드) | 사용 예시 |
|---|---|---|
| 통계 연산 | np.sum(arr, axis=0) | 배열 요소의 전체 합계 출력 시 |
np.mean(arr) | 배열의 산술 평균 계산 시 | |
np.max(arr) / np.min(arr) | 배열 내 최댓값 또는 최솟값 찾을 때 | |
np.argmax(arr) | 최댓값/최솟값이 위치한 인덱스(번호) 반환 시 | |
| 형태 변경 | arr.reshape(2, 3) | 데이터를 유지하며 지정한 차원(행, 열)으로 변경 시 |
arr.T | 행과 열을 서로 바꿀 때 | |
arr.flatten() | 다차원 배열을 1차원 배열로 변경 시 | |
| 조건/검색 | np.where(arr > 5, 1, 0) | 조건이 참이면 1, 거짓이면 0으로 변환 시 |
np.sort(arr) | 배열의 요소를 오름차순으로 정렬 시 | |
np.unique(arr) | 중복된 값을 제거하고 고유한 값들만 추출 시 | |
| 배열 생성 | np.arange(0, 10, 2) | 시작부터 끝까지 간격(step)에 맞춰 숫자 생성 시 |
np.linspace(0, 1, 5) | 시작~끝 범위를 균등하게 5등분하여 생성 시 | |
np.random.rand(2, 2) | 0~1 사이의 랜덤한 실수로 채워진 배열 생성 시 |
import numpy as np
# 1. 생성: 60점부터 95점까지 5점 간격으로 점수 생성 (arange)
scores = np.arange(60, 100, 5)
print("1. 생성된 점수들:", scores)
# 2. 변형: 8개의 데이터를 4행 2열(4명 학생의 국어, 영어 점수)로 변환 (reshape)
score_table = scores.reshape(4, 2)
print("\n2. 성적 표(4행 2열):\n", score_table)
# 3. 변형: 행과 열 바꾸기 (T)
print("\n3. 과목별로 보기:\n", score_table.T)
# 4. 생성: 0~1 사이의 랜덤 점수 가산점 생성 (random.rand)
plus_score = np.random.rand(4, 2)
print("\n4. 랜덤 가산점:\n", plus_score)# 5. 통계: 전체 평균 점수 (mean)
print(f"5. 전체 평균: {np.mean(score_table):.2f}")
# 6. 통계: 과목별 합계 (sum, axis=0) - 세로 방향 합계
print("6. 과목별 총점(국, 영):", np.sum(score_table, axis=0))
# 7. 통계: 최고점 찾기 (max, argmax)
print("7. 최고 점수:", np.max(score_table))
print(" 최고 점수가 있는 위치(인덱스):", np.argmax(score_table))# 8. 조건: 80점 이상인 점수는 'Pass', 아니면 'Fail' (where)
# 연습을 위해 1(Pass)과 0(Fail)으로 표시해 봅시다.
pass_fail = np.where(score_table >= 80, 1, 0)
print("8. 80점 이상 합격 표시(1:합격):\n", pass_fail)
# 9. 검색: 중복 제거 (unique)
# 가상의 중복 데이터 배열을 만들어 확인해 봅시다.
duplicate_data = np.array([1, 2, 2, 3, 3, 3])
print("\n9. 중복 제거 전:", duplicate_data)
print(" 중복 제거 후(고유값):", np.unique(duplicate_data))
# 10. 정렬: 점수 낮은 순으로 정렬 (sort)
# score_table을 1차원으로 펴서(flatten) 정렬해 봅시다.
flat_scores = score_table.flatten()
print("\n10. 펼쳐진 점수:", flat_scores)
print(" 정렬된 점수:", np.sort(flat_scores))for) 없이 배열 전체에 한 번에 연산을 수행합니다.Q1. 여러분은 이번 주 우리 동네의 일교차를 확인하려고 합니다. 아래 조건에 맞게 코드를 작성해 보세요.
temps에 월요일부터 일요일까지의 최고 기온인 [22, 25, 28, 23, 26, 29, 27]을 담으세요.import numpy as np
lst = [22, 25, 28, 23, 26, 29, 27]
temp = np.array(lst)
print(f"평균 기온: {np.mean(temp):.1f}도")
print(f"최고 기온: {np.max(temp)}도")
Q2. 두 명의 학생이 각각 국어, 영어, 수학 시험을 보았습니다. 넘파이를 이용해 과목별 평균을 구해봅시다.
grades를 만드세요.axis를 이용하여 각 과목별 평균을 구하세요. (결과는 국어, 영어, 수학 순으로 3개가 나와야 합니다.)grades 배열의 모양(shape)이 어떻게 되는지 출력해 보세요.import numpy as np
# - 학생 A: 80점, 90점, 70점 # 1행
# - 학생 B: 85점, 95점, 80점 # 2행
lst = [80, 90 ,70, 85, 95, 80]
grades = np.array(lst).reshape(2, 3)
print("=== 과목별 평균 ===")
print(f"국어 평균: {np.mean(grades, axis= 0)[0]}점")
print(f"영어 평균: {np.mean(grades, axis= 0)[1]}점")
print(f"수학 평균: {np.mean(grades, axis= 0)[2]}점")
print("=== 배열의 모양 ===")
print(grades.shape)
[SECTION 12. 파이썬 기초 문법 - Pandas 기초]

| 명칭 | 형태 | 설명 | 비유 |
|---|---|---|---|
| Series (시리즈) | 1차원 | 엑셀의 열(Column) 하나 | 세로 한 줄 |
| DataFrame (데이터프레임) | 2차원 | 엑셀의 시트(Table) 전체 | 행과 열이 있는 표 |
| 메소드 | 기능 |
|---|---|
s.sum() | 요소들의 합계를 계산합니다. |
s.mean() | 산술 평균을 계산합니다. |
s.median() | 중앙값을 찾습니다. |
s.std() | 표준편차를 계산합니다. |
s.min() / s.max() | 최소값과 최대값을 찾습니다. |
s.idxmin() / s.idxmax() | 최소값 또는 최대값을 가진 인덱스를 반환합니다. |
s.value_counts() | 고유한 값들의 빈도수(개수)를 계산하여 내림차순 정렬합니다. |
s.unique() | 중복을 제거한 고유한 값들을 배열로 반환합니다. |
s.nunique() | 고유한 값의 개수를 반환합니다. |
| 속성 | 설명 | 예시 |
|---|---|---|
.loc | 라벨(Label) 기반 인덱싱. 인덱스의 이름을 직접 지정합니다. | s.loc['a'] |
.iloc | 정수 위치(Integer position) 기반 인덱싱. 0부터 시작하는 순서를 지정합니다. | s.iloc[0] |
.at | loc와 비슷하지만, 단 하나의 값만 빠르게 가져올 때 사용합니다. | s.at['a'] |
.iat | iloc와 비슷하지만, 단 하나의 값만 위치 기반으로 빠르게 가져올 때 사용합니다. | s.iat[0] |
import pandas as pd
# 리스트를 활용한 시리즈 생성 (학생들의 성적 데이터 예시)
data = [85, 90, 78, 92, 88]
index = ['Student_A', 'Student_B', 'Student_C', 'Student_D', 'Student_E']
scores = pd.Series(data, index)
print(scores)
import pandas as pd
# 리스트를 활용한 시리즈 생성 (학생들의 성적 데이터 예시)
데이터 = [85, 90, 78, 92, 88]
이름표 = ['Student_A', 'Student_B', 'Student_C', 'Student_D', 'Student_E']
scores = pd.Series(data=데이터, index=이름표)
print(scores)
| 정수 위치 (iloc) | 인덱스 이름 (loc) | 데이터 값 (Value) |
|---|---|---|
| 0 | 'Student_A' | 85 |
| 1 | 'Student_B' | 90 |
| 2 | 'Student_C' | 78 |
| 3 | 'Student_D' | 92 |
| 4 | 'Student_E' | 88 |
# 1. 주요 통계치 확인
print("평균 점수:", scores.mean())
print("최고 점수:", scores.max())
print("점수 표준편차:", scores.std())
# 2. 요약 통계량 (시험에서 데이터 분포 파악 시 필수 사용)
print("\n--- 전체 요약 ---")
print(scores.describe())
# 3. 응용: 특정 점수 이상인 데이터만 연산 (조건부 연산)
# 90점 이상인 학생들의 점수 합계
high_scores_sum = scores[scores >= 90].sum()
print(f"\n90점 이상 학생 점수 합계: {high_scores_sum}")
# 1. loc (레이블 이름 기반 선택)
# Student_B의 점수 추출
student_b_score = scores.loc['Student_B']
print(f"Student_B의 점수: {student_b_score}")
# 2. iloc (정수 위치 기반 슬라이싱)
# 첫 번째부터 세 번째 학생까지 추출 (인덱스 0, 1, 2)
top_three = scores.iloc[0:3]
print("\n--- 상위 3명 데이터 ---")
print(top_three)
# 3. 값 변경 (데이터 수정)
# Student_C의 점수를 78점에서 80점으로 수정
scores.loc['Student_C'] = 80
print("\n--- 점수 수정 후 Student_C ---")
print(scores.loc['Student_C'])
# 4. 불리언 인덱싱 (조건 선택 - AICE 실기 단골 유형)
# 평균 점수보다 낮은 학생들만 필터링
under_mean = scores[scores < scores.mean()]
print("\n--- 평균 미달 학생 목록 ---")
print(under_mean)
import pandas as pd
# 1. 데이터 생성 (요일별 배송 건수)
delivery = pd.Series([120, 150, 90, 200, 170],
index=['월', '화', '수', '목', '금'])
# 2. 평균 계산
avg_delivery = delivery.mean()
# 3. 평균보다 큰 데이터만 필터링 (AICE 대비 핵심 스킬)
target_days = delivery[delivery > avg_delivery]
print(f"평균 배송 건수: {avg_delivery}")
print("--- 평균 이상 배송한 날 ---")
print(target_days)
import pandas as pd
# 1. 데이터 생성 (환자 ID별 혈당)
sugar_levels = pd.Series([95, 110, 125, 105, 98],
index=['P01', 'P02', 'P03', 'P04', 'P05'])
# 2. 특정 이름(Label)으로 접근
p02_level = sugar_levels['P02']
# 3. 위치 번호(Position)로 슬라이싱 (앞에서 3명)
top_3 = sugar_levels[0:3]
print(f"환자 P02의 혈당: {p02_level}")
print("--- 상위 3명 데이터 ---")
print(top_3)
| 메소드 | 기능 |
|---|---|
df.head(n) | 상위 n개 행 보기 (기본 5개) |
df.tail(n) | 하위 n개 행 보기 |
df.info() | 컬럼명, 데이터 타입, 결측치 확인 |
df.describe() | 수치 데이터의 통계값(평균, 최소값 등) |
df.shape | 행과 열의 개수 반환 (변수) |
| 메소드 | 기능 |
|---|---|
df.sort_values() | 특정 컬럼 기준으로 정렬 |
df.drop() | 특정 행이나 열 삭제 |
df.value_counts() | 특정 컬럼의 값별 개수 세기 |
df.astype() | 데이터 타입 변경 (예: 문자 -> 숫자) |
import pandas as pd # Pandas를 불러오고 'pd'라는 별명으로 부릅니다.
# 1. 딕셔너리를 이용해 데이터프레임 만들기
data = {
'이름': ['Java', 'Bami', 'Choco', 'Cookie'],
'나이': [3, 2, 5, 1],
'종류': ['White', 'Black', 'Cheese', 'Grey'],
'점수': [90, 85, 70, 95]
}
df = pd.DataFrame(data)
# 2. 데이터 확인하기
print("--- 상위 2개 데이터 확인 ---")
display(df.head(2)) # head()는 위에서부터 데이터를 보여줍니다.
print("\n--- 데이터 요약 정보 ---")
df.info() # 데이터의 개수와 타입을 한눈에 보여줍니다.
print("\n--- 통계 정보 ---")
display(df.describe()) # 숫자 데이터의 평균, 최소값 등을 보여줍니다.
import pandas as pd
data = {
'이름': ['Java', 'Bami', 'Choco', 'Cookie'],
'나이': [3, 2, 5, 1],
'종류': ['White', 'Black', 'Cheese', 'Grey'],
'점수': [90, 85, 70, 95]
}
df = pd.DataFrame(data)
print(df.describe())
print(df['점수'].mean())
print(df['나이'].max())
print("======== 데이터 프레임 출력 ===========")
print()
print()
print()
print(df)
| (Index) | 이름 | 나이 | 종류 | 점수 |
|---|---|---|---|---|
| 0 | Java | 3 | White | 90 |
| 1 | Bami | 2 | Black | 85 |
| 2 | Choco | 5 | Cheese | 70 |
| 3 | Cookie | 1 | Grey | 95 |
import pandas as pd
# 1. 실습용 데이터프레임 생성
data = {
'이름': ['김철수', '이영희', '박민수', '최지우'],
'나이': [22, 25, 21, 28],
'성적': [85, 92, 78, 95],
'합격여부': [True, True, False, True]
}
df = pd.DataFrame(data)
# 2. 열(Column) 선택: 특정 '과목'이나 '특성'만 뽑기
# 결과는 Series(시리즈) 형태로 나옵니다.
names = df['이름']
print("--- [열 선택] 이름 컬럼만 출력 ---")
print(names)
# 3. 행(Row) 선택 (.loc): 특정 '사람'의 정보만 뽑기
# 인덱스 이름(여기서는 0, 1, 2...)을 기준으로 가져 옵니다.
first_person = df.loc[0]
print("\n--- [행 선택] 첫 번째 행(김철수) 정보 ---")
print(first_person)
# 4. 조건 필터링: 특정 '기준'에 맞는 데이터만 뽑기 ⭐⭐⭐
# 성적이 90점 이상인 데이터만 추출합니다.
top_students = df[df['성적'] >= 90]
print("\n--- [필터링] 성적 90점 이상인 학생 ---")
print(top_students)
import pandas as pd
# 1. 처음엔 기본 인덱스 (0, 1, 2)
df = pd.DataFrame({'값': [10, 20, 30]})
# 2. 인덱스 이름을 ["첫 번째", "두 번째", "세 번째"]로 변경
df.index = ["첫 번째", "두 번째", "세 번째"]
print(df)
# 값
# 첫 번째 10
# 두 번째 20
# 세 번째 30
# --- 값 바꾸기 시도 ---
# [loc] 이름을 써야 함
df.loc["첫 번째"] = 100 # (O)
# [iloc] 이름이 바뀌었어도 번호를 써야 함
df.iloc[0] = 500 # (O)
import pandas as pd
data = {
'이름': ['Kim', 'Lee', 'Park', 'Choi', 'Jung'],
'국어': [80, 95, 78, 92, 85],
'영어': [88, 92, 85, 90, 82],
'수학': [85, 100, 80, 95, 88],
'코딩': [100, 85, 90, 80, 95]
}
df = pd.DataFrame(data)
# 이름을 인덱스로 설정하면 loc 연습하기가 훨씬 좋습니다!
df = df.set_index('이름')
print("--- 원본 데이터프레임 ---")
print(df)
| 이름 (loc) | 국어 (Col) | 영어 (Col) | 수학 (Col) | 코딩 (Col) |
|---|---|---|---|---|
| Kim | 80 | 88 | 85 | 100 |
| Lee | 95 | 92 | 100 | 85 |
| Park | 78 | 85 | 80 | 90 |
| Choi | 92 | 90 | 95 | 80 |
| Jung | 85 | 82 | 88 | 95 |
loc로 가져오기iloc로 가져오기print(df.loc['Park', '수학']) # 이름과 과목으로 콕!
print(df.iloc[1, 0]) # 번호로 콕! (Lee는 1번 행, 국어는 0번 열)
loc)iloc)# loc 슬라이싱은 마지막 이름(Choi, 영어)을 포함합니다!
print(df.loc['Lee':'Choi', '국어':'영어'])
# iloc 슬라이싱은 파이썬 리스트처럼 마지막 번호를 포함하지 않습니다!
print(df.iloc[0:2, 0:2])
loc)iloc)# 리스트를 대괄호 [] 안에 한 번 더 넣어줍니다!
print(df.loc[['Kim', 'Jung'], ['수학', '코딩']])
print(df.iloc[[0, 2], [1, 3]])
Q1. 다음은 어느 과일 가게의 5일간 사과 판매량 데이터입니다. 아래 지시사항에 따라 코드를 작성하세요.
sales_data와 인덱스 days를 사용하여 Series를 생성하세요.import pandas as pd
sales_data = [15, 20, 12, 25, 18]
days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
# 여기에 코드를 작성하세요.
import pandas as pd
sales_data = [15, 20, 12, 25, 18]
days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
# 여기에 코드를 작성하세요.
s = pd.Series(data=sales_data, index=days)
avg = s.mean() # 평균
result = s[s >= avg]
print("=== 평균 판매량보다 많이 판매된 날 ===")
print(result)Q2. 다음은 학생들의 정보를 담은 데이터입니다. 아래 지시사항에 따라 코드를 작성하세요.
주어진 딕셔너리 data를 사용하여 df라는 이름의 DataFrame을 생성하세요.
'Math' 컬럼만 선택하여 출력하세요.
수학 점수(Math)가 90점 이상인 학생의 'Name'과 'Math' 정보만 출력하세요.
정답
import pandas as pd
data = {
'Name': ['Kim', 'Lee', 'Park', 'Choi'],
'Age': [20, 21, 22, 20],
'Math': [85, 95, 78, 92]
}
df = pd.DataFrame(data)
print("=== 수학 열만 출력 ===")
print(df['Math'])
print("=== 수학 점수가 90 이상인 학생의 정보 ===")
# 조건 가져올 컬럼
print(df.loc[df['Math'] >= 90, ['Name', 'Math']])