【发布时间】:2017-11-11 18:49:37
【问题描述】:
我有许多相同格式的 mat 文件,我希望将这些 mat 文件合并到一个带有 DatetimeIndex 的 DataFrame 中。目前,for 循环读取这些 mat 文件并使用 scipy.io.loadmat 将每个文件的内容加载到 pandas DataFrames 中,然后将每个 DataFrame 附加到 hdf5 表中。
每个 mat 文件都包含一个 4096x1024 的单精度矩阵,循环的初始每次迭代大约需要 1.5 秒。我已经用 806 个 mat 文件(12.5GB 大约需要 25 分钟)对此进行了测试,但我想将它应用到可能数百万的这些文件中,我有兴趣找到一个允许我导入新数据和查询的工作流和数据容器时间序列的子集。
是否可以使用 dask 或其他工具来加快此导入过程并创建单个可查询的时间序列?
for rot_file in rotation_files:
print(rot_file)
time_stamps = pd.DataFrame(scipy.io.loadmat(rot_file)['LineInfo'][0][0][2][0])
polar_image = pd.DataFrame(scipy.io.loadmat(rot_file)['PolarImage'])
polar_image = polar_image.transpose()
polar_image.index = time_stamps[0].apply(convert_to_python_datetime).values
rot_id = time_stamps[0]
rot_id_df = pd.DataFrame(len(polar_image)*[rot_id],columns=['rotation_id'], dtype='category')
rot_id_df.index = polar_image.index
polar_image.join(rot_id_df)
polar_image.columns = [str(col_name) for col_name in polar_image.columns]
polar_image.to_hdf('rot_data.h5', 'polar_image', format='table', append=True, complib='blosc', complevel=9)
似乎应该可以使用 dask.delayed 进行导入,但我不确定如何将其写入单个 hdf 文件。
【问题讨论】:
-
不要只是在外部链接到您的代码,请将其编辑到您的帖子中。
-
是的,这是可能的。特别是如果您事先知道 .mat 的数量,您可以预先分配一个 hdf5 表,其中包含与 .mat 一样多的行(第一维度)。其他维度使用您的恒定形状(或者如果它们不同,则不使用)。
-
问题:目的是查询.mat文件中的所有数据还是创建hdf数据集?
-
目的是查询所有数据,以便能够使用基于日期的索引轻松提取子集。它不一定必须在 hdf 中。
标签: python pandas hdf5 pytables dask