[Python] 데이터 분석 기초 Pandas (2)

2025. 12. 4. 16:10·개념 정리 step1/데이터 분석

이번 포스팅에서는 판다스(Pandas)를 활용해 데이터를 그룹화하여 분석하고, 여러 데이터를 합치며, 머신러닝을 위해 데이터를 전처리하는 과정(원-핫 인코딩 등)에 대해 정리해보겠습니다.


Pandas

1. 데이터 그룹화 (GroupBy)

데이터를 특정 기준에 따라 나누고, 그룹별로 집계(평균, 합계 등)를 낼 때 사용합니다.

  • 기본 사용법: df.groupby('기준컬럼')
  • 집계 함수: .count(), .mean(), .sum() 등을 뒤에 붙여 사용합니다.
    • numeric_only=True: 수치형 데이터만 계산하도록 설정 (오류 방지)
# 'group' 컬럼을 기준으로 묶어서 평균 구하기
df.groupby('group').mean(numeric_only=True)

# 'group' 컬럼 기준 합계 구하기
df.groupby('group').sum(numeric_only=True)

 

 

다중 그룹화 (2차 그룹) 여러 기준을 적용할 때는 리스트 []를 사용합니다.

# 혈액형(blood)과 성별(gender)로 묶은 뒤 키(height)의 평균 구하기
df.groupby(['blood', 'gender'])['height'].mean()

 

2. 중복값 처리

데이터에서 중복된 요소를 확인하거나 제거할 때 사용합니다.

  • 중복 제거: drop_duplicates()
    • keep='first': (기본값) 첫 번째 값만 남김
    • keep='last': 마지막에 나온 값을 남김
  • 값의 빈도수 확인: value_counts()
    • 가장 많이 등장하는 값부터 내림차순으로 정렬됩니다.
    • dropna=False: 결측치(NaN)도 포함하여 개수를 셀 때 사용합니다.
# 중복 제거 (마지막 값 유지)
df['blood'].drop_duplicates(keep='last')

# 값의 개수 세기 (NaN 포함)
df['blood'].value_counts(dropna=False)

 

3. 데이터프레임 합치기 (Concat & Merge)

데이터를 합치는 방법은 크게 물리적으로 이어 붙이는 방식(Concat)과 특정 키를 기준으로 병합하는 방식(Merge)이 있습니다.

① concat() : 물리적 결합

단순히 데이터를 위아래(행) 또는 양옆(열)으로 붙일 때 사용합니다.

  • axis=0: 위아래로 연결 (행 추가, 기본값)
  • axis=1: 옆으로 연결 (열 추가)
  • ignore_index=True: 기존 인덱스를 무시하고 새로 인덱스를 부여
  • 주의: axis=1 사용 시 인덱스(Row Number)가 서로 다르면 엉뚱한 위치에 붙거나 NaN이 발생할 수 있으므로 reset_index(drop=True)로 인덱스를 정리한 후 합치는 것이 좋습니다.
# 행으로 합치기 (인덱스 초기화)
pd.concat([df1, df2], ignore_index=True)

# 열로 합치기
pd.concat([df1, df2], axis=1)

② merge() : 관계형 결합 (SQL Join과 유사)

공통된 컬럼(Key)을 기준으로 데이터를 병합합니다.

  • on: 기준이 되는 컬럼명
  • how: 병합 방식 (left, right, inner, cross)
    • inner: 교집합 (양쪽 모두에 있는 데이터만)
    • left/right: 특정 데이터프레임을 기준으로 보존
# '이름'을 기준으로 내부 조인 (공통된 데이터만)
pd.merge(df1, df2, on='이름', how='inner')

# 컬럼명이 다를 경우 (df1은 '이름', df2는 '성함')
pd.merge(df1, df2, left_on='이름', right_on='성함', how='inner')

 

4. 순위 매기기 (Rank)

데이터의 순위를 매길 때 사용합니다.

  • ascending=False: 높은 값이 1등 (내림차순)
  • astype(int): 순위를 정수형으로 깔끔하게 변환
