DataFrame과 Series
import pandas as pd
import numpy as np
# Series: 1차원 (한 열)
scores = pd.Series([85, 92, 78, 95, 88], name="점수",
index=["철수", "영희", "민준", "지수", "태양"])
print(scores["철수"]) # 85
print(scores[scores > 85]) # 필터링
# DataFrame: 2차원 (여러 열)
df = pd.DataFrame({
"이름": ["철수", "영희", "민준", "지수"],
"나이": [25, 30, 28, 22],
"점수": [85, 92, 78, 95],
"부서": ["개발", "마케팅", "개발", "디자인"],
})
파일 로드/저장
# CSV
df = pd.read_csv("data.csv", encoding="utf-8")
df = pd.read_csv("data.csv", sep="\t", parse_dates=["날짜"])
df.to_csv("output.csv", index=False, encoding="utf-8-sig")
# Excel
df = pd.read_excel("data.xlsx", sheet_name="Sheet1")
df.to_excel("output.xlsx", index=False)
# JSON
df = pd.read_json("data.json")
# 웹에서 직접
df = pd.read_csv("https://example.com/data.csv")
데이터 탐색
print(df.shape) # (4, 4)
print(df.dtypes) # 각 열의 데이터 타입
print(df.describe()) # 수치형 열 통계 요약
print(df.info()) # 비어있는 값, 메모리 사용량
print(df.head()) # 처음 5행
print(df.tail(3)) # 마지막 3행
print(df.sample(2)) # 랜덤 2행
print(df.columns.tolist()) # 열 이름 목록
print(df["점수"].value_counts()) # 값별 개수
데이터 선택
# 열 선택
df["이름"] # Series
df[["이름", "점수"]] # DataFrame
# 행 선택
df.iloc[0] # 인덱스 번호로
df.iloc[0:3] # 슬라이싱
df.loc[0] # 레이블로
df.loc[df["점수"] > 85] # 조건
# 조건 필터링
개발팀 = df[df["부서"] == "개발"]
고점수 = df[(df["점수"] > 80) & (df["부서"] == "개발")]
선택부서 = df[df["부서"].isin(["개발", "마케팅"])]
열 추가/변환
# 새 열 추가
df["합격"] = df["점수"] >= 85
# 조건부 값
df["등급"] = pd.cut(df["점수"],
bins=[0, 70, 80, 90, 100],
labels=["D", "C", "B", "A"])
# apply: 함수 적용
df["이름_길이"] = df["이름"].apply(len)
df["점수_표준화"] = df["점수"].apply(lambda x: (x - df["점수"].mean()) / df["점수"].std())
# 문자열 연산 (.str)
df["이름_대문자"] = df["이름"].str.upper()
df["이름_포함"] = df["이름"].str.contains("수")
집계
# 단순 집계
print(df["점수"].mean())
print(df["점수"].agg(["mean", "std", "min", "max"]))
# groupby
dept_stats = df.groupby("부서")["점수"].agg(["mean", "count", "max"])
print(dept_stats)
# pivot table
pivot = pd.pivot_table(df, values="점수", index="부서",
aggfunc=["mean", "count"])
정렬과 중복 처리
# 정렬
df.sort_values("점수", ascending=False)
df.sort_values(["부서", "점수"], ascending=[True, False])
# 중복
print(df.duplicated().sum()) # 중복 행 수
df_clean = df.drop_duplicates()
df_unique = df.drop_duplicates(subset=["이름"])
정리
| 기능 | 코드 |
|---|---|
| 파일 로드 | pd.read_csv(), read_excel() |
| 탐색 | .info(), .describe(), .head() |
| 필터 | df[df["col"] > val] |
| 열 추가 | df["new"] = ... |
| 집계 | .groupby().agg() |
| 정렬 | .sort_values() |
다음 편에서는 데이터 정제 — 결측값, 이상값, 타입 변환을 처리하는 방법을 배웁니다.