You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含多参与者struct的Matlab .mat文件转为Python DataFrame?

将Matlab多参与者Struct转换为Python DataFrame

步骤说明

你加载的data是一个1×17的numpy结构化数组,每个元素对应一名参与者的完整数据。要转换成DataFrame,核心是把每个参与者的字段提取为字典,再批量转换为DataFrame。以下是具体实现:

完整代码

from scipy.io import loadmat
import pandas as pd
import numpy as np

# 加载数据(你的原有代码)
matlabData = loadmat(r"\\LPS_IMU_Struct060621_Done.mat")
data = matlabData['LPS_Struct']

# 把1×17的数组展平为一维,方便遍历所有参与者
participants = data.flatten()

# 初始化列表存储每个参与者的字典数据
participant_data = []

for idx, participant in enumerate(participants):
    # 创建当前参与者的数据字典
    p_dict = {"Participant_ID": idx + 1}  # 可选:添加参与者编号
    
    # 遍历所有字段(对应dtype里的Name、Table等)
    for field_name in data.dtype.names:
        # 提取字段值:loadmat加载的struct字段是嵌套的(1,1) object,需要[0][0]取出实际内容
        field_value = participant[field_name][0][0]
        
        # 处理不同类型的字段:
        if isinstance(field_value, np.ndarray):
            # 如果是Matlab Table(结构化数组),直接转成子DataFrame
            if field_value.dtype.names is not None:
                p_dict[field_name] = pd.DataFrame(field_value)
            # 如果是普通数值数组,转成列表存在DataFrame中(避免嵌套数组的存储问题)
            else:
                p_dict[field_name] = field_value.tolist()
        # 字符串/其他基础类型直接保留
        else:
            p_dict[field_name] = field_value
    
    participant_data.append(p_dict)

# 转换为最终的DataFrame
final_df = pd.DataFrame(participant_data)

关键细节解释

  1. 展平数组:data.flatten()把原来的(1,17)二维数组转成一维,遍历起来更直观。
  2. 字段提取:Matlab struct通过loadmat加载后,每个字段都是(1,1)的object类型,必须用[0][0]才能取出实际数据(比如字符串、数组或Table)。
  3. 类型适配:
    • Matlab的Table会被加载为numpy结构化数组,直接用pd.DataFrame()转换为子DataFrame,保留原表格结构。
    • 数值数组转成列表存储,避免DataFrame中嵌套numpy数组可能带来的操作问题。
  4. 参与者编号:可选添加Participant_ID列,方便后续按参与者筛选分析。

后续调整建议

  • 如果某个数组字段(比如Array)需要展开为多列,可以在遍历字段时单独处理,比如用pd.DataFrame(field_value)后拼接成主DataFrame的列。
  • 如果字符串出现编码问题,可以尝试用str(field_value)强制转换为Python字符串。

内容的提问来源于stack exchange,提问作者Cmagelssen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:40:41