【问题标题】:Convert mat file to pandas dataframe problem将mat文件转换为pandas数据框问题
【发布时间】:2020-04-03 15:36:08
【问题描述】:

您好,我一直坚持将 matlab 矩阵很好地转换为 pandas 数据框。 我转换了它,但我有一行列出了列表。这些列表列表通常是我的行。

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

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

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

我想将imageswavLogits 转换为数据框。 通过查看 post 我应用了解决方案。

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

输出是

如何获得格式良好的 df?

[更新] 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'),
        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')])

【问题讨论】:

  • Data_mat["images"] 的尺寸是多少。它是一个numpy矩阵吗?还是矩阵列表?
  • 这是一个numpy.ndarray,形状给了我(1,1)
  • 我更新了Data_mat["images"]输出的帖子
  • 是的,我认为这就是问题所在。 Pandas 期待一个形状为 (n,m) 的 numpy 数组,其中 n 是行数,m 是列数。您本质上希望将数据扁平化到一个数组中。这可能是一个好的开始:stackoverflow.com/questions/33711985/…
  • 谢谢让我看看。

标签: python pandas matlab dictionary converters


【解决方案1】:

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

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()})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 2020-02-29
    • 2022-01-10
    • 2013-01-08
    • 2022-08-18
    • 1970-01-01
    • 2019-12-16
    • 2019-09-29
    相关资源
    最近更新 更多