将Matlab数据文件读入Python,需要导出为CSV

Jay*_*Jay 7 python matlab numpy scipy

我已经读了一个包含大量数组作为数据集的Matlab文件到Python中,mat使用以下命令在变量名下存储Matlab Dictionary :

mat = loadmat('Sample Matlab Extract.mat')

有没有办法我可以使用Python写入csv功能来保存这个我在Python中作为逗号分隔文件读取的Matlab字典变量?

with open('mycsvfile.csv','wb') as f:
   w = csv.writer(f)
   w.writerows(mat.items())
   f.close()
Run Code Online (Sandbox Code Playgroud)

创建一个CSV文件,其中一列包含字典中的数组名称,然后另一列包含每个相应数组的第一个元素.有没有办法利用类似这样的命令来获取'mat'字典变量内部数组中的所有相应元素?

phi*_*ilE 9

该函数scipy.io.loadmat生成一个字典,如下所示:

{'__globals__': [],
 '__header__': 'MATLAB 5.0 MAT-file, Platform: MACI, Created on: Wed Sep 24 16:11:51 2014',
 '__version__': '1.0',
 'a': array([[1, 2, 3]], dtype=uint8),
 'b': array([[4, 5, 6]], dtype=uint8)}
Run Code Online (Sandbox Code Playgroud)

听起来你要做的就是用一个带有"a","b"等键的.csv文件作为列名和它们相应的数组作为与每列相关的数据.如果是这样,我建议使用pandas一个格式很好的数据集,可以导出到.csv文件.首先,您需要清除字典的注释成员(所有以"__"开头的键).然后,您希望将字典中的每个项目值转换为pandas.Series对象.然后可以将字典转换为pandas.DataFrame对象,也可以将其保存为.csv文件.您的代码如下所示:

import scipy.io
import pandas as pd

mat = scipy.io.loadmat('matex.mat')
mat = {k:v for k, v in mat.items() if k[0] != '_'}
data = pd.DataFrame({k: pd.Series(v[0]) for k, v in mat.iteritems()})
data.to_csv("example.csv")
Run Code Online (Sandbox Code Playgroud)

  • 如果你使用的是Python 3.x,它应该是.items()而不是.iteritems() (2认同)