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

使用Python将Excel提取数据写入.mat文件时数据损坏如何解决

解决方案

问题根因定位

  • 最常见原因是pandas导出的numpy数组为object类型(存在混合数据类型/未识别的空值),scipy.io.savemat对object类型数组支持度极低,极易生成损坏的.mat文件
  • 其次可能是savemat默认导出的MAT文件版本与你使用的MATLAB版本不兼容
  • 小概率是数组中存在未处理的空值、字符串类型内容无法被MATLAB识别

修复后的实现代码

import pandas as pd
import numpy as np
import scipy.io
import os

# 读取Excel文件
file_location = '/Users/manmohidake/GoogleDrive/Post_doc/Trial_analysis/1_IndoorOutdoor.xlsx'
mydata = pd.read_excel(
    file_location,
    na_values="Missing",
    sheet_name='Sheet1',
    skiprows=1,
    usecols="F,K,Q"
)

# 1. 强制转换为数值类型,无法转换的内容设为NaN
mydata = mydata.apply(pd.to_numeric, errors='coerce')
# 2. 可选:如果不需要保留空值,可以统一填充为指定值,比如0
# mydata = mydata.fillna(0)

# 转换为float类型的numpy数组,避免object类型
array = mydata.to_numpy(dtype=np.float64)

# 导出.mat文件,指定兼容格式
destination_folder_path = '/Users/manmohidake/Google Drive/Post_doc/Trial_analysis/'
scipy.io.savemat(
    os.path.join(destination_folder_path, 'trial1.mat'),
    {'array': array},
    appendmat=False,
    # MATLAB版本高于R2006b用format='5'即可,需要支持超大数组可改为'7.3'
    format='5'
)

验证步骤

  • 导出前先打印array.dtype确认输出为float64而非object
  • 导出后可以先用scipy的loadmat接口本地验证文件是否正常:
test_load = scipy.io.loadmat(os.path.join(destination_folder_path, 'trial1.mat'))
print(test_load['array'])

如果本地可以正常读取,说明文件无损坏,可直接在MATLAB中打开。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:06:02