Pandas HDFStore:改变索引的dtype

时间:2014-11-18 18:30:26

标签: python types pandas pytables hdfstore

使用HDFStore.append时是否存在控制用于存储数据帧索引的数据类型的方法?

似乎pandas索引总是在hdf5文件中以64位存储。我想提高存储效率并减小索引列的大小。

我有一个独特的3列多索引并保存它们,因为uint64索引在我的应用程序中浪费了大量空间:

给出以下数据框

In [15]: df.dtypes
Out[15]: indA              int32
indB              int16
indC              int8
data              float32
dtype: object

只需在df.set_index(['indA', 'indB', 'indC'])之前设置HDFStore.append,就会导致indAindBindC在hdf5文件中存储为Int64Col

不设置pandas索引并指定pytables数据列:

store.append('mytable', df, data_columns=['indA', 'indB', 'indB'])

indAindBindC与原始dtypes一起存储,但hdf5文件中还存储了Int64Col

这实际上没有帮助:通过存储在原始dtypes中,我保存/保存了三个ind列的56位。然而,额外的(多余的)索引列需要64位......

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你的方法是正确的。数据列提供搜索功能并提供dtype保留。索引存储目前相当固定。

提供存储索引的选项是一个悬而未决的问题,请参阅here。我已经做了一些工作,但它不是高优先级的ATM。欢迎你来看看。

想要缩小存储空间的通常答案是使用压缩。你好像通过很多箍跳来节省相对少量的存储空间,但这就是my2c。