2016-08-02 12 views
1

Pandasを使用してインデックスの付いた大きなHDF5テーブルを作成しました。私は私のテーブルの12の列のうち2つの列の名前を変更したいと思います。私はテーブルを再構築/再インデックス化したくないです。HDF5:既存のHDF5テーブルの列名を変更する方法はありますか?

すべてのデータ(140GB)をコピーせずにこれを行うことはできますか?私は、ファイルに右のコマンドで簡単にスワップアウトできるメタデータがほんの少しだけあることを期待しています。

私はいくつかの "自然でない"列名にスペースが含まれていて、これがselect文を実行しようとするまで問題ではないことを認識していなかったため、

+0

そこにそれを行うには、「公正」な方法はまだですが、[このジェフのハック]を使用することができます私の知る限りでは、(http://stackoverflow.com/a/32082953/5741205) – MaxU

+0

良いアイデア - インデックス付きのテーブルがあるため、おそらく私にとってはうまくいかないようです。私はJeffのハックに基づいて見つけられるすべての "attrs"メタデータを修正しました。私のために登場したいくつかの余分なフィールドを含みますが、 "select"はまだ新しいカラム名を認識しません。 s.get_storer( 'all')。table.colindexesを実行すると、列にはまだ古い名前が付けられていることがわかります。 – eraoul

+0

ええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええば出品者がいない場合は、また、[PyTablesの_f_rename()メソッド](http://www.pytables.org/usersguide/tutorials.html)をご覧ください。 – MaxU

答えて

1

私は現在、このよう(data_columnsに属する)インデックス付きの列の名前を変更する方法はありませんstorer.table.colindexes中とstorer.table.descriptionオブジェクトの変更を行うと、それらの両方は、特定のタイプがありますが必要になり怖い:

In [29]: store.get_storer('df').table 
Out[29]: 
/df/table (Table(10,)) '' 
    description := { 
    "index": Int64Col(shape=(), dflt=0, pos=0), 
    "a": Int32Col(shape=(), dflt=0, pos=1), 
    "b": Int32Col(shape=(), dflt=0, pos=2), 
    "c": Int32Col(shape=(), dflt=0, pos=3)} 
    byteorder := 'little' 
    chunkshape := (3276,) 
    autoindex := True 
    colindexes := { 
    "a": Index(6, medium, shuffle, zlib(1)).is_csi=False, 
    "index": Index(6, medium, shuffle, zlib(1)).is_csi=False, 
    "c": Index(6, medium, shuffle, zlib(1)).is_csi=False, 
    "b": Index(6, medium, shuffle, zlib(1)).is_csi=False} 

In [30]: type(store.get_storer('df').table.colindexes) 
Out[30]: tables.table._ColIndexes 

In [31]: type(store.get_storer('df').table.description) 
Out[31]: tables.description.Description 

PyTablesのソリューションをgoogleにしようとすると、この質問がありますが、列の名前を変更できる答えがありませんでした。

だから、あなたはHDF5ファイル(複数可)を再作成することもできます

+0

はい、私は同じ結論に達しましたが、これがPyTablesやHDF5の制限であるかどうか知りたいのですが、今のところそれは唯一の解決策のようですファイルを再作成することです。 – eraoul

関連する問題