# 브랜드평판지수가 높은 순서대로 순위 매기기
df['브랜드순위'] = df['브랜드평판지수'].rank(ascending=False).astype(int)

5. 날짜 데이터 다루기

문자열로 되어 있는 날짜 데이터를 datetime 객체로 변환하면 년, 월, 일 등을 쉽게 추출할 수 있습니다.

  • 변환: pd.to_datetime(컬럼)
  • 접근자: .dt를 사용하여 세부 정보 추출 (year, month, day, dayofweek 등)
# 변환
df['birthday'] = pd.to_datetime(df['birthday'])

# 정보 추출
print(df['birthday'].dt.year)       # 연도
print(df['birthday'].dt.dayofweek)  # 요일 (0:월 ~ 6:일)
print(df['birthday'].dt.isocalendar().week) # 몇 번째 주인지 확인

6. 함수 적용 (Apply & Map)

데이터를 변환하거나 사용자 정의 함수를 적용할 때 사용합니다.

① apply()

데이터프레임이나 시리즈의 행/열 단위로 함수를 적용합니다. 복잡한 로직이나 lambda 함수와 함께 자주 사용됩니다.

# 성별을 숫자로 변환하는 람다 함수 적용
df['gender'] = df['gender'].apply(lambda x: 1 if x == '남자' else 0)

② map()

Series(1차원)에서 주로 사용하며, 딕셔너리를 이용해 값을 1:1로 매핑할 때 편리합니다.

map_gender = {'남자': 1, '여자': 0}
df['gender'] = df['gender'].map(map_gender)

7. 데이터 산술 연산 및 타입 선택

  • 산술 연산: 시리즈(컬럼)끼리 사칙연산이 가능합니다. 단, 타입이 맞지 않거나 데이터 개수가 다르면 NaN이 발생할 수 있습니다.
  • select_dtypes: 특정 데이터 타입만 골라낼 때 유용합니다.
# 숫자형 데이터(문자열 제외)만 선택하여 10 더하기
df.select_dtypes(exclude='object') + 10

# 문자열(object) 컬럼 이름만 가져오기
str_cols = df.select_dtypes(include='object').columns

8. ⭐범주형 데이터 전처리 (One-Hot Encoding)

컴퓨터(머신러닝 모델)는 '남자/여자', 'A형/B형' 같은 글자를 이해하지 못합니다. 이를 숫자로 바꿔주는 과정이 필요합니다.

Getty Images

범주형 데이터 판단 기준

  1. 순서가 없는 명목형: 혈액형, 지역, 성별 (→ 원-핫 인코딩 추천)
  2. 순서가 있는 범주형: 등급(A/B/C), 만족도 (→ 라벨 인코딩 고려)
  3. 고유값이 너무 많은 경우: 주민번호, ID 등 (→ 삭제 고려)

원-핫 인코딩 (One-Hot Encoding)

각 범주를 별도의 컬럼으로 만들고, 해당되는 값에만 1, 나머지는 0을 채우는 방식입니다. 판다스의 get_dummies()를 사용합니다.

# 'blood' 컬럼을 원-핫 인코딩으로 변환
df = pd.get_dummies(df, columns=['blood'])

# 결과 예시: blood_A, blood_B, blood_O 등의 컬럼이 생성되고 0 또는 1이 채워짐

'개념 정리 step1 > 데이터 분석' 카테고리의 다른 글

[데이터 분석] 저가 커피 프랜차이즈는 정말 스타벅스 옆에 입점할까? (feat. Haversine)  (0) 2025.12.10
[Python] Matplotlib 정리 & 데이터 분석 (Online Retail)  (0) 2025.12.09
[Python] Selenium을 활용한 웹 크롤링  (0) 2025.12.05
[Python] 웹 크롤링 개념 정리와 데이터 수집 해보기  (0) 2025.12.04
[Python] 데이터 분석의 기초 Numpy, Pandas(1)  (0) 2025.12.03
'개념 정리 step1/데이터 분석' 카테고리의 다른 글
  • [Python] Matplotlib 정리 & 데이터 분석 (Online Retail)
  • [Python] Selenium을 활용한 웹 크롤링
  • [Python] 웹 크롤링 개념 정리와 데이터 수집 해보기
  • [Python] 데이터 분석의 기초 Numpy, Pandas(1)
