web-dev-qa-db-fra.com

fichier de données matlab vers pandas DataFrame

Existe-t-il un moyen standard de convertir matlab.mat (données formatées matlab) vers Panda DataFrame?

Je suis conscient qu'une solution de contournement est possible en utilisant scipy.io mais je me demande s'il existe un moyen simple de le faire.

13
Ramon Martinez

J'ai trouvé 2 voies: scipy ou mat4py.

  1. mat4py

Charger les données du fichier MAT

La fonction loadmat charge toutes les variables stockées dans le fichier MAT dans une structure de données simple Python, en utilisant uniquement les objets dict et list de Python. Les tableaux numériques et cellulaires sont convertis en listes imbriquées ordonnées par lignes. Tableaux sont compressés pour éliminer les tableaux avec un seul élément. La structure de données résultante est composée de types simples compatibles avec le format JSON.

Exemple: chargez un fichier MAT dans une structure de données Python:

data = loadmat('datafile.mat')

De:

https://pypi.python.org/pypi/mat4py/0.1.

  1. Scipy:

Exemple:

import numpy as np
from scipy.io import loadmat  # this is the SciPy module that loads mat-files
import matplotlib.pyplot as plt
from datetime import datetime, date, time
import pandas as pd

mat = loadmat('measured_data.mat')  # load mat-file
mdata = mat['measuredData']  # variable in mat file
mdtype = mdata.dtype  # dtypes of structures are "unsized objects"
# * SciPy reads in structures as structured NumPy arrays of dtype object
# * The size of the array is the size of the structure array, not the number
#   elements in any particular field. The shape defaults to 2-dimensional.
# * For convenience make a dictionary of the data using the names from dtypes
# * Since the structure has only one element, but is 2-D, index it at [0, 0]
ndata = {n: mdata[n][0, 0] for n in mdtype.names}
# Reconstruct the columns of the data table from just the time series
# Use the number of intervals to test if a field is a column or metadata
columns = [n for n, v in ndata.iteritems() if v.size == ndata['numIntervals']]
# now make a data frame, setting the time stamps as the index
df = pd.DataFrame(np.concatenate([ndata[c] for c in columns], axis=1),
                  index=[datetime(*ts) for ts in ndata['timestamps']],
                  columns=columns)

De:

http://poquitopicante.blogspot.fr/2014/05/loading-matlab-mat-file-into-pandas.html

  1. Enfin, vous pouvez utiliser PyHogs mais toujours utiliser scipy:

Complexe de lecture .mat des dossiers.

Ce bloc-notes montre un exemple de lecture d'un fichier Matlab .mat, de conversion des données en un dictionnaire utilisable avec des boucles, un simple tracé des données.

http://pyhogs.github.io/reading-mat-files.html

22
Destrif

Façons de procéder:
Comme vous l'avez mentionné scipy

import scipy.io as sio
test = sio.loadmat('test.mat')

Utilisation du moteur matlab :

import matlab.engine
eng = matlab.engine.start_matlab()
content = eng.load("example.mat",nargout=1)
6
SerialDev