python - pandas - save dataframe as hdf5.

1 분 소요

pd.dataframe을 hdf5의 형식으로 저장합시다.

  • 보통 우리는 pd.DataFrame을 그냥 무심코, csv의 형태로 저장하고는 합니다. 하지만, 슬프게도, csv로 저장하면 다음과 같은 문제들이 발생하죠.
    • 비효율성) string으로 저장하므로 데이터 용량을 많이 차지하며, 메모리에서도 과부하가 발생하여 읽고 쓸 때, 긴 시간이 소요되기 쉬움.
    • 메타 데이터 저장못함) pd.DataFrame은 각 칼럼별로 dtype들을 저장할 수 있는, 데이터 관리 툴입니다. 따라서 가능하면, 각 칼럼별로 지정해둔 dtype들이 유지되면서 옮겨지면 좋을텐데, 아쉽게도 csv로 저장할 경우 이 부분에 문제가 생기죠.
  • 물론, 그러함에도 불구하고, csv로 저장하면, excel등을 통해서 쉽게 파일을 볼 수 있다는 장점이 있습니다. 결국 어느 한 쪽을 선택했을 때 발생하는 트레이드오프 일 뿐이죠.

anyway. save it hdf5.

  • 따라서, 데이터를 빠르게 읽고 쓰기 위해서 다양한 형식들이 있습니다. python에서는 보통 pickle을 쓰는 것이 편하기는 한데, 오늘은 hdf5(Hierarchical Data Format version 5)라는 형식에 따라서 pd.DataFrame을 저장해줄 거에요. csv, pickle에 비해서 hdf5는 일종의 Database와 같다고 생각해도 됩니다. 사실
  • 아무튼 간에, 우리는 그냥 저장만 할거니까요 호호. 다음의 간단한 python code를 만들고 실행하면 됩니다.
import pandas as pd

df = pd.DataFrame() # 
df.to_hdf('df.h5', key='df', mode='w')
pd.read_hdf('df.h5', 'df')
  • 하지만, 오류가 발생하네요. 그냥 tables라는 모듈을 설치해주면 될 것 같아요.
ImportError: HDFStore requires PyTables, "No module named 'tables'" problem importing

install pytables.

  • pytables는 아주 간단하게 hdf5의 형태로 데이터를 저장하기 위해 필요한 라이브러리입니다. documentation에 들어가면 내용이 길지만, 일단 그냥 설치해줍니다.
pip install tables
  • 그리고 이전에 해줬던, 코드를 다시 실행해주면 문제없이 되는 것을 알 수 있습니다.

wrap-up

  • csv는 string형식이니까 무시하고, pickle 또한, 보안상의 위험과 python에서만 돌아가므로 넘어간다고 해도, hdf5, parquet, feather과 같은 많은 다른 대안들이 남아 있습니다.
  • 처음에는 “아니, 표준도 없고 뭐 이렇게 비슷한 것들이 많냐” 싶었는데, 다시 생각해보니, Database와 다를게 없죠. DB 시장에 셀수 없이 많은 vendor들이 있는 것과 기본적으로는 크게 다르지 않아요.

reference

댓글남기기