如何读取Matlab .mat文件指定矩阵部分数据转为pandas DataFrame
Python读取.mat文件指定矩阵部分数据的实现方案
scipy默认的loadmat不加参数时会加载文件内所有变量,按需读取只需要加对应参数或者换适配高版本mat格式的库即可,分两种场景实现:
针对Matlab v5/v6版本生成的.mat格式
直接给loadmat传入variable_names参数指定只加载目标变量F,其他无关变量完全不会读入内存,读取后按你需要的索引切片,再转DataFrame即可对接现有代码:from scipy.io import loadmat import pandas as pd # 仅加载目标变量F,过滤所有其他无关变量 mat_content = loadmat("你的mat文件本地路径.mat", variable_names=["F"]) F = mat_content["F"] # 按你需要的索引取子集,例:取第10-200行、第0-30列,替换成你实际需要的索引范围即可 partial_F = F[10:200, 0:30] # 转成pandas DataFrame对接现有代码 target_df = pd.DataFrame(partial_F)针对Matlab v7.3及以上版本生成的.mat格式
高版本mat文件本质是HDF5封装格式,scipy不支持部分读取,用h5py可以实现连完整F矩阵都不加载,直接读取指定索引对应的片数据,内存占用最低:import h5py import pandas as pd with h5py.File("你的mat文件本地路径.mat", "r") as f: # 注意:h5py读取Matlab矩阵时维度顺序和Matlab原生顺序相反,按需加.T转置即可 # 直接传入你需要的索引范围,仅读取对应块的数据进内存 partial_F = f["F"][10:200, 0:30].T # 转成pandas DataFrame对接现有代码 target_df = pd.DataFrame(partial_F)
版本判断小技巧:直接先用第一种scipy的方法跑,如果抛出
NotImplementedError: Please use HDF reader for matlab v7.3 files报错,就换第二种h5py方案即可,不用提前手动查文件版本。
内容的提问来源于stack exchange,提问作者Oriol Telleria
相关产品推荐
相关产品推荐

