2016-07-05 13 views
7

Czy istnieje standardowy sposób konwertowania plików matlab.mat (dane sformatowane matlab) do Panda DataFrame?plik danych matlab do pand DataFrame

Jestem świadomy, że obejście problemu jest możliwe przy użyciu scipy.io, ale zastanawiam się, czy istnieje prosty sposób, aby to zrobić.

Odpowiedz

8

Znalazłem 2 sposób: scipy lub mat4py.

  1. mat4py

ładowanie danych z Mat-pliku

funkcji loadmat ładuje wszystkie zmienne zapisane w MAT-pliku do prostej struktury danych w Pythonie, używając tylko dict Pythona i lista obiektów: . Macierze numeryczne i komórki są konwertowane na uporządkowane według kolejności listy o liczbie zagnieżdżonych . Tablice są ściskane, aby wyeliminować tablice z tylko jednym elementem. Wynikowa struktura danych składa się z prostych typów, które są zgodne z formatem JSON.

Przykład: Ładowanie matę plik do struktury danych Pythonie

data = loadmat('datafile.mat') 

z:

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

  1. scipy:

Przykład:

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) 

Od:

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

  1. Wreszcie można użyć PyHogs ale nadal korzystać scipy:

Czytanie złożonych .mat plików.

Ten notatnik pokazuje przykład odczytywania pliku Matlab .mat, konwertowania danych do użytecznego słownika za pomocą pętli, prostego wykresu danych .

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

+0

doskonałym rozwiązaniem. To musi być wybrana odpowiedź. – Jack

4

sposobów, aby to zrobić:
Jak wspomniano scipy

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

Używanie matlab engine:

import matlab.engine 
eng = matlab.engine.start_matlab() 
content = eng.load("example.mat",nargout=1) 
Powiązane problemy