【问题标题】:How can I convert complex .mat file to csv using python如何使用 python 将复杂的 .mat 文件转换为 csv
【发布时间】:2018-03-31 01:52:37
【问题描述】:

我正在尝试使用 python 将 .mat 文件转换为 csv。我使用的代码是

import scipy.io
import numpy as np

data = scipy.io.loadmat("wiki.mat")

for i in data:
    if '__' not in i and 'readme' not in i:
        np.savetxt(("file.csv"),data[i],delimiter=',')

当我运行这段代码时,我得到如下错误:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    np.savetxt(("file.csv"),data[i],delimiter=',')
  File "/Library/Python/2.7/site-packages/numpy/lib/npyio.py", line 1258, in savetxt
    % (str(X.dtype), format))
TypeError: Mismatch between array dtype ('[('dob', 'O'), ('photo_taken', 'O'), ('full_path', 'O'), ('gender', 'O'), ('name', 'O'), ('face_location', 'O'), ('face_score', 'O'), ('second_face_score', 'O')]') and format specifier ('%.18e')

我正在尝试从此链接转换 .mat 文件:https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/static/imdb_meta.tar

请帮我找出一些可行的解决方案!

【问题讨论】:

  • Python 允许交互式处理。为什么不控制数据的内容?
  • 对不起,我是 python 和 matlab 的新手,我正在使用 java 和 node.js 进行与机器学习相关的工作,需要一些相关数据,数据在 .mat 文件中。所以我只想要这个文件中的数据。

标签: python mat-file


【解决方案1】:

我创建了一个名为 matgrab 的包,可用于将任何 matlab 数据文件转换为 Dataframe。你可以这样称呼它:

import matgrab
matgrab.mat2df(file.mat).to_csv(file.csv)

【讨论】:

    【解决方案2】:

    https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.savetxt.html

    将数组保存到文本文件中。

    很遗憾,您只能将单个数字 numpy 数组存储在单个文件中。而您的 .mat 文件包含一个结构:

    >> fieldnames(imdb)
                            ans = 
                            {
                              [1,1] = dob
                              [2,1] = photo_taken
                              [3,1] = full_path
                              [4,1] = gender
                              [5,1] = name
                              [6,1] = face_location
                              [7,1] = face_score
                              [8,1] = second_face_score                          
                              [9,1] = celeb_names
                              [10,1] = celeb_id
                            }
    >> imdb.name(1)        
                            ans = 
                            {
                              [1,1] = Fred Astaire
                            }
    

    将数据转换为 numpy 字典(如“Complex matlab-like data structure in python (numpy/scipy)”中所述)并使用How do I convert this list of dictionaries to a csv file? [Python] 将其存储为.csv 可能是有意义的

    【讨论】:

    • 感谢您的回复,我尝试按照您的步骤进行操作,但是我是python和matlab的新手,我只知道python基础知识。我只是在寻找 .mat 文件中的数据,因为我正在使用 ML 并且需要将内容用于培训目的。您能给我一个工作示例或一些更详细的基础信息吗?
    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2018-08-14
    • 2020-06-10
    • 2021-10-29
    • 2016-03-08
    • 1970-01-01
    相关资源
    最近更新 更多