我从事分析HDF5格式数据用于科研目的。我正在使用Python的h5py库。
现在,我想读的HDF文件太大了。它的文件大小约为20GB,其数据的主要部分是400000 * 10000浮点矩阵。我试图读取一次数据,但由于内存不足,我的开发环境Spyder因强制而终止。那么有什么方法可以部分阅读它并避免这个问题吗?
答案 0 :(得分:1)
将pd.read_hdf
与columns
参数一起使用。请参见下面的示例:
import numpy as np
import pandas as pd
from contexttimer import Timer
def create_sample_df():
with Timer() as t:
df = pd.DataFrame(np.random.rand(100000, 5000))
df.to_hdf('file.h5', 'df', format='table')
print('create_sample_df: %.2fs' % t.elapsed)
def read_full_df():
""" data is too large to read fully """
with Timer() as t:
df = pd.read_hdf('file.h5')
print('read_full_df: %.2fs' % t.elapsed)
def read_df_with_start_stop():
""" to quick look all columns """
with Timer() as t:
df = pd.read_hdf('file.h5', start=0, stop=5)
print('read_df_with_start_stop: %.2fs' % t.elapsed)
def read_df_with_columns():
""" to read dataframe (hdf5) with necessary columns """
with Timer() as t:
df = pd.read_hdf('file.h5', columns=list(range(4)))
print('read_df_with_columns: %.2fs' % t.elapsed)
if __name__ == '__main__':
create_sample_df()
read_full_df()
read_df_with_start_stop()
read_df_with_columns()
# outputs:
# create_sample_df: 51.25s
# read_full_df: 5.21s
# read_df_with_start_stop: 0.03s
# read_df_with_columns: 4.44s
read_df_with_columns
仅降低空间成本,但不一定提高速度性能。并假设HDF5以table
格式保存(否则无法应用columns
参数)。
答案 1 :(得分:0)
您可以像humpy数组一样切割h5py数据集,这样就可以处理多个子集而不是整个数据集(例如4 100000 * 10000个子集)。