(python)如何使用h5py将大数据集分割成具有一定列数的较小数据集?

问题描述 投票:0回答:1

我收到带有大型数据集(有几千列)的 h5 文件。我使用 h5py 将这些数据集导出为 csv,然后我必须将其切成最多 500 列的子矩阵才能分析它们。 如何继续(使用 h5py?)将数据直接导出到具有定义的列数的多个 CSV 文件中? 最好

目前我使用 C# 程序剪切这些大型 CSV 文件,但这非常耗时并且增加了不必要的额外工作。

hdf5 h5py
1个回答
0
投票

这是一个简单的示例,它创建一个包含字段/列名称的 H5 文件,然后读取切片(按字段名称和行索引)。

n_fields, n_rows = 10, 100

name_list = [f'Field_{i:02}' for i in range(1,n_fields+1) ]
format_list = ['float' for _ in range(n_fields)]

ds_dt = np.dtype({'names':name_list, 'formats':format_list})

with h5py.File('SO_77378785.h5','w') as h5f:
    ds = h5f.create_dataset('test',shape=(n_rows,),dtype=ds_dt)
    for i in range(n_fields):
        ds[name_list[i]] = np.random.random(n_rows)

# Open file and read slices
with h5py.File('SO_77378785.h5') as h5f:
    ds = h5f['test'] # creates dataset object for reference
    field_1_slice = ds['Field_01'] # reads slice from dataset object
    print(field_1_slice.shape)
    field_2_slice = h5f['test']['Field_01'] # another way to slice
    print(field_2_slice.shape)
    row_slice = h5f['test']['Field_10'][:50]
    print(row_slice.shape)
© www.soinside.com 2019 - 2024. All rights reserved.