这是我从问题页面复制的回答:https://github.com/pydata/pandas/issues/3651
你提供的样本实在太小了。对于非常小的尺寸(即使300k条目),HDF5都有相当多的开销。以下内容是在任意一侧均不压缩的情况下。浮点数在二进制中表示更高效(而不是文本表示)。
此外,HDF5是基于行的。如果表不太宽但是相当长,则可以获得更高的效率。(因此,在这种情况下,将示例转置存储并不是很有效)我经常拥有超过10M行的表格,并且查询时间可以在毫秒内完成。即使下面的示例很小,拥有10GB以上的文件也很常见(更不用说天文学家们的10GB +只需几秒钟!)
-rw-rw-r-- 1 jreback users 203200986 May 19 20:58 test.csv
-rw-rw-r-- 1 jreback users 88007312 May 19 20:59 test.h5
In [1]: df = DataFrame(randn(1000000,10))
In [9]: df
Out[9]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1000000 entries, 0 to 999999
Data columns (total 10 columns):
0 1000000 non-null values
1 1000000 non-null values
2 1000000 non-null values
3 1000000 non-null values
4 1000000 non-null values
5 1000000 non-null values
6 1000000 non-null values
7 1000000 non-null values
8 1000000 non-null values
9 1000000 non-null values
dtypes: float64(10)
In [5]: %timeit df.to_csv('test.csv',mode='w')
1 loops, best of 3: 12.7 s per loop
In [6]: %timeit df.to_hdf('test.h5','df',mode='w')
1 loops, best of 3: 825 ms per loop
In [7]: %timeit pd.read_csv('test.csv',index_col=0)
1 loops, best of 3: 2.35 s per loop
In [8]: %timeit pd.read_hdf('test.h5','df')
10 loops, best of 3: 38 ms per loop
我真的不会担心大小(我猜你也不是,只是有点好奇,这很好)。 HDF5的重点在于磁盘很便宜,CPU很便宜,但你不能将所有东西都放在内存中,所以我们通过使用分块来进行优化。