簡體   English   中英

將Matlab數據文件讀入Python,需要導出為CSV

[英]Read Matlab Data File into Python, Need to Export to CSV

我已將包含大量數組作為數據集的 Matlab 文件讀入 Python,使用以下命令將 Matlab 字典存儲在變量名稱mat下:

mat = loadmat('Sample Matlab Extract.mat')

有沒有辦法然后我可以使用 Python 的寫入 csv 功能來保存我讀入 Python 的這個 Matlab 字典變量作為逗號分隔的文件?

with open('mycsvfile.csv','wb') as f:
   w = csv.writer(f)
   w.writerows(mat.items())
   f.close()

創建一個 CSV 文件,其中一列包含字典中的數組名稱,然后另一列包含每個對應數組的第一個元素。 有沒有辦法利用與此類似的命令來獲取“mat”字典變量內的數組中的所有相應元素?

函數scipy.io.loadmat生成一個看起來像這樣的字典:

{'__globals__': [],
 '__header__': 'MATLAB 5.0 MAT-file, Platform: MACI, Created on: Wed Sep 24 16:11:51 2014',
 '__version__': '1.0',
 'a': array([[1, 2, 3]], dtype=uint8),
 'b': array([[4, 5, 6]], dtype=uint8)}

聽起來您想要做的是使用鍵“a”、“b”等作為列名和它們對應的數組作為與每列關聯的數據制作一個 .csv 文件。 如果是這樣,我建議使用pandas制作一個格式良好的數據集,該數據集可以導出為 .csv 文件。 首先,您需要清除字典的注釋成員(所有以“__”開頭的鍵)。 然后,您想將字典中的每個項目值轉換為pandas.Series對象。 然后可以將字典轉換為pandas.DataFrame對象,該對象也可以保存為 .csv 文件。 您的代碼如下所示:

import scipy.io
import pandas as pd

mat = scipy.io.loadmat('matex.mat')
mat = {k:v for k, v in mat.items() if k[0] != '_'}
data = pd.DataFrame({k: pd.Series(v[0]) for k, v in mat.items()}) # compatible for both python 2.x and python 3.x

data.to_csv("example.csv")

這是將任何 .mat 文件轉換為 .csv 文件的正確解決方案。 嘗試一下

   import scipy.io
   import numpy as np
   data = scipy.io.loadmat("file.mat")

   for i in data:
        if '__' not in i and 'readme' not in i:
              np.savetxt(("file.csv"),data[i],delimiter=',')
import scipy.io
import pandas as pd
import numpy as np
from datetime import datetime, timedelta

class MatDataToCSV():

    def init(self):

        pass

    def convert_mat_tocsv(self):

        mat = scipy.io.loadmat('wiki.mat')

        instances = mat['wiki'][0][0][0].shape[1]
        columns = ["dob", "photo_taken", "full_path", "gender",\
                "name", "face_location", "face_score", "second_face_score"]
        df = pd.DataFrame(index = range(0,instances), columns = columns)

        for i in mat:
            if i == "wiki":
                current_array = mat[i][0][0]
                for j in range(len(current_array)):
                    df[columns[j]] = pd.DataFrame(current_array[j][0])
        return df

使用以下代碼讀取 matfile (.MAT) data = scipy.io.loadmat(files[0])

給出值和鍵的字典

和“' header '、' version '、' globals '”這些是我們需要刪除的一些默認值

cols=[]
for i in data:
    if '__' not in i :
       cols.append(i)
temp_df=pd.DataFrame(columns=cols)
for i in data:
    if '__' not in i :
       temp_df[i]=(data[i]).ravel()

我們使用“if '__' not in i:”刪除不需要的標題值,然后使用其余標題制作數據框,最后將列值分配給相應的列標題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM