检查pandas HDFStore中的PyTables节点是否为表格式

时间:2013-10-25 18:25:01

标签: pandas pytables hdfstore

是否有一种首选的方法来检查pandas HDFStore中的PyTables节点是否为表格式?这有效,但NoSuchNodeError似乎不是API的一部分,所以也许我不应该依赖它。

In [34]: from tables.table import NoSuchNodeError

In [35]: def is_tabular(store, key):
    try:
        store.get_node(key).table
    except NoSuchNodeError:
        return False
    return True
   ....: 

In [36]: is_tabular(store, 'first_600')
Out[36]: False

In [37]: is_tabular(store, 'features')
Out[37]: True

1 个答案:

答案 0 :(得分:2)

你可以这样做。 pandas_type,table_type元数据将出现在节点顶层的pytables属性_v_attrs中。

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

In [29]: store.append('df',DataFrame(np.random.randn(10,2),columns=list('AB')))

In [30]: store
Out[30]: 
<class 'pandas.io.pytables.HDFStore'>
File path: test.h5
/df            frame_table  (typ->appendable,nrows->10,ncols->2,indexers->[index])

In [31]: store._handle.root.df._v_attrs
Out[31]: 
/df._v_attrs (AttributeSet), 14 attributes:
   [CLASS := 'GROUP',
    TITLE := u'',
    VERSION := '1.0',
    data_columns := [],
    encoding := None,
    index_cols := [(0, 'index')],
    info := {1: {'type': 'Index', 'names': [None]}, 'index': {}},
    levels := 1,
    nan_rep := 'nan',
    non_index_axes := [(1, ['A', 'B'])],
    pandas_type := 'frame_table',
    pandas_version := '0.10.1',
    table_type := 'appendable_frame',
    values_cols := ['values_block_0']]

In [33]: getattr(getattr(getattr(store._handle.root,'df',None),'_v_attrs',None),'pandas_type',None)
Out[33]: 'frame_table'

In [34]: store.close()

In [35]: