
이 문서는 머신러닝 이론 및 파이썬 실습 인강을 들으면서 직접 정리한 학습 기록입니다.
강의를 들으며 이해가 어려웠던 부분, 자주 쓰이지만 헷갈리는 개념, 실무에서 유용한 함수까지 꼼꼼히 정리했습니다.
특히 혼란스러웠던 옵션과 실습 코드들을 중심으로 정리해두었습니다.
처음에는 그냥 pd.read_csv()만 쓰면 되는 줄 알았는데,
실제로는 파일 구조와 구분자, 인코딩, 컬럼 헤더 유무 등에 따라 다양한 옵션 처리가 필요했다.
import pandas as pd
df = pd.read_csv("data.csv")
df = pd.read_csv("data.tsv", delimiter="\t") # 또는 sep="\t"
\t는 탭 구분자 의미. .tsv 파일에서 자주 사용됨df = pd.read_csv("data.csv", header=None, names=["이름", "나이", "성별"])
header=None을 반드시 같이 써야 첫 줄을 데이터로 인식df = pd.read_csv("data.csv", encoding="cp949") # 윈도우 환경
df = pd.read_csv("data.csv", encoding="utf-8") # 리눅스, 맥, 깃허브
df = pd.read_csv("data.csv", skiprows=1, usecols=["이름", "점수"], nrows=100)
skiprows: 특정 줄 건너뛰기usecols: 특정 열만 불러오기nrows: 일부 행만 불러오기 (미리보기 용도)from collections import OrderedDict
data = OrderedDict([
("이름", ["철수", "영희"]),
("나이", [25, 30])
])
df = pd.DataFrame(data)
OrderedDict 사용df = pd.DataFrame([[1, 2], [3, 4]], columns=["A", "B"])
df.apply(func, axis=0 or 1, args=(), **kwargs)
axis=0: 열 기준axis=1: 행 기준 → 여러 컬럼 조합 시 자주 사용# 두 컬럼 합치기
df["총점"] = df.apply(lambda row: row["수학"] + row["영어"], axis=1)
# 외부 인자 전달
def add_bonus(x, bonus):
return x + bonus
df["보너스"] = df["점수"].apply(add_bonus, bonus=5)
중복된 행을 제거하거나 중복 여부를 파악할 때 사용
# 중복 여부 확인
df.duplicated(subset=["이름"])
# 중복 제거
df.drop_duplicates(subset=["이름"], keep="last")
# 모든 중복 제거 (고유한 값만 남김)
df[df.duplicated("이름", keep=False) == False]
subset: 기준이 되는 컬럼keep: "first", "last", False| 함수 | 대상 | 설명 |
|---|---|---|
map() | Series | 단일 컬럼 값 변경 또는 매핑 |
applymap() | DataFrame | 모든 셀에 동일한 함수 적용 |
# 성별 코드로 변환
df["성별코드"] = df["성별"].map({"남": 0, "여": 1})
# 모든 숫자 값 * 2
df = df.applymap(lambda x: x * 2 if isinstance(x, int) else x)
map()은 범주형 변수를 숫자 또는 라벨로 바꿀 때 자주 사용applymap()은 수치 데이터 전체 가공 시 (예: 정규화, 스케일링 등)컬럼 이름 조건으로 필터링할 수 있음
df.filter(like="이름", axis=1)
df.filter(regex="점수$", axis=1)
like: 부분 문자열 포함 여부regex: 정규표현식 지원axis=1: 컬럼 기준으로 검색df.to_csv("output.csv", index=False, na_rep="N/A")
index: 인덱스 포함 여부na_rep: 결측값(NaN)을 대체할 문자열df["성별"].value_counts()
df["성별"].unique()
pd.concat([df1, df2], ignore_index=True)
pd.concat([df1, df2], axis=1)
df1.append(df2, ignore_index=True)
※ 최근 Pandas 버전에서는 append()는 deprecated 예정
a = [1, 2]
b = [3, 4]
c = a + b # [1, 2, 3, 4]
read_csv()에서 delimiter, header, encoding, usecols 조합은 필수apply() + axis=1 + lambda: 복잡한 파생 컬럼 만들기duplicated() + drop_duplicates(): 데이터 클리닝map() + 딕셔너리 매핑: 범주형 라벨 처리filter() + regex: 다수 컬럼 선택시 매우 강력함처음엔 단순히 "코드만 치면 되겠지" 싶었는데,
실제로는 데이터 형태와 구조를 파악한 후 옵션들을 제대로 설정하지 않으면 결과가 완전히 달라졌다.
실습 중에 특히 apply, duplicated, read_csv의 다양한 옵션 조합은
강의 내용보다 훨씬 다양하고, 실무에서는 필수라는 걸 실감했다.