Day006 - Pandas 라이브러리와 데이터 분석
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Day006 - Pandas 라이브러리와 데이터 분석
오늘은 Python 데이터 분석의 핵심 도구인 판다스(Pandas) 라이브러리를 활용하여 데이터프레임(DataFrame)을 조회, 선택, 정렬하고 결측치∙이상치 정제 및 파생 변수를 생성하는 전체 데이터 전처리 흐름을 학습 했다.
![]() |
| Pandas DataFrame 및 Series 구조 |
1. 데이터 분석 : Pandas 라이브러리와 데이터프레임 기초
순수 Python의 반복문(for문 또는 while문)과 리스트(List) 기반 작업에서 벗어나 2차원 표(Table) 형태 구조를 효율적으로 다루기 위해 Pandas를 사용한다. Pandas의 핵심 자료구조는 1차원 열 구조인 Series 와 2차원 표 구조인 DataFrame 이다.
(1) 데이터 구조 확인 및 탐색
데이터를 블러온 후 데이터의 전체적인 윤곽을 파악하기 위해 다음 메서드(Method)들을 필수적으로 사용한다.
- df.head(n) / df.tail(n) : 상단 및 하단 n개 행 미리보기
- df.shape : (행 수, 열 수) 형태의 차원 확인
- df.info() : 각 열의 자료형, 결측치(Non-Null) 수 요약
- df.describe() : 수치형 열의 기술통계량(평균, 표준편차, 중앙값 등) 확인
import pandas as pd
import numpy as np
# CSV 파일 읽기 및 기초 탐색
df = pd.read_csv("data/cafe_sales.csv")[cite: 3]
print("데이터 차원:", df.shape)[cite: 3]
print(df.info())[cite: 3]
display(df.describe())[cite: 3](2) 열/행 선택 및 필터링
- 열(Column) 선택 : 단일 대괄호 df['열'] 은 Series 로 반환되고, 이중 대괄호 df[['열1', '열2']] 는 DataFrame 으로 반환된다.
- 행/열 고르기(loc vs iloc) : loc 는 라벨(이름) 기반 조회, iloc 는 정수 위치(인덱스) 기반 조회를 수행 한다.
- 불리언(Boolean) 필터링 : 조건식 묶음 시 & (and), | (or), ~ (not) 연산자를 사용하며, 각 조건은 반드시 소괄호 ( ) 로 감싸야 한다.
- 정렬(sort_values) : ascending=False 옵션을 지정하면 내림차순 정렬이 수행 된다.
# 회원(Y)이면서 카테고리가 커피인 행 필터링 및 정렬 filtered_df = df[(df['회원여부'] == 'Y') & (df['카테고리'] == '커피')][cite: 3] sorted_df = filtered_df.sort_values(by='수량', ascending=False)[cite: 3]
2. 데이터 수집 & 전처리
결측치∙이상치, 불필요한 공백, 잘못된 자료형이 포함되어 있어 수집 직후 정제 작업이 필수적이다.
![]() |
| 결측치 및 이상치 처리 전후 비교 |
(1) 결측치(NaN) 및 이상치 처리
- 결측치 감지 및 처리 : isna().sum() 으로 결측치 수를 확인하고, dropna() 로 제거하거나 fillna() 로 대체한다. 이상치가 존재할 경우 평균값 대신 중앙값 즉, median() 으로 대체하는 것이 안전 하다.
- 이상치 처리 : 정상 범위를 크게 벗어나는 극단값(예: 수량 999)은 조건 필터링으로 제거하거나 clip(upper=N) 을 적용하여 상한을 지정 한다.
![]() |
| 문자열 정제 및 데이터 타입 변환 흐름 |
(2) 자료형 변환 및 문자열 정제(.str)
- 문자열 가격 정수화 : 5,000 형태의 콤마가 포함된 문자열은 .str.replace(',', '') 제거 후, .astype(int) 로 형변환 한다.
- 문자열 공백 제거 : 음료 명에 포함된 텍스트 공백은 .str.strip() 으로 정제하여 동일 값으로 통일 한다.
- 날짜형 변환 : pd.to_datetime() 을 이용하여 Datetime 형으로 변환 후, .dt.dayofweek 등의 속성을 활용한다.
![]() |
| 파생 변수(총액, 가격등급 등) 생성 |
(3) 파생 변수 생성
사칙연산, apply(), map(), np.where() 등을 활용해 필요한 분석용 열을 새롭게 추가 한다.
# 데이터 정제 및 파생 변수 생성 파이프라인
work = df.copy()[cite: 4]
work['음료'] = work['음료'].str.strip()[cite: 4]
work['가격'] = work['가격'].str.replace(',', '').astype(int)[cite: 4]
work.loc[work['수량'] == 999, '수량'] = np.nan[cite: 4]
work['수량'] = work['수량'].fillna(work['수량'].median()).astype(int)[cite: 4]
# 파생 변수 생성
work['총액'] = work['가격'] * work['수량'][cite: 4]
work['대량주문'] = np.where(work['수량'] >= 4, '대량', '일반')[cite: 4]
# 최종 결과 저장 (인덱스 제외 및 한글 깨짐 방지 옵션)
work.to_csv("output/clean_sales.csv", index=False, encoding="utf-8-sig")[cite: 4]오늘 데이터 분석 및 전처리 파이프라인 전반을 다루며, 데이터를 다루기 전 수집된 원본을 가공하는 전처리 단계가 왜 전체 작업의 80% 이상을 차지하는지 직접 체감할 수 있었다. 조건 필터링 시, 괄호 미적용으로 인한 에러나 콤마가 포함된 문자열의 형변환 에러 등 실무에서 빈번히 발생하는 오류들을 해결해 보면서 Pandas 핸들링에 대해 실습 할 수 있었다. Pandas 라이브러리로 다양한 방식의 데이터 분석을 할 수 있을 것 같아서 많은 기대가 된다.
#Pandas #DataFrame #DataPreprocessing #Python #DataAnalysis #SKNetworks #판다스 #데이터프레임 #데이터전처리 #파이썬 #데이터분석 #엔코아AI캠퍼스 #TIL
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
.png)


%20%EC%83%9D%EC%84%B1%20%EA%B2%B0%EA%B3%BC.png)
댓글
댓글 쓰기