DataFrame 사고방식
- 행(row) = 하나의 레코드, 열(column) = 하나의 속성
- 반복문 대신 열 단위 연산으로 생각합니다 (벡터화)
- 대부분의 작업은 선택 → 변환 → 집계 3단계의 조합
import pandas as pd
df = pd.read_csv("sales.csv") # 불러오기
df.head() # 앞 5행
df.info() # 타입·결측치
df.describe() # 기초 통계
핵심 연산 6가지
# 1. 선택
df[["region", "amount"]]
df.loc[df["amount"] > 100]
# 2. 새 열
df["amount_krw"] = df["amount"] * 1350
# 3. 집계
df.groupby("region")["amount"].sum()
df.groupby(["region", "month"]).agg(total=("amount", "sum"), cnt=("amount", "count"))
# 4. 정렬
df.sort_values("amount", ascending=False)
# 5. 조인
regions = pd.read_csv("regions.csv")
merged = df.merge(regions, on="region", how="left")
# 6. 결측치
df.dropna()
df.fillna({"amount": 0})
파일 포맷별 읽기/쓰기
pd.read_csv("a.csv"); df.to_csv("out.csv", index=False)
pd.read_json("a.json"); df.to_json("out.json", orient="records")
pd.read_parquet("a.parquet"); df.to_parquet("out.parquet") # pip install pyarrow
Parquet은 5단계(분산 저장)에서 자세히 다룹니다. 열 지향 + 압축이라 CSV보다 훨씬 빠르고 작습니다.
Pandas ↔ Spark 대응표 (미리보기)
| Pandas | PySpark |
|---|---|
pd.read_csv() | spark.read.csv() |
df[df.a > 1] | df.filter(df.a > 1) |
df.groupby("k").sum() | df.groupBy("k").sum() |
df.merge(o, on="k") | df.join(o, "k") |
df.head() | df.show() |
연습 과제
- 공공데이터포털에서 CSV 하나를 받아
read_csv→info()→ 결측치 처리 - 특정 열 기준으로
groupby집계 후 상위 10개 출력 - 두 CSV를
merge하고 결과를 Parquet으로 저장, 파일 크기 비교