【发布时间】:2017-05-09 13:47:21
【问题描述】:
使用pandas.read_hdf() 读取大型 hdf 文件时,读取时间非常慢。我的 hdf 有 5000 万行,3 列是整数,2 列是字符串。使用带有表格格式和索引的to_hdf() 编写这篇文章花了将近 10 分钟。虽然这也很慢,但我并不太担心,因为读取速度更重要。
我尝试保存为固定/表格格式,有/无压缩,但是读取时间在 2-5 分钟之间。相比之下,read_csv() 处理相同的数据需要 4 分钟。
我也尝试过直接使用 pytables 读取 hdf。这在 6 秒时要快得多,这将是我希望看到的速度。
h5file = tables.open_file("data.h5", "r")
table = h5file.root.data.table.read()
我注意到文档中的所有速度比较都仅使用数字数据,并且我自己运行这些数据获得了相似的性能。
请问有没有什么办法可以优化读取性能?
编辑
这是数据样本
col_A col_B col_C col_D col_E
30649671 1159660800 10217383 0 10596000 LACKEY
26198715 1249084800 0921720 0 0 KEY CLIFTON
19251910 752112000 0827092 104 243000 WEMPLE
47636877 1464739200 06247715 0 0 FLOYD
14121495 1233446400 05133815 0 988000 OGU ALLYN CH 9
41171050 1314835200 7C140009 0 39000 DEBERRY A
45865543 1459468800 0314892 76 254000 SABRINA
13387355 970358400 04140585 19 6956000 LA PERLA
4186815 849398400 02039719 0 19208000 NPU UNIONSPIELHAGAN1
32666568 733622400 10072006 0 1074000 BROWN
以及有关数据框的信息:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 52046850 entries, 0 to 52046849
Data columns (total 5 columns):
col_A int64
col_B object
col_C int64
col_D int64
col_E object
dtypes: int64(3), object(2)
memory usage: 1.9+ GB
【问题讨论】:
-
能否提供一个小样本数据集(例如
df.head(10))? -
我已经编辑了问题并将数据和信息的样本放在数据框上
-
您必须使用 HDF 格式还是可以考虑不同的格式?您总是需要读取整个数据集还是只需要读取其中的一部分(有条件地)?
-
我不必使用 HDF。事实上,我正在努力寻找最快读取速度的最佳格式。在看到很多关于 HDF 有多快的 cmets 之后,我认为这将是解决方案。您还有其他建议吗?
-
我正在用一些例子写一个答案......你需要有条件地阅读你的数据吗? IE。读取HDF文件时要使用
where='...query...'参数吗?
标签: python performance python-3.x pandas hdf