PandasSeries
、DataFrames
、およびPanels
をHDF5ファイルに保存する方法の例を以下に示します。
In [1142]: store = HDFStore('store.h5')
In [1143]: index = date_range('1/1/2000', periods=8)
In [1144]: s = Series(randn(5), index=['a', 'b', 'c', 'd', 'e'])
In [1145]: df = DataFrame(randn(8, 3), index=index,
......: columns=['A', 'B', 'C'])
......:
In [1146]: wp = Panel(randn(2, 5, 4), items=['Item1', 'Item2'],
......: major_axis=date_range('1/1/2000', periods=5),
......: minor_axis=['A', 'B', 'C', 'D'])
......:
In [1147]: store['s'] = s
In [1148]: store['df'] = df
In [1149]: store['wp'] = wp
In [1150]: store
Out[1150]:
<class 'pandas.io.pytables.HDFStore'>
File path: store.h5
/df frame (shape->[8,3])
/s series (shape->[5])
/wp wide (shape->[2,5,4])
In [1151]: store.close()
上記のコードでは、データが実際にディスクに書き込まれるのはいつですか?
.csv
ファイルに存在する何千もの大きなデータフレームを単一の.h5
ファイルに追加したいとします。cannotは、すべてを一度にメモリに保存する余裕があるため、それらをロードして.h5
ファイルに1つずつ追加する必要があります。メモリが多すぎます。これはHDF5で可能ですか?それを行う正しい方法は何でしょうか?
Pandasドキュメントには次のように書かれています:
「これらのストアは追加できません一度書き込んだ(単に削除して書き直しただけですが)queryableでもありません;それらは完全に取得する必要があります。」
追加もクエリもできないとはどういう意味ですか?また、writtenの代わりにclosedと言ってはいけませんか?
ステートメントが実行されるとすぐに、たとえばstore['df'] = df
。 close
は、実際のファイルを閉じるだけです(プロセスが存在する場合は閉じられますが、警告メッセージが出力されます)
セクションを読む http://pandas.pydata.org/pandas-docs/dev/io.html#storing-in-table-format
一般に、多くのノードを.h5
ファイルに入れることはお勧めできません。おそらく、より少ない数のノードを追加して作成する必要があります。
.csv
とstore/append
を1つずつ繰り返すことができます。何かのようなもの:
for f in files:
df = pd.read_csv(f)
df.to_hdf('file.h5',f,df)
一方向になります(ファイルごとに個別のノードを作成します)
追加できません-一度作成すると、一度にすべてを取得することしかできません。サブセクションは選択できません
テーブルがある場合は、次のようなことができます。
pd.read_hdf('my_store.h5','a_table_node',['index>100'])
これはデータベースクエリのようなもので、データの一部のみを取得します
したがって、テーブルは両方であるのに対し、ストアは追加もクエリもできません。
質問2に答えると、pandas 0.18.0で、次のことができます。
store = pd.HDFStore('compiled_measurements.h5')
for filepath in file_iterator:
raw = pd.read_csv(filepath)
store.append('measurements', raw, index=False)
store.create_table_index('measurements', columns=['a', 'b', 'c'], optlevel=9, kind='full')
store.close()
this ドキュメントの一部に基づいています。
持っているデータの量によっては、インデックスの作成で膨大な量のメモリが消費される可能性があります。 PyTablesのドキュメントでは、 optlevel の値について説明しています。