2017-11-07 12 views
1

私は、各グループ内に複数のグループとデータセットを持つ、入れ子になったhdf5ファイルにPandasデータフレームからデータを書き込もうとしています。私はそれを日常的に将来的に成長する単一のファイルとして保持したいと思います。私は、入れ子構造が作成されたPandas DataframeをHDF5データセットに書き込む方法

import h5py 
import numpy as np 
import pandas as pd 

file = h5py.File('database.h5','w') 

d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']), 
    'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])} 

df = pd.DataFrame(d) 

groups = ['A','B','C']   

for m in groups: 

    group = file.create_group(m) 
    dataset = ['1','2','3'] 

    for n in dataset: 

     data = df 
     ds = group.create_dataset(m + n, data.shape) 
     print ("Dataset dataspace is", ds.shape) 
     print ("Dataset Numpy datatype is", ds.dtype) 
     print ("Dataset name is", ds.name) 
     print ("Dataset is a member of the group", ds.parent) 
     print ("Dataset was created in the file", ds.file) 

     print ("Writing data...") 
     ds[...] = data   

     print ("Reading data back...") 
     data_read = ds[...] 

     print ("Printing data...") 
     print (data_read) 

file.close(

この方法を達成したいものの構造を示し、次のコードで行くを持っていたが、それは、インデックスと列を失います。私は、私は、誰もがいくつかの光を当てることができますしてください。このエラー

AttributeError: 'Dataset' object has no attribute 'split'

を取得し、

df.to_hdf('database.h5', ds, table=True, mode='a') 

を試みたが、うまくいきませんでした。多くのおかげで

+0

のように、今後、すなわち操作で巨大になり、特定のグループからのデータを取得するための効率的な方法であるかどうかを疑問に思っても 'pandas'はhdf5'ファイル'にデータフレームを書き込むために、 'pytables'を使用しています。これらのファイルを 'h5py'で探しているので、ご質問があります。レイアウトは複雑ですが、それは不可能ではないことを思い出してください。 'h5py'は' hdf5'に本質的に 'numpy' iterfaceです。 – hpaulj

+0

https://stackoverflow.com/questions/41173254/how-should-i-use-h5py-lib-for-storing-time-series-data – hpaulj

答えて

1

df.to_hdf()keyパラメータ(第2パラメータ)として文字列を期待:

key : string

identifier for the group in the store

ので、これを試してみてください。

df.to_hdf('database.h5', ds.name, table=True, mode='a') 
ds.nameはあなたの文字列(キー名)を返す必要があり

In [26]: ds.name 
Out[26]: '/A1' 
+0

このソースは 'pytables.to_hdf'を呼び出します。 – hpaulj

+0

@hpaulj、はい、それは 'pandas.io.pytables.to_hdf()'を呼びますが、あなたが何を言っているか/表示したいのか分かりません... – MaxU

+0

@MaxU私はds.nameをキーはまだ列とインデックスを失い、さらに0を返します。 – AleVis

0

pandas \ pytablesとh5pyの代わりにHDFStoreクラスを使用します。だから私は、それが動作する以下の

import numpy as np 
import pandas as pd 

db = pd.HDFStore('Database.h5') 

index = pd.date_range('1/1/2000', periods=8) 

df = pd.DataFrame(np.random.randn(8, 3), index=index, columns=['Col1', 'Col2', 'Col3']) 

groups = ['A','B','C']  

i = 1  

for m in groups: 

    subgroups = ['d','e','f'] 

    for n in subgroups: 

     db.put(m + '/' + n, df, format = 'table', data_columns = True) 

をしようとしたA/DからC/Fに作成された9グループ(代わりに代わりh5py FO pyatbles内のデータセットのグループ?)。列とインデックスは保持され、必要なデータフレーム操作を実行できます。それでも、これは

db['A/d'].Col1[4:] 
+0

こんにちは。私たちのコミュニティの多くの人々は、ソフトウェアエンジニアに関するジェンダーの前提を見るたびに、排除されていると感じる人々を心配していると言います。私は、より歓迎的な環境のために、あなたの投稿に男性指向の挨拶と代名詞を追加することを避けることができますか?ありがとうございました。 – halfer

関連する問題