테마
판다스 기초
학습 목표
- Pandas 라이브러리를 import하고 CSV 파일을 로드할 수 있다
- 인코딩(CP949, UTF-8, EUC-KR) 문제를 해결할 수 있다
- info, describe, shape로 데이터를 요약할 수 있다
- head, tail, sample로 데이터를 미리보기할 수 있다
- 수치형 데이터와 오브젝트 타입 데이터의 차이를 이해한다
전체 구조
1. Pandas 라이브러리 불러오기
Pandas는 Python에서 데이터 분석의 핵심 라이브러리다. as pd로 별칭(alias)을 지정하여 간결하게 사용한다.
python
import pandas as pd
# Pandas 버전 확인
print(pd.__version__)2. CSV 파일 로드하기
기본 로드
python
# CSV 파일 로드
df = pd.read_csv("data/전국_평균_분양가격.csv")인코딩 문제 해결
한글이 포함된 CSV 파일을 로드할 때 UnicodeDecodeError가 발생할 수 있다. Pandas의 read_csv는 기본적으로 UTF-8 인코딩을 사용하기 때문이다.
python
# CP949 인코딩으로 로드
df_last = pd.read_csv("data/주택도시보증공사_전국_평균_분양가격.csv",
encoding="cp949")
# EUC-KR로도 가능 (단, 일부 한글 미지원)
df_last = pd.read_csv("data/주택도시보증공사_전국_평균_분양가격.csv",
encoding="euc-kr")CP949 vs EUC-KR: EUC-KR은 2,350자만 표현할 수 있어 "설", "믜" 같은 글자가 깨진다. CP949는 11,172자를 모두 표현할 수 있으므로, 한글 CSV 파일에는 CP949를 사용하는 것이 안전하다.
구분자(Separator) 지정
CSV가 쉼표가 아닌 다른 문자로 구분되어 있을 수 있다.
python
# 파이프(|)로 구분된 파일
df = pd.read_csv("data/상가업소정보.csv", sep="|")
# 탭으로 구분된 파일
df = pd.read_csv("data/file.tsv", sep="\t")3. 데이터 크기 확인 - shape
shape는 항상 (행, 열) 순서로 반환한다.
python
# 데이터 크기 확인
print(df_last.shape)
# 출력: (4335, 5) → 4335행, 5열4. 데이터 미리보기 - head, tail, sample
python
# 위에서 5개 (기본값)
df_last.head()
# 위에서 10개
df_last.head(10)
# 아래에서 5개 (기본값)
df_last.tail()
# 랜덤 샘플 3개
df_last.sample(3)5. 전체 정보 요약 - info
info()는 데이터의 전체적인 구조를 한눈에 보여준다.
python
df_last.info()출력 예시:
RangeIndex: 4335 entries, 0 to 4334
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 지역명 4335 non-null object
1 규모구분 4335 non-null object
2 연도 4335 non-null int64
3 월 4335 non-null int64
4 분양가격 4058 non-null objectinfo에서 확인할 수 있는 정보
- Non-Null Count가 다른 컬럼: 결측치(NaN)가 있다는 의미
- object 타입: 문자열 데이터 (수치 연산 불가)
- int64/float64 타입: 숫자 데이터 (연산 가능)
6. 기술 통계 요약 - describe
수치형 데이터 요약
python
df_last["분양가격"].describe()count 4058.000000 ← 결측치 제외한 데이터 수
mean 3089.844998 ← 평균값
std 1266.195187 ← 표준편차
min 428.000000 ← 최소값
25% 2221.000000 ← 1사분위수 (25% 위치)
50% 2874.000000 ← 중앙값 (median)
75% 3561.000000 ← 3사분위수 (75% 위치)
max 12728.000000 ← 최대값오브젝트 타입 데이터 요약
python
df_last["분양가격(제곱미터)"].describe()count 4335 ← 전체 데이터 수
unique 1753 ← 고유값 개수
top 2221 ← 가장 빈번한 값
freq 17 ← 최빈값의 등장 횟수평균값 vs 중앙값: 중앙값(50%)이 2,874인데 평균값이 3,089로 더 높다. 이는 최대값(12,728)처럼 극단적으로 큰 값이 평균을 끌어올리기 때문이다. 이런 경우 중앙값이 데이터의 대표값으로 더 적합하다.
7. 컬럼 접근과 인덱싱
python
# 단일 컬럼 (Series 반환)
df_last["지역명"]
# 여러 컬럼 (DataFrame 반환) - 리스트로 감싸야 한다
df_last[["지역명", "분양가격"]]
# 컬럼 목록 확인
df_last.columns
# 컬럼 목록을 리스트로
df_last.columns.tolist()8. 행 접근 - loc과 iloc
python
# loc: 인덱스 라벨 기반
df.loc[0] # 0번 인덱스의 모든 컬럼
df.loc[0, "상호명"] # 0번 인덱스의 상호명 컬럼
df.loc[[0, 1, 2], ["상호명", "도로명주소"]] # 여러 행, 여러 열
# iloc: 정수 위치 기반 (슬라이싱)
df.iloc[:5] # 위에서 5개 행 (head와 동일)
df.iloc[:5, :5] # 위에서 5행, 왼쪽 5열
df.iloc[-5:] # 아래에서 5개 행 (tail과 동일)
df.iloc[-5:, -5:] # 아래 5행, 오른쪽 5열9. 표시 옵션 설정
데이터가 많아 중간이 ...으로 표시될 때 옵션을 변경할 수 있다.
python
# 모든 컬럼 표시
pd.options.display.max_columns = 100
# 모든 행 표시
pd.options.display.max_rows = 100핵심 정리
- pd.read_csv로 CSV 파일을 로드하며, 한글 파일은
encoding="cp949"를 지정한다 - shape는 (행, 열) 순서로 데이터 크기를 반환한다
- **info()**로 결측치, 데이터 타입, 메모리 사용량을 한눈에 파악한다
- **describe()**는 수치형이면 통계값, 오브젝트형이면 빈도 정보를 보여준다
- head/tail/sample로 데이터를 빠르게 미리본다
- loc은 라벨 기반, iloc은 정수 위치 기반 인덱싱이다