我想从h5文件中只读取10个行:
df = pd.read_hdf('data.h5', 'cleanuserbase', start=0, stop=10)
但这不起作用,因为它会读取所有行。
答案 0 :(得分:1)
仅当您的对象是表格格式(而不是fixed format)时才有效。
In [11]: df = pd.DataFrame(np.random.randn(100, 2))
In [12]: store = pd.HDFStore('store.h5')
In [13]: df.to_hdf("store.h5", "df", format="table")
In [14]: store.select("df", "index < 2")
Out[14]:
0 1
0 -0.245982 -1.047534
1 -0.633943 -1.218812
In [15]: pd.read_hdf("store.h5", "df", start=0, stop=2) # works if non-integer index
Out[15]:
0 1
0 -0.245982 -1.047534
1 -0.633943 -1.218812
请参阅文档中的table format。
如果您的表格是固定格式,则只能整体阅读(但可能是this should raise):
In [21]: df.to_hdf("store.h5", "fixed_df", format="fixed")
In [22]: pd.read_hdf("store.h5", "fixed_df", start=0, stop=2)
Out[22]:
0 1
0 2.532604 -0.084852
1 0.735833 -1.100600
2 -0.415245 -2.050627
3 -0.915045 -0.638667
... # and all the other rows
答案 1 :(得分:1)
这不适用于fixed
商店ATM(但适用于table
商店,请参阅Andy的回答),请参阅未解决的问题here
也就是说,商店本身确实支持索引。它只是没有建成。这是在窥视内部。
In [35]: df = DataFrame(np.random.randn(10,2),columns=list('ab'))
In [36]: store = pd.HDFStore('test.h5',mode='w')
In [37]: store.put('df',df)
In [38]: store
Out[38]:
<class 'pandas.io.pytables.HDFStore'>
File path: test.h5
/df frame (shape->[10,2])
In [39]: mask = slice(4,10)
In [40]: s = store.get_storer('df').storable
In [41]: DataFrame(s.block0_values[mask],index=s.axis1[mask],columns=s.axis0)
Out[41]:
axis0 a b
4 -1.347325 -0.936605
5 -0.342814 -0.452055
6 0.951228 0.160918
7 -0.096133 0.816032
8 -0.731431 1.190047
9 -1.050826 0.348107
In [42]: store.close()
我认为这可能会引发NotImplementedError
,直到此问题得到解决。