파이썬 requests 라이브러리로 공공데이터 API를 호출하고, JSON이나 XML 포맷을 파싱해 화면에 출력하는 것까지 성공했다면 이제 데이터 수집의 기초 체력은 기른 셈입니다. 하지만 화면에 단순히 프린트된 데이터는 컴퓨터를 끄는 순간 흔적도 없이 사라지는 휘발성 데이터에 불과합니다. 이 데이터들을 내 컴퓨터에 온전한 파일로 저장해 두고 필요할 때마다 꺼내 보거나 분석할 수 있어야 비로소 진짜 '데이터 자산'이 됩니다.
비전공자나 초보자가 데이터를 가장 편하게 관리하고 눈으로 확인하기 좋은 포맷은 단연 '엑셀(Excel)'입니다. 파이썬에는 엑셀이나 CSV 같은 표 형태의 데이터를 다루는 데 특화된 '판다스(Pandas)'라는 아주 강력한 라이브러리가 있습니다. 오늘은 API로 수집한 복잡한 딕셔너리 구조의 데이터를 판다스를 활용해 깔끔한 엑셀 파일로 정렬하고 저장하는 실무 코드를 알아보겠습니다.
왜 데이터 저장에는 판다스(Pandas)가 필수일까?
판다스를 사용하지 않고 파이썬의 기본 파일 입출력(open()) 기능만으로 엑셀이나 CSV 파일을 만들려고 하면 코드가 무척 복잡해집니다. 데이터 하나하나마다 쉼표(,)를 찍어주어야 하고, 데이터 내부에 줄바꿈이나 쉼표가 섞여 있으면 열이 뒤틀리는 대참사가 발생하곤 합니다.
판다스를 쓰면 이런 번거로운 과정이 단 한 줄로 해결됩니다. 판다스의 핵심 기능인 '데이터프레임(DataFrame)'은 우리가 흔히 보는 엑셀의 행과 열로 이루어진 표 구조와 1:1로 완벽하게 매칭됩니다. 파이썬 리스트나 딕셔너리를 이 데이터프레임이라는 틀에 집어넣기만 하면, 판다스가 알아서 예쁜 표 모양으로 변환해 주고 클릭 한 번으로 .xlsx 파일이나 .csv 파일을 만들어냅니다.
API 데이터를 판다스 데이터프레임으로 전환하는 원리
오픈 API에서 JSON 형식으로 받아온 데이터는 대개 다음과 같은 구조를 가집니다. 중괄호 안에 대괄호가 있고, 그 안에 또 여러 개의 딕셔너리가 들어있는 형태입니다.
# API에서 받아온 일반적인 데이터 예시
api_response = {
"response": {
"body": {
"items": [
{"date": "20260709", "time": "0600", "temp": "24.5", "humidity": "60"},
{"date": "20260709", "time": "0700", "temp": "25.0", "humidity": "55"},
{"date": "20260709", "time": "0800", "temp": "26.1", "humidity": "50"}
]
}
}
}
여기서 우리가 진짜 필요한 알맹이는 items 뒤에 붙어 있는 대괄호 [] 속 리스트 데이터입니다. 판다스는 이 리스트 안의 딕셔너리 구조를 보면, 딕셔너리의 'Key(date, time, temp 등)'를 엑셀의 세로 칼럼(열) 이름으로 만들고, 'Value(값)'들을 가로 데이터(행)로 알아서 맵핑해 줍니다. 구조만 명확히 짚어내면 코드는 서너 줄 만에 끝납니다.
실전! 수집 데이터 엑셀 파일 변환 핵심 코드
컴퓨터 터미널에 pip install pandas openpyxl을 먼저 설치한 뒤, 아래 템플릿을 실행하면 수집된 데이터가 내 컴퓨터에 weather_data.xlsx 파일로 깔끔하게 생성되는 것을 볼 수 있습니다.
import pandas as pd
# 1. 이전 편에서 다룬 대로 API에서 파싱해 온 순수 리스트 데이터를 준비합니다.
raw_items = [
{"date": "20260709", "time": "0600", "temp": "24.5", "humidity": "60"},
{"date": "20260709", "time": "0700", "temp": "25.0", "humidity": "55"},
{"date": "20260709", "time": "0800", "temp": "26.1", "humidity": "50"}
]
# 2. 판다스 데이터프레임(표) 구조로 변환합니다.
df = pd.DataFrame(raw_items)
# 3. 데이터가 잘 들어갔는지 파이썬 콘솔에서 먼저 확인해 봅니다.
print("--- 생성된 데이터프레임 확인 ---")
print(df)
# 4. 영문으로 된 컬럼명을 가독성 좋게 한글로 변경합니다. (선택사항)
df.columns = ['측정날짜', '측정시간', '기온(°C)', '습도(%)']
# 5. 인덱스(순번)를 제외하고 깔끔하게 엑셀 파일로 저장합니다.
output_filename = "weather_data.xlsx"
df.to_excel(output_filename, index=False)
print(f"\n[성공] 데이터가 {output_filename} 파일로 안전하게 저장되었습니다.")
초보자가 엑셀 저장 시 자주 겪는 한계와 주의사항
판다스로 엑셀 파일을 만들 때 가장 많이 하는 실수는 '기존 파일 덮어쓰기' 문제입니다. 위의 코드를 그대로 매일 실행하면, 새로 받아온 데이터가 기존 파일 뒤에 쌓이는 게 아니라 기존 파일을 지우고 그 위에 완전히 새로 덮어씌워 집니다. 어제 받아둔 귀한 데이터가 날아가는 셈입니다.
누적해서 데이터를 쌓고 싶다면 두 가지 방법이 있습니다. 첫째는 저장할 때 파일 이름 뒤에 날짜나 시간(예: weather_20260709.xlsx)을 붙여서 파일 자체를 매번 다르게 생성하는 것입니다. 둘째는 저장하기 전에 파이썬 코드로 기존 엑셀 파일을 먼저 읽어온 뒤, 새로 수집한 데이터를 판다스의 pd.concat() 함수로 아래에 이어 붙이고 다시 저장하는 방식입니다. 대용량 데이터를 장기 수집할 계획이라면 파일명에 날짜를 붙여 분할 저장하는 것이 파일 손상 리스크를 줄이는 가장 안전한 방법입니다.
핵심 요약
API로 수집한 휘발성 데이터를 저장하고 관리하는 데는 판다스(Pandas) 라이브러리가장 최적의 도구입니다.
JSON의 리스트 내 딕셔너리 구조는
pd.DataFrame()을 통과하면 엑셀과 같은 표 형태로 즉시 변환됩니다.판다스의
to_excel()함수를 쓰면 손쉽게 저장할 수 있으나, 기본 설정 시 기존 파일을 덮어쓰므로 누적 저장을 원할 때는 파일명에 날짜를 분리하는 전략이 필요합니다.
0 댓글