엑셀로는 안 열리는 200만 행 대용량 데이터, 파이썬으로 1초 만에 요약하기

 회사에서 수년간 누적된 판매 데이터나 웹사이트 로그 데이터를 다운로드해 본 적 있으신가요? 파일 용량이 500MB를 넘어가고, 엑셀로 더블클릭해서 열었더니 화면 상단에 "데이터가 너무 많아 완전히 로드되지 않았습니다"라는 무시무시한 경고창이 뜹니다. 스크롤을 맨 밑으로 내려보면 정확히 1,048,576행에서 데이터가 싹둑 잘려 있습니다.

엑셀이라는 프로그램이 태생적으로 담을 수 있는 최대 한계치가 약 104만 행이기 때문입니다. 그 이상의 데이터는 엑셀로는 아예 열어볼 수조차 없습니다. 결국 데이터를 월별로 쪼개서 다운받는 등 불필요한 노가다를 해야 하죠. 하지만 파이썬에게 데이터의 한계란 '컴퓨터 메모리(RAM)의 한계'일 뿐입니다. 오늘은 엑셀은 쳐다보지도 못하는 200만 행, 1,000만 행의 대용량 데이터를 파이썬으로 가볍게 다루는 심화 기술을 알아보겠습니다.


1. 대용량 데이터의 표준, CSV 파일 불러오기

보통 100만 행이 넘어가는 대용량 데이터는 .xlsx 포맷이 아니라 .csv 포맷으로 저장되어 있습니다. CSV는 서식 없이 콤마(,)로만 데이터를 구분한 순수 텍스트 파일이라 용량이 훨씬 가볍기 때문입니다.

판다스에서 CSV 파일을 불러오는 방법은 엑셀과 거의 똑같습니다. read_excel 대신 read_csv만 써주면 됩니다.

import pandas as pd
df = pd.read_csv('3년치_전체판매로그.csv')

엑셀이 열다가 기절해버린 200만 행짜리 파일도, 파이썬에서는 위 코드 한 줄이면 단 몇 초 만에 데이터 프레임(표)으로 변환되어 메모리에 척척 올라갑니다. 이제 13편에서 배웠던 피벗 테이블 코드를 돌리면 200만 행의 데이터도 순식간에 요약할 수 있습니다.


2. 컴퓨터가 멈춘다면? 마법의 옵션 chunksize

파이썬이 아무리 강력해도, 내 컴퓨터의 램(RAM) 메모리가 8GB밖에 안 되는데 10GB짜리 초거대 데이터를 한 번에 불러오려 하면 MemoryError를 뿜으며 컴퓨터가 멈춰버립니다. 뱀(Python)이 코끼리를 한 입에 삼키려다 배가 터져버린 셈이죠.

이럴 때는 코끼리를 조각내서 먹어야 합니다. 판다스에는 대용량 데이터를 지정한 개수만큼 쪼개서 가져오는 chunksize(청크 사이즈)라는 마법의 옵션이 있습니다.

chunk_df = pd.read_csv('1000만행_로그.csv', chunksize=100000)

이렇게 chunksize=100000이라고 적어주면, 파이썬은 1,000만 행을 한 번에 부르지 않고 10만 행씩 딱 100번만 잘라서 가져옵니다. 메모리에 과부하가 걸릴 일이 절대 없습니다.


3. 쪼개서 계산하고 하나로 합치기 (for 반복문)

쪼개서 가져온 데이터를 어떻게 요약할까요? 5편에서 배웠던 for 반복문을 씁니다. 10만 행씩 가져와서 내가 필요한 내용(예: 매출 합계)만 쏙쏙 계산한 뒤, 빈 상자에 차곡차곡 담아서 마지막에 합치는 전략입니다.

result_list = [] # 계산 결과를 담을 빈 상자

# 10만 행씩 쪼개서 부르면서 반복
for chunk in pd.read_csv('1000만행_로그.csv', chunksize=100000):
    # 각 조각(chunk)에서 부서별 매출 합계만 쏙 계산하기
    sum_data = chunk.groupby('부서명')['매출액'].sum()
    result_list.append(sum_data) # 빈 상자에 계산 결과 담기

# 100번의 조각 계산이 끝나면 하나로 깔끔하게 합치기
final_result = sum(result_list)
print(final_result)

이 코드가 바로 실무 데이터 엔지니어들이 대용량 데이터를 처리할 때 쓰는 핵심 로직입니다. 아무리 거대한 데이터라도 무거운 껍데기는 다 버리고, 우리가 원하는 '요약된 결과값'만 가볍게 남기게 됩니다. 이렇게 가벼워진 final_result는 엑셀 파일로 다시 저장해도 100kb가 채 되지 않으므로 팀장님이 더블클릭으로 편하게 열어보실 수 있습니다.


진정한 데이터 분석가의 무기

남들이 엑셀 제한에 막혀 "팀장님, 이 데이터는 너무 커서 분석이 불가능합니다"라고 말할 때, 파이썬으로 1,000만 행의 데이터를 여유롭게 요약해서 보고하는 사람. 그것이 바로 파이썬을 무기로 장착한 여러분의 모습입니다. 대용량 데이터 앞에서도 당황하지 말고 판다스를 꺼내 드시기 바랍니다.


▶ 핵심 요약

  • 엑셀은 약 104만 행 이상의 데이터를 열 수 없지만, 파이썬 판다스는 컴퓨터 메모리가 허락하는 한 무한대의 행을 pd.read_csv()로 불러올 수 있습니다.
  • 컴퓨터 메모리 용량을 초과하는 초거대 데이터는 chunksize 옵션을 사용하여 10만 줄, 50만 줄씩 잘라서 가볍게 불러올 수 있습니다.
  • for 반복문을 활용해 조각난 데이터를 각각 요약 및 계산한 뒤 마지막에 하나로 합치면, 아무리 큰 데이터도 무리 없이 분석할 수 있습니다.


대용량 데이터도 다루게 되었으니, 이제 인터넷에 있는 데이터를 긁어와서 내 엑셀에 자동으로 채워 넣는 기술을 배워볼 차례입니다. 다음 17편에서는 '복사 붙여넣기 지옥 탈출! 파이썬 크롤링(BeautifulSoup)으로 웹 데이터 엑셀에 자동 수집하기'에 대해 알아보겠습니다.


댓글

이 블로그의 인기 게시물

"파일을 찾을 수 없습니다" - 경로 오류(Path error)가 발생하는 이유와 대처법

날짜와 시간 데이터 포맷이 제각각일 때 파이썬으로 일괄 통일하는 비법

수만 줄의 데이터, 엑셀이 멈출 때 파이썬으로 가볍게 필터링하는 요령