2014-02-17 6 views
3

나는 pytables에 초보자이며 압축 된 팬더 DataFrame 저장과 관련하여 질문이 있습니다. 나의 현재 코드는 다음과 같습니다HDFStore로 데이터 압축

내가 만든 HDF5의 크기를 확인
import pandas 
# HDF5 file name 
H5name="C:\\MyDir\\MyHDF.h5" 

# create HDF5 file 
store=pandas.io.pytables.HDFStore(H5name) 

# write a pandas DataFrame to the HDF5 file created 
myDF.to_hdf(H5name,"myDFname",append=True) 

# read the pandas DataFrame back from the HDF5 file created 
myDF1=pandas.io.pytables.read_hdf(H5name,"myDFname") 

# close the file 
store.close() 

는, 크기 (212킬로바이트는) 내가 팬더 DataFrame을 만드는 데 사용되는 원래의 csv 파일 (58킬로바이트)보다 훨씬 크다.

그래서, 난합니다 (HDF5 파일을 삭제) 및

# create HDF5 file 
store=pandas.io.pytables.HDFStore(H5name,complevel=1) 

변경하지 않았다 만든 파일의 크기를 재현하여 압축을 시도했다. 나는 complevels을 1에서 9까지 시도했으며 크기는 여전히 동일하게 유지되었습니다.

나는

# create HDF5 file 
store=pandas.io.pytables.HDFStore(H5name,complevel=1,complib="zlib") 

을 추가하려고하지만, 압축의 변화가 없었다.

무엇이 문제 일 수 있습니까?

또한, R이 저장 기능에 대해 수행하는 것과 유사한 압축을 사용하고 싶습니다 (예 : 내 사례에서 58KB 파일이 RData의 27kb 크기로 저장 됨). 크기를 줄이기 위해 파이썬에서 추가 직렬화를 수행해야합니까?

편집 :

내가 0.13.1

편집 파이썬 3.3.3와 팬더를 사용하고 있습니다 : 나는 누구의 RData에 size 큰 파일 4백87메가바이트 CSV 파일로 시도 (R의를 통해 저장 기능)은 169MB입니다. 큰 파일의 경우 압축이 표시됩니다. Bzip2는 202MB (레벨 = 9)의 최상의 압축을 제공했으며 읽기/쓰기가 가장 느립니다. Blosc 압축 (레벨 = 9)은 276MB의 가장 큰 크기를 제공했지만 쓰기/읽기가 훨씬 빨랐습니다.

어떤 R이 save 함수에서 다르게 동작하는지 알 수는 없지만 이러한 압축 알고리즘보다 훨씬 빠르고 똑같습니다.

+0

당신은''complib''도 지정해야합니다. docs here : http://pandas-docs.github.io/pandas-docs-travis/io.html#compression – Jeff

+0

복사하여 붙여 넣기에 문제가 있습니까? 'to_hdf' 함수에'store'를 전달하지 않습니다. 따라서 HDFStore 생성자에 전달 된 모든 매개 변수는 영향을 미치지 않습니다. 가장 쉬운 방법은 complib 및 complevel 매개 변수를 to_hdf에 전달하고 명시 적으로 HDFStore 객체를 전혀 만들지 않는 것입니다. –

답변

2

여기에 아주 작은 파일이 있습니다. 기본적으로 HDF5는 데이터를 청크합니다. 일반적으로 64KB는 최소 청크 크기입니다. 데이터가 무엇인지에 의존하지 않으면, 그 크기로 압축하지 못할 수도 있습니다.

이 크기 데이터의 간단한 해결책은 msgpack입니다. HDF5는 더 큰 크기의 경우 매우 효율적이며 압축이 잘됩니다.