2016年8月15日月曜日

MATLABのmatファイルからPython PandasのDataFrameにごく簡単に変換する

MATLABで使用するmatファイルからPythonのPandasで使うDataFrameに変換しようとしてググったが、ちょっと直感的でない結果しかヒットしなかった。

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

とにかく簡単にDataFrameに変換しようとすると、以下のようになった。

# 必要ライブラリの読み込み
import pandas as pd
from scipy.io import loadmat
matdata = loadmat(u'変換したいmatファイル.mat')

# 一時変換用の辞書
dictFromMat = {}
# 辞書の要素を列挙し、DataFrameに変換
for key, value in matdata.iteritems():
    dictFromMat[key] = pd.Series(np.array(matdata[key]).flatten())
   
# 一時変換用の辞書からDataFrameを作成
dfFromMat = pd.DataFrame(dictFromMat)

型チェックとか、計算量とか何も考えていないのでベストかどうかは分からないが、とりあえずDataFrameに変換できた。
配列をflatten()しているので、一要素として配列を入れたい場合はこの方法は使えないが、csvのように一要素として一つの値しか取らない場合は使えると思う。

これでMATLABのベンダーロックインから逃れられる。