PythonPython 데이터 분석강의 8개 중 2번째난이도 기초

Pandas 기초 — DataFrame으로 표 데이터 다루기

발행 읽는 시간 약 1 분

  • Python
  • Pandas
  • DataFrame
  • 데이터분석
  • CSV

강의 소개

Pandas의 DataFrame과 Series를 이용해 표 형태의 데이터를 로드, 탐색, 필터링, 집계하는 방법을 배웁니다. CSV, Excel, JSON 파일 처리도 익힙니다.

DataFrame과 Series#

Python
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],
    "부서": ["개발", "마케팅", "개발", "디자인"],
})

파일 로드/저장#

Python
# 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")

데이터 탐색#

Python
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())  # 값별 개수

데이터 선택#

Python
# 열 선택
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(["개발", "마케팅"])]

열 추가/변환#

Python
# 새 열 추가
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("수")

집계#

Python
# 단순 집계
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"])

정렬과 중복 처리#

Python
# 정렬
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()

다음 편에서는 데이터 정제 — 결측값, 이상값, 타입 변환을 처리하는 방법을 배웁니다.

Follow · Ask · Work

이 글이 도움이 됐다면

짧은 작업 기록과 데모는 인스타그램에 올립니다. 만들고 싶은 것이 있다면 프로젝트 의뢰나 협업 제안도 편하게 보내 주세요.

글쓴이

파란여우

직접 만든 AI 앱·제품의 개발·배포를 공개하는 실전형 테크 크리에이터

파란여우 소개 Instagram @bluefox._.hi

이어서 보기

만들고 싶은 것이 있다면 프로젝트 의뢰로 알려 주세요.