获取pandas HDF5查询的最后一行

时间:2015-05-28 19:33:26

标签: python pandas hdf5

我试图获取存储在HDF5 中的pandas数据帧的最后一行的索引,而不必将整个数据集或索引拉入内存。我正在寻找这样的东西:

silentScroll

除了我的情况,最后一个索引不会是from pandas import HDFStore store = HDFStore('file.h5') last_index = store.select('dataset', where='index == -1').index 而是-1

3 个答案:

答案 0 :(得分:6)

使用start=stop=参数,它们的作用类似于位置索引器

In [8]: df = DataFrame({'A' : np.random.randn(10000)},index=pd.date_range('20130101',periods=10000,freq='s'))

In [9]: store = pd.HDFStore('test.h5',mode='w')

In [10]: store.append('df',df)

In [11]: nrows = store.get_storer('df').nrows

In [12]: nrows
Out[12]: 10000

In [13]: store.select('df',start=nrows-1,stop=nrows)
Out[13]: 
                            A
2013-01-01 02:46:39 -0.890721

In [15]: df.iloc[[-1]]
Out[15]: 
                            A
2013-01-01 02:46:39 -0.890721

答案 1 :(得分:0)

最后一个索引应为

last_index  = store['dataset'].index[-1]

答案 2 :(得分:0)

我遇到了这个问题,接受的答案似乎是要做最后一行(这应该是直截了当的)。通过一些重复,我能够找到一些感觉更简洁的东西(对我而言)

设置数据

In [8]: df = DataFrame({'A' : np.random.randn(10000)},
                        index=pd.date_range('20130101',
                        periods=10000,freq='s'))

In [9]: store = pd.HDFStore('test.h5',mode='w')

In [10]: store.append('df',df)

实际上,可以使用以下语法拉取最后一行(并确定索引):

拉最后一行(使用start=-1

In [11]: store.select('df',start=-1)
                            A
2013-01-01 02:46:39 -0.890721

In [15]: df.iloc[[-1]]
Out[15]: 
                            A
2013-01-01 02:46:39 -0.890721

On Disk Reading

我喜欢这种形式的数据收集的另一个原因是可以使用相同的语法来读取" on-disk"文件,特别是使用pd.read_hdf

In [16]: s = "path/to/hdfstore/above"
In [17]: pd.read_hdf(s, start=-1)
Out[15]: 
                            A
2013-01-01 02:46:39 -0.890721

这很有用,因为在处理try, except, finally时需要使用HDFStore完成大量的工作,并且利用磁盘读取方法可以绕过软件工程阶段的额外要求。