質問: pandas HDFStore オブジェクトで複数の列を反復できるジェネレーターを作成するにはどうすればよいですか?
pandas HDFStore オブジェクトのラッパー クラスを作成しようとしています。私が実装しようとしている機能の 1 つは、特定のチャンクサイズで HDFStore 内の列のグループを反復処理する機能です。多くの機械学習アルゴリズムは動作可能on-line
で、すべてのデータを一度に必要とするわけではありません。
私の最初の試みは、ジェネレーター関数を作成し、HDFStore の select メソッドに start および stop 引数を渡すことでした。
def iterate(self, key, chunksize=50000):
node = self.store.get_node(key)
nrows = node.table.nrows
current = 0
while current < nrows:
yield self.store.select(key, start=current, stop=current+chunksize)
current += chunksize
これは正常に機能し、ストアに格納されている単一の列を反復処理できます。テストのために、すべての列を独自のテーブルに格納していることに注意してください。
私の次のステップは、 を使用して、この概念を複数のテーブルから複数の列に拡張することでしたHDFStore.select_as_multiple
。docstring にはありませんがselect_as_multiple
、start および stop 引数も受け入れるようです。
>>> store.select_as_multiple(keys='MachineID', start=0, stop=50000)
<class 'pandas.core.frame.DataFrame'>
Int64Index: 50000 entries, 0 to 49999
Data columns:
MachineID 50000 non-null values
dtypes: int64(1)
要求どおり、50,000 行のみが返されました。ただし、複数のキー/列を渡すと、メソッドはすべての行を引き戻します。
>>> store.select_as_multiple(keys=['MachineID','YearMade'], start=0, stop=50000)
<class 'pandas.core.frame.DataFrame'>
Int64Index: 401125 entries, 0 to 1124
Data columns:
MachineID 401125 non-null values
YearMade 401125 non-null values
dtypes: int64(2)
select_as_multiple
すべての行ではなく、指定した範囲の行を引き戻すために使用することはできますか?
バージョン情報:
>>> pd.__version__
'0.10.1'
>>> tables.__version__
'2.4.0'