您应该如何使用`HDFStore.append`的`min_itemsize`参数?

时间:2019-01-14 01:49:14

标签: python pandas hdf5

我想限制HDF存储区中字符串列的大小。您应该使用min_itemsize进行此操作。该文档指出:

  

最小项目大小

     

HDFStore的基础实现使用固定的列宽   (itemsize)用于字符串列。计算一个字符串列的项目大小   作为所传递数据(针对该列)的最大长度   HDFStore中的第一个附件。随后的附录,可能   为比该列可容纳的列大的列引入一个字符串   将会引发异常(否则您可能会被静音截断   这些列,导致信息丢失)。将来我们   可能会放松这一点,并允许用户指定截断。

     

在第一次创建表时将min_itemsize传递给a-priori,指定   特定字符串列的最小长度。 min_itemsize可以是   整数,或将列名映射到整数的字典。你

http://pandas.pydata.org/pandas-docs/stable/io.html#string-columns

好的,所以当我这样做时,我得到了意外的结果。我在这里将min_itemsize设置为1。这应将所有字符串列设置为1个字符串。但事实并非如此。为什么?我对文档有什么误解?

store = pd.HDFStore('store.h5', mode='w', format='table', complevel=9,
                    complib='blosc:lz4')

values = [['a', 'b'], ['aa', 'bb'], ['aaa', 'bbb']]
columns = ['A', 'B'] 
data = pd.DataFrame(values, columns=columns)

store.append('df', data, min_itemsize=1)

print(store.df)
store.close()

     A    B
0    a    b
1   aa   bb
2  aaa  bbb

我希望在文档中提到异常。

1 个答案:

答案 0 :(得分:0)

该列的大小似乎将设置为附加在第一个DataFrame或max_itemsize中的最大值,以较大者为准。 pytables.py代码对该逻辑有一些引用:

itemsize = max(1, libwriters.max_len_string_array(ensured))

itemsize = max(min_itemsize or 0, itemsize)

if min_itemsize is not None and self.typ.itemsize < min_itemsize: