将Mat文件转换为Pandas DataFrame问题 [英] Convert mat file to pandas dataframe problem

查看:128
本文介绍了将Mat文件转换为Pandas DataFrame问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我一直坚持将Matlab矩阵很好地转换为pandas数据框.我对其进行了转换,但我在其中的列表列表中有一行.这些列表通常是我的行.

 将pandas导入为pd将numpy导入为np从scipy.io.matlab导入mioData_mat = mio.loadmat('senet50-ferplus-logits.mat') 

我的 Data_mat.keys()给了我这个输出:

  dict_keys(['__ header__','__version__','__globals__','images','wavLogits']) 

我想将图像 wavLogits 转换为数据框.通过查看此

如何以良好的格式获取df?

[UPDATE] Data_mat ["images"]

  array([[(array([[array(['A.J._Buckley/test/Y8hIVOBuels_0000001.wav'],dtype ='< U41'),array(['A.J._Buckley/test/Y8hIVOBuels_0000002.wav'],dtype ='< U41'),array(['A.J._Buckley/test/Y8hIVOBuels_0000003.wav'],dtype ='< U41'),...,array(['Zulay_Henao/train/s4R4hvqrhFw_0000007.wav'],dtype ='< U41'),array(['Zulay_Henao/train/s4R4hvqrhFw_0000008.wav'],dtype ='< U41'),数组(['Zulay_Henao/train/s4R4hvqrhFw_0000009.wav'],dtype ='< U41')]],dtype = object),array([[[1,2,3,...,153484,153485,153486]],dtype = int32),array([[1,1,1,...,1251,1251,1251]],dtype = uint16),array([[array(['Y8hIVOBuels'],dtype ='< U11'),array(['Y8hIVOBuels'],dtype ='< U11'),array(['Y8hIVOBuels'],dtype ='< U11'),...,array(['s4R4hvqrhFw'],dtype ='< U11'),array(['s4R4hvqrhFw'],dtype ='< U11'),数组(['s4R4hvqrhFw'],dtype ='< U11')]],dtype = object),数组([[1、2、3,...,7、8、9]],dtype = uint8),array([[array(['AJ_Buckley/1.6/Y8hIVOBuels/1/01.jpg'],dtype ='< U37')],[array(['A.J._Buckley/1.6/Y8hIVOBuels/1/02.jpg'],dtype ='< U37')],[array(['A.J._Buckley/1.6/Y8hIVOBuels/1/03.jpg'],dtype ='< U37')],...,[array(['Zulay_Henao/1.6/s4R4hvqrhFw/9/16.jpg'],dtype ='< U36')],[array(['Zulay_Henao/1.6/s4R4hvqrhFw/9/17.jpg'],dtype ='< U36')],[数组(['Zulay_Henao/1.6/s4R4hvqrhFw/9/18.jpg'], dtype='<U36')]],dtype = object),array([[1.00000e + 00],[1.00000e + 00],[1.00000e + 00],...,[1.53486e + 05],[1.53486e + 05],[1.53486e + 05]],dtype = float32),数组([[3,3,3,...,1,1,1,1]],dtype = uint8))]]],dtype = [('name','O'),('id','O'),('sp','O'),('video','O'),('track','O'),('denseFrames','O'),('denseFramesWavIds','O'),('set','O')]) 

解决方案

所以这就是我要自动将mat文件转换为pandas数据帧的方法.

  mat = scipy.io.loadmat('file.mat')mat = {k:v for k,如果k [0]!='_'},则mat.items()中的vdf = pd.DataFrame({k:np.array(v).flatten()for k,v in mat.items()}) 

Hello I'm stuck on getting good conversion of a matrix of matlab to pandas dataframe. I converted it but I've got one row in which I've list of list. These list of list are normaly my rows.

import pandas as pd
import numpy as np
from scipy.io.matlab import mio
Data_mat = mio.loadmat('senet50-ferplus-logits.mat')

my Data_mat.keys() gives me this output:

dict_keys(['__header__', '__version__', '__globals__', 'images', 'wavLogits'])

I'd like to convert images and wavLogits to data frame. By looking to this post I applied the solution.

cardio_df = pd.DataFrame(np.hstack((Data_mat['images'], Data_mat['wavLogits'])))

And the output is

How to get the df in good format?

[UPDATE] Data_mat["images"] has

array([[(array([[array(['A.J._Buckley/test/Y8hIVOBuels_0000001.wav'], dtype='<U41'),
        array(['A.J._Buckley/test/Y8hIVOBuels_0000002.wav'], dtype='<U41'),
        array(['A.J._Buckley/test/Y8hIVOBuels_0000003.wav'], dtype='<U41'),
        ...,
        array(['Zulay_Henao/train/s4R4hvqrhFw_0000007.wav'], dtype='<U41'),
        array(['Zulay_Henao/train/s4R4hvqrhFw_0000008.wav'], dtype='<U41'),
        array(['Zulay_Henao/train/s4R4hvqrhFw_0000009.wav'], dtype='<U41')]],
      dtype=object), array([[     1,      2,      3, ..., 153484, 153485, 153486]], dtype=int32), array([[   1,    1,    1, ..., 1251, 1251, 1251]], dtype=uint16), array([[array(['Y8hIVOBuels'], dtype='<U11'),
        array(['Y8hIVOBuels'], dtype='<U11'),
        array(['Y8hIVOBuels'], dtype='<U11'), ...,
        array(['s4R4hvqrhFw'], dtype='<U11'),
        array(['s4R4hvqrhFw'], dtype='<U11'),
        array(['s4R4hvqrhFw'], dtype='<U11')]], dtype=object), array([[1, 2, 3, ..., 7, 8, 9]], dtype=uint8), array([[array(['A.J._Buckley/1.6/Y8hIVOBuels/1/01.jpg'], dtype='<U37')],
       [array(['A.J._Buckley/1.6/Y8hIVOBuels/1/02.jpg'], dtype='<U37')],
       [array(['A.J._Buckley/1.6/Y8hIVOBuels/1/03.jpg'], dtype='<U37')],
       ...,
       [array(['Zulay_Henao/1.6/s4R4hvqrhFw/9/16.jpg'], dtype='<U36')],
       [array(['Zulay_Henao/1.6/s4R4hvqrhFw/9/17.jpg'], dtype='<U36')],
       [array(['Zulay_Henao/1.6/s4R4hvqrhFw/9/18.jpg'], dtype='<U36')]],
      dtype=object), array([[1.00000e+00],
       [1.00000e+00],
       [1.00000e+00],
       ...,
       [1.53486e+05],
       [1.53486e+05],
       [1.53486e+05]], dtype=float32), array([[3, 3, 3, ..., 1, 1, 1]], dtype=uint8))]],
      dtype=[('name', 'O'), ('id', 'O'), ('sp', 'O'), ('video', 'O'), ('track', 'O'), ('denseFrames', 'O'), ('denseFramesWavIds', 'O'), ('set', 'O')])

解决方案

So this is what I'd do to convert a mat file into a pandas dataframe automagically.

mat = scipy.io.loadmat('file.mat')
mat = {k:v for k, v in mat.items() if k[0] != '_'}
df = pd.DataFrame({k: np.array(v).flatten() for k, v in mat.items()})

这篇关于将Mat文件转换为Pandas DataFrame问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