2

我将所有数据都放入 HDFStore(是的!),但是如何从中取出它..

我在 HDFStore 中将 6 个 DataFrames 保存为 frame_table。这些表中的每一个都如下所示,但长度各不相同(日期为儒略日期)。

>>> a = store.select('var1')
>>> a.head()
                      var1
x_coor y_coor date         
928    310    2006257   133
932    400    2006257   236
939    311    2006257   253
941    312    2006257   152
942    283    2006257    68

然后我从所有表格中选择日期为例如 > 2006256 的值。

>>> b = store.select_as_multiple(['var1','var2','var3','var4','var5','var6'], where=(pd.Term('date','>',date)), selector= 'var1')
>>> b.head()
                      var1   var2  var3  var4  var5  var6
x_coor y_coor date                                        
928    310    2006257   133  14987  7045    18   240   171
              2006273   136      0  7327    30   253   161
              2006289   125      0  -239    83   217   168
              2006305    95  14604  6786    13   215    57
              2006321    84      0  4548    13   133    88

这有效,但仅适用于相对较小的 .h5 文件。因此,对于我的普通 .h5 文件,我想使用 chunksize 将其临时存储在 HDFStore 中(因为我还必须根据此选择添加一个新列)。我是这样想的(使用this):

for df in store.select_as_multiple(['var1','var2','var3','var4','var5','var6'], where=(pd.Term('date','>',date)), selector= 'var1', chunksize=15):
    tempstore.put('test',pd.DataFrame(df))

但是只有一个块被添加到存储中。但是有:

tempstore.append('test',pd.DataFrame(df))

我得到 ValueError: Can only append to Tables。我做错了什么?

4

1 回答 1

5

当您尝试这样做时,put它会一直覆盖存储(使用最新的块),然后在追加时会出现错误(因为您不能追加到存储/非表)。

那是:

  • put编写一个单一的、不可附加的固定格式(称为 a storer),它的编写速度很快,但你不能附加,也不能查询(只能完整地获取它)。

  • append创建一种table格式,这就是您在此处想要的(以及 aframe_table是什么)。

注意:您不需要这样做pd.DataFrame(df),因为df它已经是一个框架。

所以,如果它在那里,首先这样做(删除商店):

if 'test' in tempstore:
    tempstore.remove('test')

然后附加每个 DataFrame:

for df in store.select_as_multiple(.....):
     tempstore.append('test', df)
于 2013-07-11T11:35:32.767 回答