18

パンダのHDFStoreから特定の列を取得するにはどうすればよいですか?私は定期的に、メモリ内で操作するには大きすぎる非常に大きなデータセットを処理します。csvファイルを繰り返し読み込み、各チャンクをHDFStoreオブジェクトに追加してから、データのサブセットを操作したいと思います。簡単なcsvファイルを読み込んで、次のコードを使用してHDFStoreにロードしました。

tmp = pd.HDFStore('test.h5')
chunker = pd.read_csv('cars.csv', iterator=True, chunksize=10, names=['make','model','drop'])
tmp.append('df', pd.concat([chunk for chunk in chunker], ignore_index=True))

そして出力:

In [97]: tmp
Out[97]:
<class 'pandas.io.pytables.HDFStore'>
File path: test.h5
/df     frame_table (typ->appendable,nrows->1930,indexers->[index])

私の質問は、どのようにして特定の列にアクセスするのtmp['df']ですか?select()ドキュメントには、メソッドといくつかのオブジェクトが記載されていTermます。提供されている例は、パネルデータに適用されます。ただし、私は初心者であり、より単純なデータフレームの場合に拡張することはできません。私の推測では、どういうわけか列のインデックスを作成する必要があります。ありがとう!

4

3 に答える 3

12

次のように、列のインデックスを使用してデータフレームを保存できます。

import pandas as pd
import numpy as np
from pandas.io.pytables import Term

index = pd.date_range('1/1/2000', periods=8)
df = pd.DataFrame( np.random.randn(8,3), index=index, columns=list('ABC'))  

store = pd.HDFStore('mydata.h5')
store.append('df_cols', df, axes='columns')

次に、必要に応じて選択します。

In [8]: store.select('df_cols', [Term('columns', '=', 'A')])
Out[8]: 
2000-01-01    0.347644
2000-01-02    0.477167
2000-01-03    1.419741
2000-01-04    0.641400
2000-01-05   -1.313405
2000-01-06   -0.137357
2000-01-07   -1.208429
2000-01-08   -0.539854

どこ:

In [9]: df
Out[9]: 
                   A         B         C
2000-01-01  0.347644  0.895084 -1.457772
2000-01-02  0.477167  0.464013 -1.974695
2000-01-03  1.419741  0.470735 -0.309796
2000-01-04  0.641400  0.838864 -0.112582
2000-01-05 -1.313405 -0.678250 -0.306318
2000-01-06 -0.137357 -0.723145  0.982987
2000-01-07 -1.208429 -0.672240  1.331291
2000-01-08 -0.539854 -0.184864 -1.056217

私にとって、これは理想的なソリューションではありません。DataFrameのインデックスを作成できるのは1つだけだからです。心配なことに、ドキュメントでは、少なくとも次を使用して、DataFrameにインデックスを付けることができるのは1つだけであると示唆しているようですaxes

ディメンションのリストとともにaxesキーワードを渡します(現在、オブジェクトの合計ディメンションよりも正確に1つ少ない必要があります)。

私はこれを間違って読んでいる可能性があります。その場合、誰かが私を間違っていると証明できることを願っています!

注:DataFrameに2つのインデックス(インデックスと列)でインデックスを付ける方法の1つは、それをPanelに変換することです。これにより、2つのインデックスを使用して取得できます。ただし、アイテムが取得されるたびに、選択したサブパネルをDataFrameに変換する必要があります...これも理想的ではありません。

于 2012-12-20T17:16:15.857 に答える