获取 pandas HDF5 查询中的最后一行
Get last row in pandas HDF5 query
我正在尝试获取存储在 HDF5 中的 pandas 数据帧的最后一行的索引,而不必将整个数据集或索引拉入内存。我正在寻找这样的东西:
from pandas import HDFStore
store = HDFStore('file.h5')
last_index = store.select('dataset', where='index == -1').index
除了在我的例子中最后一个索引不是 -1
而是 Timestamp
最后一个索引应该是
last_index = store['dataset'].index[-1]
使用像位置索引器一样工作的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
我 运行 遇到了这个问题,接受的答案似乎需要做很多工作才能得到最后一行(这应该很简单)。通过一些思考,我找到了一些更简洁的东西(对我来说)
设置数据
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" 文件,特别是使用 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
这很有用,因为在处理 HDFStore
时需要用 try, except, finally
完成大量跑腿工作,而利用 on-disk 阅读方法可以绕过软件工程阶段的这些额外要求。
我正在尝试获取存储在 HDF5 中的 pandas 数据帧的最后一行的索引,而不必将整个数据集或索引拉入内存。我正在寻找这样的东西:
from pandas import HDFStore
store = HDFStore('file.h5')
last_index = store.select('dataset', where='index == -1').index
除了在我的例子中最后一个索引不是 -1
而是 Timestamp
最后一个索引应该是
last_index = store['dataset'].index[-1]
使用像位置索引器一样工作的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
我 运行 遇到了这个问题,接受的答案似乎需要做很多工作才能得到最后一行(这应该很简单)。通过一些思考,我找到了一些更简洁的东西(对我来说)
设置数据
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" 文件,特别是使用 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
这很有用,因为在处理 HDFStore
时需要用 try, except, finally
完成大量跑腿工作,而利用 on-disk 阅读方法可以绕过软件工程阶段的这些额外要求。