2017-12-28 14 views
1

私はpandas.read_hdfで、大きな(約10 GB)HDF5テーブルに読んでいます。私は一度にチャンクにアクセスできるようにiterator = Trueを使用しています(たとえば、chunkksize =一度に100,000行)。パンダread_hdf:chunkksizeまたはiteratorを使用するときに列名を取得する方法は?

は、どのように私はすべての列名または「キー」のリストを得るのですか?

また、どのようにpandas.read_tableのためのものと類似何get_chunk方法はありません来ますか?直接唯一の方法チャンクを反復される(「データでのチャンクのために: 『)、あなたは意志で異なる番号のチャンクにアクセスすることはできません(』データ[300]」)?

編集:私は最初のチャンクにアクセスした後破るループを備えたカラム名にアクセスできるように

が見える:

for i,v in enumerate(data): 
if i != 0: 
    break 
colnames = v.columns 

しかし、その後、私の2番目の質問はまだ残る:アクセスする方法はありませんTextFileReaderイテレータ(例えば、[0] read_table、または辞書のようなルックアップと、データのget_chunk方法を模倣する)、代わりにforループ上記奇妙単一の反復を行うパンダ上の個々の各チャンク?

答えて

1

あなたはHDFStoreとしてHDF5ファイルをロードしようとしたことがありますか?それはあなたが望むことをするかもしれないHDFStore.selectメソッドを使うことを可能にします(シークなどで)。 selectを使用すると、列のサブセットに対してのみ操作することができます。私にとっては、read_hdf機能よりも柔軟性があるように見えます。次は、限り、あなたはあなたのHDF5ファイルの構造を知っていると役立つかもしれません:あなたは、コンテキストマネージャとしてHDFStoreを開くことができます

store = pd.HDFStore('/path/to/file', 'r') 
colnames = store.select('table_key', stop=1).columns 

# iterate over table chunks 
chunksize = 100000 
chunks = store.select('table_key', chunksize=chunksize) 
for chunk in chunks: 
    ...code... 

# select 1 specific chunk as iterator 
chunksize = 100000 
start, stop = 300*chunksize, 301*chunksize 
this_chunk = store.select('table_key', start=start, stop=stop, iterator=True) 
do_work(this_chunk) 

store.close() 

注、例えば、

with pd.HDFStore('/path/to/file', 'r') as store: 
    ...code... 
+0

素晴らしい感謝! – quantumflash

関連する問題