我有一个HDF5
,大约有13,000行×5列,随着时间的推移,这些行被追加到DF.to_hdf(Filename, 'df', append=True, format='table')
的同一个文件中,这里的大小是:
-rw-r--r-- 1 omnom omnom 807M Mar 10 15:55 Final_all_result.h5
最近我收到了ValueError
,因为我尝试附加到其中一列的数据比声明的列大小长(2000,min_itemsize
)。
所以我将所有行都加载到内存中并将它们一次性转储到新的HDF
文件中:
DF.to_hdf(newFilename, \
'df', \
mode='a', \
data_columns=['Code', 'ID', 'Category', 'Title', 'Content'], \
format='table', \
min_itemsize={'index': 24, \
'Code': 8, \
'ID': 32, \
'Category': 24, \
'Title': 192, \
'Content':5000 \
} \
)
我真的很惊讶新文件大小约为原始文件的1/10:
-rw-r--r-- 1 omnom omnom 70M Mar 10 16:01 Final_all_result_5000.h5
我仔细检查了两个文件中的行数,它们是相等的。
我是否以错误的方式追加新行,导致每个追加操作的文件大小为多个?在这里搜索并搜索,但不认为之前已经讨论过,或者我用错误的关键字进行搜索。
感谢任何帮助。
更新:
我尝试在此帖子的每个建议中为附加行中的所有数据列添加min_itemsize
:pandas pytables append: performance and increase in file size:
DF.to_hdf(h5AbsPath, \
'df', \
mode='a', \
data_columns=['Code', 'ID', 'Category', 'Title', 'Content'], \
min_itemsize={'index': 24, \
'Code': 8, \
'ID': 32, \
'Category': 24, \
'Title': 192, \
'Content':5000 \
}, \
append=True \
)
但仍然没有减小文件大小。
感谢您提供添加压缩的建议,不会按要求压缩附加和新转储的文件。
答案 0 :(得分:1)
我曾经从pandas DataFrame中保存.h5文件。尝试将complib='blosc'
和complevel=9
添加到to_hdf()
功能。这应该会减小文件大小。