[파이썬 12] pandas 입문, 엑셀 데이터 다루는 법


앞선 편들에서 openpyxl로 엑셀을 다루는 법을 봤다면, 이번엔 대량의 데이터를 분석하고 집계하는 데 특화된 라이브러리인 pandas를 다룬다. openpyxl이 셀 하나하나를 세밀하게 제어하는 데 강하다면, pandas는 데이터를 표(DataFrame) 형태로 통째로 다루면서 필터링, 정렬, 집계 같은 분석 작업을 훨씬 빠르고 간결하게 처리할 수 있다는 차이가 있다.


1. 설치와 데이터 불러오기


pip install pandas


import pandas as pd


df = pd.read_csv("매출데이터.csv")

print(df.head()) # 처음 5줄만 미리보기


CSV뿐 아니라 pd.read_excel()로 엑셀 파일도 곧바로 DataFrame으로 불러올 수 있다. DataFrame은 pandas의 핵심 자료구조로, 엑셀의 표와 비슷하게 행과 열로 구성된 데이터를 다루는 객체라고 생각하면 된다.


2. 데이터 살펴보기


print(df.shape) # (행 개수, 열 개수)

print(df.columns) # 열 이름 목록

print(df.describe()) # 숫자 열들의 평균, 최대/최소 등 요약 통계


3. 필터링하기, 조건에 맞는 행만 뽑기


앞서 다룬 조건문의 원리가 여기서도 그대로 적용된다. 특정 조건을 만족하는 행만 골라내는 게 pandas에서 가장 자주 쓰이는 작업 중 하나다.


# 매출이 100만원 이상인 행만

high_sales = df[df['매출'] >= 1000000]


# 여러 조건 조합

filtered = df[(df['매출'] >= 1000000) & (df['지역'] == '서울')]


4. groupby, 그룹별로 요약하기


groupby는 데이터를 특정 열 기준으로 나누고, 각 그룹에 통계 함수를 적용한 뒤, 그 결과를 다시 하나로 합치는 3단계(분할-적용-결합) 방식으로 동작한다. 이 방식은 SQL의 GROUP BY와 비슷한 개념이지만, pandas 쪽이 집계뿐 아니라 데이터 변환, 필터링 등 훨씬 다양한 연산을 지원한다는 차이가 있다.


# 지역별 매출 합계

region_sales = df.groupby('지역')['매출'].sum()

print(region_sales)


# 지역별 평균, 개수 등 여러 통계를 한 번에

summary = df.groupby('지역')['매출'].agg(['sum', 'mean', 'count'])

print(summary)


예를 들어 "지역별로 매출 합계를 구하고 싶다"는 요청은 엑셀에서는 피벗테이블을 만드는 작업에 해당하는데, pandas에서는 이 한 줄로 끝난다.


5. 새 열 추가하고 값 계산하기


df['매출_원'] = df['매출'] * 1.1 # 부가세 포함 금액 계산

df['등급'] = df['매출'].apply(lambda x: '우수' if x >= 1000000 else '보통')


apply()는 각 행(또는 값)에 함수를 적용해서 새로운 값을 만드는 메서드다. 조건에 따라 값을 분류하는 작업을 앞서 배운 if문 대신 이렇게 한 줄로 처리할 수 있다.


6. 결과를 다시 엑셀로 저장하기


region_sales.to_csv("지역별매출.csv")

df.to_excel("가공된데이터.xlsx", index=False)


앞서 배운 openpyxl과 결합해서, pandas로 분석한 결과를 엑셀로 저장한 뒤 서식이나 조건부 서식을 openpyxl로 추가로 입히는 방식도 실무에서 흔히 쓰인다.


7. 정리


pandas는 대량 데이터를 표 형태로 불러와서 필터링, 그룹별 집계, 새로운 열 계산까지 코드 몇 줄로 처리할 수 있게 해준다. 엑셀로 하면 여러 단계의 피벗테이블과 수식이 필요한 작업도, pandas에서는 groupby()와 filter 조건 한두 줄로 끝나는 경우가 많다.