用pandas'to_hdf追加行的倍数H5文件大小?

时间:2015-03-10 08:50:46

标签: python python-2.7 pandas append hdf5

我有一个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_itemsizepandas 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 \
                 )

但仍然没有减小文件大小。

感谢您提供添加压缩的建议,不会按要求压缩附加和新转储的文件。

1 个答案:

答案 0 :(得分:1)

我曾经从pandas DataFrame中保存.h5文件。尝试将complib='blosc'complevel=9添加到to_hdf()功能。这应该会减小文件大小。