0

私はいくつかの問題を引き起こす hdf5 データベースを持っています。

これには、6 つの列 (整数と浮動小数点数) とインデックス (日付) と可変数の行 (100 から 10,000,000) を持つ 3,000 のテーブルが含まれている必要があります。

昨日から、ViTables を使用してデータベースを「見る」と、何千ものテーブルが見落とされています。ViTablesでそれらを見ることができました。しかし、データはまだそこにあります。Pandas からアクセスできます。

データは次のように編成されます。type/source/id

たとえば、次を使用して id1 と id2 の両方を取得できます。

 with pd.get_store(HDF_DATABASE) as store:
     print store['type1/source1/id1']
     print store['type2/source2/id2']

しかし、ViTables からは、私は見ることができませんtype2/source2/id2

さらに、リストしますが、> print storeリストtype1/source1/id1しませんtype2/source2/id2

これらの「見えない」データテーブルを修正する方法について何かアドバイスはありますか?

編集:

  • タイプミス
  • Windows 7 32 ビット / Python 2.7.5 / Pandas 0.12.0 (および過去のその他のバージョン)
  • ptdump ファイル: http://pastebin.com/7mB6bT2T
  • ご想像のとおり、型ソース ID を難読化しました
  • データはもう参照されていないように見えますが、データベースがptrepackされていない限り、まだそこにあります。

EDIT2:

  • 元のデータベースを完全に失いました。もうアクセスできません。フォーマットが認識されなくなりました。
  • 新しいデータを挿入するために使用されるこのステートメント (および同様の他のステートメント) は、NaturalNameWarning警告を返します: store.append('equity/bloomberg/4615238QCN_Equity', df). 警告を生成する Natural Naming 要件を尊重していません。これは、発生した問題に関連している可能性があります。
4

1 に答える 1

0

サンプルセッション

In [1]: store = pd.HDFStore('test.h5')

In [2]: store['node()'] = Series(np.arange(10))
/usr/local/lib/python2.7/site-packages/tables/path.py:99: NaturalNameWarning: object name is not a valid Python identifier: 'node()'; it does not match the pattern ``^[a-zA-Z_][a-zA-Z0-9_]*$``; you will not be able to use natural naming to access this object; using ``getattr()`` will still work, though
  NaturalNameWarning)

In [3]: store
Out[3]: 
<class 'pandas.io.pytables.HDFStore'>
File path: test.h5
/df                frame_table  (typ->appendable,nrows->11,ncols->2,indexers->[index],dc->[A,B])
/node()            series       (shape->[10])                                                   

In [4]: store.keys()
Out[4]: ['/df', '/node()']

In [5]: store['node()/foo'] = Series(np.arange(10))

In [6]: store.keys()
Out[6]: ['/df', '/node()', '/node()/foo']

In [7]: store
Out[7]: 
<class 'pandas.io.pytables.HDFStore'>
File path: test.h5
/df                    frame_table  (typ->appendable,nrows->11,ncols->2,indexers->[index],dc->[A,B])
/node()                series       (shape->[10])                                                   
/node()/foo            series       (shape->[10])                                                   

In [8]: store['my_type\mysource\id_01_01'] = Series(np.arange(10))
/usr/local/lib/python2.7/site-packages/tables/path.py:99: NaturalNameWarning: object name is not a valid Python identifier: 'my_type\\mysource\\id_01_01'; it does not match the pattern ``^[a-zA-Z_][a-zA-Z0-9_]*$``; you will not be able to use natural naming to access this object; using ``getattr()`` will still work, though
  NaturalNameWarning)

In [9]: store
Out[9]: 
<class 'pandas.io.pytables.HDFStore'>
File path: test.h5
/df                                   frame_table  (typ->appendable,nrows->11,ncols->2,indexers->[index],dc->[A,B])
/my_type\mysource\id_01_01            series       (shape->[10])                                                   
/node()                               series       (shape->[10])                                                   
/node()/foo                           series       (shape->[10])                                                   

In [10]: store.keys()
Out[10]: ['/df', '/my_type\\mysource\\id_01_01', '/node()', '/node()/foo']

In [11]: store['my_type/mysource/id_01_01'] = Series(np.arange(10))

In [12]: store
Out[12]: 
<class 'pandas.io.pytables.HDFStore'>
File path: test.h5
/df                                   frame_table  (typ->appendable,nrows->11,ncols->2,indexers->[index],dc->[A,B])
/my_type\mysource\id_01_01            series       (shape->[10])                                                   
/node()                               series       (shape->[10])                                                   
/node()/foo                           series       (shape->[10])                                                   
/my_type/mysource/id_01_01            series       (shape->[10])                                                   

問題は、識別子 'my_type\mysource\id_01_01` が思ったとおりに動作せず、ファイル パスのように見えることです。スラッシュではなく、バックスラッシュが必要です (アーキテクチャに依存するため)。理論的にはこれでうまくいきます (ただし、警告を避けるために、これらの名前を変更することをお勧めします)。

于 2013-10-08T15:17:25.417 に答える