4

巨大な hdf5 からデータのサブセットを毎日選択したいと思います。where maskを使用するのは完璧ですが、マルチインデックスで機能させることはできません (2 つの条件で where を使用する必要があるため)。multiindex で where マスクを使用することはできません:

import itertools
import pandas as pd
import numpy as np
a = ('A', 'B')
i = (0, 1, 2)
idx = pd.MultiIndex.from_tuples(list(itertools.product(a, i)),
                            names=('Alpha', 'Int'))
df = pd.DataFrame(np.random.randn(len(idx), 7), index=idx,
              columns=('I', 'II', 'III', 'IV', 'V', 'VI', 'VII'))

ここに画像の説明を入力

わかりました、今私はそれをhdfストアに入れました

from pandas.io.pytables import HDFStore
store =HDFStore('cancella.h5', 'w')
store.append('df_mask',df)

でも、もう一度読んだら、

c = store.select_column('df_mask','index')
print c

このインデックスは間違っています。

0    0
1    1
2    2
3    3
4    4
5    5
dtype: int64

そのため、 where maskは使用できません。手伝って頂けますか?

4

4 に答える 4

0

to_hdf(pytablesをインストールした後)Pandasを使用してみましたか?

df.to_hdf('/Users/Alexander/Downloads/hdf.h5', key='data', format='t')

>>> pd.read_hdf('/Users/Alexander/Downloads/hdf.h5', 'data', columns='index')
Empty DataFrame
Columns: []
Index: [(A, 0), (A, 1), (A, 2), (B, 0), (B, 1), (B, 2)]

format='t' オプションの選択:

「パフォーマンスが低下する可能性がありますが、データのサブセットの検索/選択などのより柔軟な操作を可能にする PyTables テーブル構造として記述します」

whereこのドキュメントでは、マスクを使用してデータを選択する方法について詳しく説明します。

于 2015-07-11T16:25:39.323 に答える
0

これはあなたの質問とは直交しているかもしれませんが、「インデックス」と呼ばれるデータフレームに列またはインデックスが表示されないため、実際に何を選択しているのかわかりません

c = store.select_column('df_mask','index')

私は常にread_hdfラッパーを使用して PyTable を処理しており、非常に柔軟であることがわかりました。その構文は非常に柔軟です。

c = pd.read_hdf('/home/Jian/Downloads/temp.h5', 'df_mask', where="Alpha='A' | Alpha='B' & Int=0")

where句の条件の数には確固たる制限がありますが、質問を正しく読んでいれば、それはあなたにとって2番目の問題になるでしょう。

于 2015-07-23T22:04:55.533 に答える
0

これは、パンダがreset_indexテーブルを配置する前にHDF5(データフレームでは許可されているが、データベースには非常に悪い、重複する可能性のあるインデックスを回避しようとしている可能性があるため)、整数の自動インクリメントされた主キーをインデックスとして使用するためだと思いますHDF5テーブル。したがって、投稿で書いたコードは、これらの自動インクリメントされた主キーを選択します。

他にももっとエレガントなアプローチがあるかもしれませんが、私は次の作品を見つけました。(パンダが実際reset_indexに結果として、マルチレベルのインデックスが列になるようになりました...)

import itertools
import pandas as pd
import numpy as np
a = ('A', 'B')
i = (0, 1, 2)
idx = pd.MultiIndex.from_tuples(list(itertools.product(a, i)),
                            names=('Alpha', 'Int'))
df = pd.DataFrame(np.random.randn(len(idx), 7), index=idx,
              columns=('I', 'II', 'III', 'IV', 'V', 'VI', 'VII'))
print(df)

store = pd.HDFStore('/home/Jian/Downloads/temp.h5')
store.append('df_mask',df)

store.select('df_mask', columns=['Alpha','Int'])

ここに画像の説明を入力

于 2015-07-11T14:25:42.627 に答える