如何加载.mat文件并将其转换为.csv文件?

时间:2019-05-02 00:27:37

标签: python-3.x matlab

我想加载.mat文件并将其转换为.csv文件。

这是用于运行python3.7的MacOS终端。过去,我已经加载了.csv和.dat文件。 以下是我为上述任务编写的代码。

mat_274 = load('ecgca274_edfm.mat')
T = struct2table(mat_274)
writetable(T, 'ecgca274_edfm.csv', 'Delimiter', ',')
print(mat_274)

运行上述代码后,出现以下错误

Traceback (most recent call last):
  File "bayesian3.py", line 1, in <module>
    mat_274 = load('ecgca274_edfm.mat')
NameError: name 'load' is not defined

任何人都可以帮助更正错误或提出转换任务的新方法吗?谢谢

2 个答案:

答案 0 :(得分:2)

此操作中有一个scipy函数,如其文档中所述:https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html

import scipy.io
mat_274 = scipy.io.loadmat( 'ecgca274_edfm.mat' )

但是,对于用于生成* .mat文件的MATLAB版本也非常挑剔。在上面的链接中是以下警告:

v4 (Level 1.0), v6 and v7 to 7.2 matfiles are supported.

You will need an HDF5 python library to read MATLAB 7.3 format mat files. 
Because scipy does not supply one, we do not implement the HDF5 / 7.3 interface here.

解决此问题的一种可能方法是将其另存为MATLAB中较旧的Mat版本。以下命令应该执行此操作(在MATLAB中):

save( 'ecgca274_edfm.mat', '-v7' )

答案 1 :(得分:0)

我已经找到上述问题的答案。代码段如下。

import pandas as pd
from scipy.io import loadmat

data_dict = loadmat('ecgca274_edfm.mat')
data_array = data_dict['val']
data_array = data_array.transpose(1, 0)
df = pd.DataFrame(data_array,
                  columns=['ch'+str(n) for n in range(1,7)])

我没有将其转换为csv,而是将其转换为数据帧以进行进一步处理。