HDFStore.append을 사용할 때 데이터 프레임의 인덱스를 저장하는 데 사용되는 데이터 형식을 제어하는 방법이 있습니까?팬덤 HDFStore : dtype 인덱스 변경
팬더 인덱스는 항상 hb5 파일에 64 비트로 저장됩니다. 저장소 효율성을 높이고 인덱스 열의 크기를 줄이려합니다.
나는 독특한 3 열 다중 지수가 UINT64 인덱스로 저장하는 것은 내 응용 프로그램에서 공간의 엄청난 낭비 :df.set_index(['indA', 'indB', 'indC'])
HDFStore.append
전에 결과를 설정하는 다음과 같은 데이터 프레임 단순히
In [15]: df.dtypes
Out[15]: indA int32
indB int16
indC int8
data float32
dtype: object
감안할 indA
, indB
및 indC
은 Int64Col
으로 hdf5 파일에 저장됩니다.
팬더 인덱스를 설정하고 대신 pytables 데이터 열을 지정하지 않으면 :
store.append('mytable', df, data_columns=['indA', 'indB', 'indB'])
indA
, indB
및 indC
은 그러나 추가 Int64Col
이 HDF5 파일에 저장됩니다, 원래 dtypes 함께 저장됩니다.
이것은 실제로 도움이되지 않습니다. 원래의 dtypes에 저장함으로써 3 개의 ind
열에 대해 56 비트를 저장/보존하고 있습니다. 그러나 여분의 (불필요한) 인덱스 열은 64 비트입니다 ...
아이디어가 있으십니까?
제프를 분명히 해주셔서 감사합니다. 스토리지 효율성을 최적화하려고 시도한 것 같습니다. 데이터 열에서 float64에서 float32로 이동하여 약 50 %의 비용을 절감 한 후, 필자는 롤업 중이 었습니다. 추가 int64 인덱스를 제거하는 것이 옳습니다. 정말로 가치가있는 것은 아닙니다 : 나는 찾고 있던 구조로 pytables hdf5를 만들었습니다. 인덱스를 데이터 열로 사용하는 HDFStore hdf5와 비교하면 저장 용량은 약 2 %에 불과합니다. (두 bzip2 압축.) - 혼전의 가치가 분명히 없습니다. 추가 된 int64 인덱스에서 압축이 잘 작동하는 것으로 보입니다. – ARF