고니3000원
고니3000원
프로젝트의 구현 과정과 기술적 노하우를 담았습니다. AI 모델 연구와 매일의 학습 기록을 차곡차곡 공유하고 있습니다. [ 매너 & 태도 ] * 항상 겸손해라.
늘 자신을 낮추고 겸손함을 잃지 마라.
 * 나이 불문 예의를 지켜라.
나이와 지위를 막론하고, 누구에게나 변함없는 예의를 갖추어라.
 * 행복하겠다는 생각을 버려야 행복하다.
행복에 대한 강박과 집착을 내려놓을 때, 비로소 진정한 행복이 찾아온다.
 [ 리더십 & 실행 ] * 통찰력, 결단력,
  • 고니3000원
    곤이의 공부 블로그
    고니3000원
  • 전체
    오늘
    어제
    • 분류 전체보기 (211) N
      • 1. AI 논문 + 모델 분석 (21)
        • AI 논문 분석 (13)
        • AI 모델 분석 (8)
      • 2. 자료구조와 알고리즘 (16)
        • 2-1 자료구조와 알고리즘 (13)
        • 2-2 강화학습 알고리즘 (3)
      • 3. 자습 & 메모(실전, 실습, 프로젝트) (27)
        • 3-1 문제 해석 (4)
        • 3-2 메모(실전, 프로젝트) (14)
        • 3-3 배포 실전 공부 (7)
        • 3-4 최신 기술 분석 (2)
      • 4. [팀] 프로젝트 및 공모전 (31)
        • 4-1 팀 프로젝트(메모, 공부) (1)
        • 4-2 Meat-A-Eye (6)
        • 4-3 RL-Tycoon-Agent (3)
        • 4-4 구조물 안정성 물리 추론 AI 경진대회(D.. (4)
        • 4-5 AgentShield(보안 플랫폼) (17)
      • 5. [개인] 프로젝트 및 공모전 (20) N
        • 4-1 귀멸의칼날디펜스(자바스크립트 활용) (5)
        • 4-2 바탕화면 AI 펫 프로그램 (4)
        • 4-3 개인 프로젝트(기타) (3)
        • 4-4 공모전 (4) N
        • 4-5 나만의 로컬 LLM 멀티 에이전트 구축 (4)
      • 개념 정리 step1 (32)
        • Python 기초 (7)
        • DBMS (1)
        • HTML | CSS (3)
        • Git | GitHub (1)
        • JavaScript (5)
        • Node.js (5)
        • React (1)
        • 데이터 분석 (6)
        • Python Engineering (3)
      • 개념 정리 step2 (60)
        • Machine | Deep Learning (15)
        • 멀티모달(Multi-modal) (23)
        • 강화 학습 (10)
        • AI Agent (9)
        • 메디컬 이미지 (3)
      • 개인 공부 - 내가 공부하고 싶은 모든 것 (2) N
        • 1. 인프라 (2) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Notion-포트폴리오
    • Github
  • 공지사항

    • ‘박영곤’ 나의 핵심 가치
  • 인기 글

  • 태그

    공모전
    알고리즘
    인공지능
    강화학습
    Ai
    ViT
    구현
    RAG
    전처리
    github
    paddleocr
    pandas
    Ollama
    학습
    Agent
    프로젝트
    Lora
    논문 리뷰
    API
    데이터분석
    파이썬
    파인튜닝
    Python
    자료구조
    보안
    Vision
    자바스크립트
    OCR
    transformer
    llm
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고니3000원
[Python] 데이터 분석 기초 Pandas (2)
상단으로

티스토리툴바