如何一次性读取加载多个.mat文件并转换为Python Pandas DataFrame?
一次性读取多个.mat文件并转换为Pandas DataFrame的方法
所需依赖库
先确保安装必要工具库:
pip install pandas scipy
实现步骤与代码
1. 导入核心库
import os import pandas as pd from scipy.io import loadmat
2. 编写单个.mat文件转DataFrame的函数
负责加载单个.mat文件,过滤元数据并提取有效数据:
def mat_to_df(mat_file_path): mat_data = loadmat(mat_file_path) # 排除.mat自带的元数据键(如__header__、__version__) valid_keys = [k for k in mat_data.keys() if not k.startswith('__')] # 假设每个.mat文件含一个目标数据集,取第一个有效键对应的数据 # 若有多个数据集,可直接指定键名,比如mat_data['your_target_key'] raw_data = mat_data[valid_keys[0]] # 适配不同数据结构: # 普通二维数组直接转DataFrame df = pd.DataFrame(raw_data) # 结构化数组(含字段名)用from_records保留列名 # df = pd.DataFrame.from_records(raw_data) # 可选:手动设置列名 # df.columns = ['col1', 'col2', ...] return df
3. 批量读取并合并所有.mat文件
遍历目标文件夹下的.mat文件,读取后合并为完整DataFrame:
def load_all_mat_files(folder_path): # 获取所有.mat文件的完整路径 mat_file_paths = [ os.path.join(folder_path, filename) for filename in os.listdir(folder_path) if filename.endswith('.mat') ] # 逐个读取并收集DataFrame df_collection = [] for file_path in mat_file_paths: df = mat_to_df(file_path) df_collection.append(df) # 合并所有DataFrame,重置行索引 combined_df = pd.concat(df_collection, ignore_index=True) return combined_df
4. 使用示例
替换为你的.mat文件所在文件夹路径即可运行:
# 替换为实际文件夹路径 target_folder = '/your/mat/files/directory' final_dataframe = load_all_mat_files(target_folder) # 查看合并结果前5行 print(final_dataframe.head())
注意事项
- 若不同.mat文件列结构不一致,
pd.concat会自动为缺失列填充NaN,需提前统一列结构或筛选文件 - 若数据为非二维结构(如三维数组),需先调整维度(提取切片、展平等)再转换
- 结构化数组类型的.mat文件,用
pd.DataFrame.from_records()可直接保留原字段名作为列名
内容的提问来源于stack exchange,提问作者jasmine
相关产品推荐
相关产品推荐

