결론부터 말씀드립니다. 앞서 크롤링으로 수집하고 판다스(Pandas)를 통해 데이터프레임(DataFrame)으로 예쁘게 가공한 재무 데이터는, 결국 내 컴퓨터 바탕화면에 '파일' 형태로 저장되어야 비로소 업무 자동화의 가치를 지닙니다. 매일 아침 업데이트되는 주식 시장 지표와 관심 기업의 현재가를 마우스 드래그나 복사 붙여넣기 없이 파이썬 스크립트 단 한 줄로 엑셀 파일로 자동 생성하는 방법을 알아봅니다.
이번 글에서는 파이썬 메모리상에 떠 있는 가상의 표(데이터프레임)를 실물 파일인 CSV와 엑셀(.xlsx)로 추출하는 완벽한 실무 가이드를 제공합니다.
1. 데이터 저장 포맷의 선택: CSV vs 엑셀(Excel)
데이터를 저장할 때 가장 먼저 결정해야 할 것은 파일의 확장자입니다. 실무에서는 목적에 따라 두 가지 포맷을 명확히 구분하여 사용합니다.
CSV (.csv): 콤마(,)로 데이터를 구분하는 단순 텍스트 파일입니다. 용량이 매우 가볍고 저장 속도가 빨라 수십만 건의 틱 데이터나 매크로 지표 등 방대한 금융 데이터를 '백업'하고 '분석'하는 용도로 최적화되어 있습니다.
엑셀 (.xlsx): 우리가 아는 일반적인 엑셀 파일입니다. 서식을 지정할 수 있고, 시트(Sheet)를 여러 개로 나눌 수 있어 상사나 팀원에게 '보고'하는 용도로 적합합니다. 단, CSV보다 저장 속도가 미세하게 느립니다.
2. 한글 깨짐을 방지하는 완벽한 CSV 저장법
가공이 완료된 데이터프레임(df)을 CSV로 저장하는 코드는 to_csv() 함수 하나면 충분합니다. 하지만 코딩 초보자들이 한국어 주식 종목명이나 기업명을 CSV로 저장한 뒤 엑셀에서 열어보면, 글자가 외계어처럼 깨지는 현상을 100% 겪게 됩니다.
이를 방지하기 위해 실무에서는 반드시 인코딩 옵션을 추가해야 합니다.
import pandas as pd
# 앞선 5편에서 만든 데이터프레임(df)이 있다고 가정
raw_data = [
{'종목코드': '005930', '종목명': '삼성전자', '현재가': 80000},
{'종목코드': '000660', '종목명': 'SK하이닉스', '현재가': 180000}
]
df = pd.DataFrame(raw_data)
# CSV 파일로 저장하기 (한글 깨짐 방지 핵심 옵션 포함)
df.to_csv("관심종목_주가.csv", index=False, encoding='utf-8-sig')
print("CSV 파일 저장이 완료되었습니다.")
index=False: 데이터프레임 맨 좌측에 자동으로 생성되는 순번(0, 1, 2...)을 빼고 저장하라는 의미입니다. 실무에서는 보통 불필요하므로 제외합니다.encoding='utf-8-sig': 엑셀에서 파일을 열었을 때 한글이 깨지지 않도록 강제하는 가장 확실하고 중요한 마법의 키워드입니다.
3. 실무 보고서의 표준: 엑셀(.xlsx) 파일로 저장하기
보고용으로 엑셀 파일이 필요하다면 to_excel() 함수를 사용합니다. 단, 엑셀 파일 처리를 위해서는 2편에서 설치했던 openpyxl 라이브러리가 파이썬 환경에 반드시 설치되어 있어야 합니다.
# 엑셀 파일(.xlsx)로 저장하기
df.to_excel("관심종목_주가보고서.xlsx", index=False, sheet_name='오늘의 주가')
print("엑셀 파일 저장이 완료되었습니다.")
sheet_name: 엑셀 파일 하단의 시트 이름을 지정합니다. 날짜나 특정 주제별로 시트를 쪼갤 때 유용합니다.
4. 실전 고급 팁: 매일 크롤링한 데이터를 새로운 시트에 누적하기
재무 분석가나 투자자라면 매일매일의 환율이나 KOSPI 200 지수를 하나의 엑셀 파일에 시트별로 차곡차곡 모으고 싶을 것입니다. 기존 엑셀 파일을 덮어쓰지 않고, 새로운 날짜의 시트를 추가하는 실무 로직입니다.
import datetime
# 오늘 날짜를 'YYYY-MM-DD' 형태로 가져오기
today = datetime.datetime.now().strftime("%Y-%m-%d")
# 기존 엑셀 파일에 시트만 추가하는 ExcelWriter 엔진 사용 (파일이 미리 존재해야 함)
# mode='a'는 덮어쓰기(write)가 아닌 추가(append)를 의미합니다.
try:
with pd.ExcelWriter("시장지표_누적.xlsx", engine='openpyxl', mode='a') as writer:
df.to_excel(writer, index=False, sheet_name=today)
print(f"{today} 시트가 성공적으로 누적되었습니다.")
except FileNotFoundError:
# 파일이 처음이라 없다면 새로 생성 (최초 1회 실행)
df.to_excel("시장지표_누적.xlsx", index=False, sheet_name=today)
print("새 엑셀 파일을 생성하고 데이터를 저장했습니다.")
이 코드를 활용하면, 여러분의 컴퓨터는 매일 지정된 시간에 금융 데이터를 수집하여 하나의 엑셀 파일에 날짜별 시트로 데이터를 차곡차곡 쌓아주는 훌륭한 자동화 비서가 됩니다.
💡 핵심 요약
가공된 파이썬 데이터를 내보낼 때, 대용량 데이터 분석용으로는 CSV 포맷을, 실무 보고 및 열람용으로는 엑셀(.xlsx) 포맷을 선택합니다.
CSV 저장 시
encoding='utf-8-sig'옵션을 추가해야 엑셀로 열었을 때 한글 종목명이나 기업명이 깨지는 참사를 막을 수 있습니다.pd.ExcelWriter와mode='a'옵션을 활용하면, 하나의 엑셀 파일 안에 매일매일의 데이터를 날짜별 시트로 자동 누적시킬 수 있습니다.
🚀 다음 편 예고 지금까지는 공개된 웹페이지를 '크롤링'하는 방법을 다뤘습니다. 하지만 증권사 데이터를 더 빠르고 정확하게 가져오는 공식적인 방법이 있습니다. 7편에서는 '증권사 API 연동 가이드: 키움증권 Open API 기본 셋업'을 통해 본격적인 퀀트 투자의 첫 단추를 채워보겠습니다.
💬 질문 하나 할까요? 수집한 주식 및 재무 데이터를 엑셀로 자동 저장하게 된다면, 엑셀 파일 내에서 어떤 형태의 표나 계산(예: 수익률 비교, 전일 대비 증감율 등)을 추가로 구현해 보고 싶으신가요?
0 댓글