我想限制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
我希望在文档中提到异常。
答案 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: