[英]Extract data fields from inconsistent MATLAB data formats into pandas dataframe
是否有統一的方法來梳理 python 中的 .mat 文件的字段名稱並提取相應的數據,無論其格式如何?
這些.mat 文件包括:
我不一定知道 n 但我知道 n 在提取的變量(字段名)中是一致的
我想創建一個 function,它采用 m 字段名稱和 a.mat 文件路徑並返回 nXm pandas dataframe。
到目前為止我的代碼:
import scipy.io as sio
import numpy as np
import pandas as pd
def mat2df(mat_file, var_list):
#mat_file is a file path and var_list is a list of strings corresponding to structure field names
df = pd.DataFrame()
surface_mat = sio.loadmat(mat_file)
for i in list(surface_mat):
if "__" not in i and "readme" not in i: #strip away top dict layer of mat file
mat = surface_mat[i] #mat is an ndarray
if mat.dtype.names is not None: #if mat is a 1Xn structure
for j in mat.dtype.names:
if j in var_list: #if variable is named by user
karray = np.reshape(np.transpose(mat[j]),(-1))
#append dataframe column
df[j] = pd.Series(karray, index=range(len(karray)),dtype=mat[j][0][0].dtype)
elif mat[0][0].dtype.names is not None: # if mat is a 1Xn cell array of 1X1 structures
for j in mat[0][0].dtype.names:
if j in var_list: #if variable is named by user
karray = np.array([])
for k in range(len(mat[0])):
karray = np.append(karray,mat[0][k][j][0][0])
#append dataframe column
df[j] = pd.Series(karray, index=range(len(karray)),dtype=mat[j][0][0].dtype)
else: #Unfortunately, code format doesn't leave many options for data formatting
raise NotImplementedError("Current MATLAB data format not yet supported \
\nCurrent support covers structures and cell arrays of structures")
return df
此代碼僅涵蓋列出的前 2 個 mat 文件類型。 有沒有一種我可以在這里使用的方法,我不必為每個可能的嵌套結構層或元胞數組編寫新的 if 語句?
我為我做了一個 python package 。 希望其他偶然發現這個問題的人也可以使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.