我是Saddle(saddle.github.io)的作者,它提供了与pandas精神相似的功能(但在JVM上的Scala中).我正在努力确保pandas的DataFrame的HDF5序列化格式与Saddle的可互操作.我目前正在Saddle中实现字符串数组序列化.所以我的问题是pandas DataFrame如何序列化字符串.如果我在pandas中创建一个HDF5文件,如下所示:
from pandas import *
h = HDFStore('tmp.h5')
f = DataFrame({0: [1,2,3], 1: ["a", "b", "c"], 2: [1.5, 2.5, 3.5]})
h.put("f1", f)
h.close()
Run Code Online (Sandbox Code Playgroud)
并且h5dump生成的tmp.h5文件,我看到字符串块(block2_values)存储为数据类型H5T_VLEN和属性
ATTRIBUTE "CLASS" {
DATATYPE H5T_STRING {
STRSIZE 8;
STRPAD H5T_STR_NULLTERM;
CSET H5T_CSET_ASCII;
CTYPE H5T_C_S1;
}
DATASPACE SCALAR
DATA {
(0): "VLARRAY"
}
}
Run Code Online (Sandbox Code Playgroud)
这暗示了一个ASCII字符集; 但是,我看到的编码字节似乎与ASCII不对应(即"a","b","c").另外,我很好奇STRSIZE 8的来源.任何人都可以了解通过pandas - > pytables - > hdf5发生的字符串序列化的实现细节吗?(我也很满意pandas/pytables中的代码指针,我可以开始深入挖掘:)