当我读取一个大的hdf文件时,pandas.read_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()
Run Code Online (Sandbox Code Playgroud)
我注意到文档中的所有速度比较仅使用数字数据,并且我自己运行这些数据也达到了类似的性能.
我想问一下,我是否可以采取一些措施来优化读取性能?
编辑
这是一个数据样本
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 …Run Code Online (Sandbox Code Playgroud) 我有一个非常大的数据框,有 1 亿行和分类列。我想知道是否有比使用这里提到的.isin()方法或.join()方法更快的按类别选择行的方法。
鉴于数据已经分类,我认为选择类别应该非常快,但我运行的一些测试表现令人失望。我找到的唯一其他解决方案来自此处,但该解决方案似乎不适用于 Pandas 0.20.2。
这是一个示例数据集。
import pandas as pd
import random
import string
df = pd.DataFrame({'categories': [random.choice(string.ascii_letters)
for _ in range(1000000)]*100,
'values': [random.choice([0,1])
for _ in range(1000000)]*100})
df['categories'] = df['categories'].astype('category')
Run Code Online (Sandbox Code Playgroud)
测试.isin():
%timeit df[df['categories'].isin(list(string.ascii_lowercase))]
44 s ± 894 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Run Code Online (Sandbox Code Playgroud)
使用.join():
%timeit df.set_index('categories').join(
pd.Series(index=list(string.ascii_lowercase), name='temp'),
how='inner').rename_axis('categories').reset_index().drop('temp', 1)
24.7 s ± 1.69 s per loop (mean ± …Run Code Online (Sandbox Code Playgroud)