Pandas multiindex 和 pytables...单独的索引还是一个连接的索引?

Pandas multiindex and pytables... separate indexes or one concatenated index?

数据帧通过pytables保存到HDF5时,HDF5上的一个pandas multiindex是什么结构?每个部分是单独的索引还是有一个连接的索引?

它的存储方式几乎与 df.reset_index() 完全相同,只是您会自动将索引列作为数据列获取(这意味着您可以 select 它们)。

In [1]: df = DataFrame({'A' : np.random.randn(9)},index=pd.MultiIndex.from_product([range(3),list('abc')],names=['first','second']))

In [2]: df
Out[2]: 
                     A
first second          
0     a      -1.249058
      b      -0.674645
      c      -0.000458
1     a       0.455390
      b      -1.693221
      c       1.245806
2     a       0.337478
      b       0.672525
      c       0.160914

In [3]: store = pd.HDFStore('test.h5',mode='w')

In [4]: store.append('df',df)

In [5]: store           
Out[5]: 
<class 'pandas.io.pytables.HDFStore'>
File path: test.h5
/df            frame_table  (typ->appendable_multi,nrows->9,ncols->3,indexers->[index],dc->[second,first])

这是实际结构的样子。

In [7]: store.get_storer('df').table
Out[7]: 
/df/table (Table(9,)) ''
  description := {
  "index": Int64Col(shape=(), dflt=0, pos=0),
  "values_block_0": Float64Col(shape=(1,), dflt=0.0, pos=1),
  "second": StringCol(itemsize=1, shape=(), dflt='', pos=2),
  "first": Int64Col(shape=(), dflt=0, pos=3)}
  byteorder := 'little'
  chunkshape := (2621,)
  autoindex := True
  colindexes := {
    "index": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "second": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "first": Index(6, medium, shuffle, zlib(1)).is_csi=False}

Select 级别名称

In [9]: store.select('df',where='second="b"')
Out[9]: 
                     A
first second          
0     b      -0.674645
1     b      -1.693221
2     b       0.672525

In [10]: store.select('df',where='second="b" & first=2')
Out[10]: 
                     A
first second          
2     b       0.672525