Arn*_*Ben 2 python matlab dictionary tuples dataframe
我正在尝试将 python Dataframe 转换为 Matlab (.mat) 文件。
我最初有一个使用 panda.read_csv 导入的 txt (脑电图信号):
MyDataFrame = pd.read_csv("data.txt",sep=';',decimal='.'),data.txt 是一个带有标签的二维数组。这将创建一个如下所示的数据框。
为了将其转换为 .mat,我尝试了这个解决方案,其想法是将数据帧转换为列表字典,但在尝试了该解决方案的各个方面后,它仍然不成功。
scipy.io.savemat('EEG_data.mat', {'struct':MyDataFrame.to_dict("list")})
它确实创建了一个 .mat 文件,但没有正确保存我的数据框。我获得的文件看起来像这样,所以所有的值基本上都消失了,当你查看它们时,你看到的剩余标签都是空的。
我还尝试使用mat4py,它旨在将 python 结构导出到 Matlab 文件中,但它也不起作用。我不明白为什么,因为将我的数据帧转换为列表字典正是根据 mat4py 文档应该做的。
我相信以前的解决方案对您不起作用的原因是您的DataFrame列名称不是有效的 MATLABstruct字段名称,因为它们包含空格和/或以数字字符开头。
当我做:
import pandas as pd
import scipy.io
MyDataFrame = pd.read_csv('eeg.txt',sep=';',decimal='.')
truncDataFrame = MyDataFrame[0:1000] # reduce data size for test purposes
scipy.io.savemat('EEGdata1.mat', {'struct1':truncDataFrame.to_dict("list")})
Run Code Online (Sandbox Code Playgroud)
MATLAB 中的结果是一个具有 4 个字段reltime、datetime和iSensor的结构体quality。每个列都有 1000 个元素,因此这些列中的数据已转换,但其余数据丢失。
但是,如果我首先重命名 DataFrame 列:
truncDataFrame.rename(columns=lambda x:'col_' + x.replace(' ', '_'), inplace=True)
scipy.io.savemat('EEGdata2.mat', {'struct2':truncDataFrame.to_dict("list")})
Run Code Online (Sandbox Code Playgroud)
MATLAB 中的结果是一个具有 36 个字段的结构体。这与您的 mat4py 解决方案的格式不同,但它确实包含(据我所知)源 DataFrame 中的所有数据。
(请注意,在您的问题中,您正在创建一个.mat包含名为 的变量的文件struct,当将其加载到 MATLAB 中时,它会屏蔽内置struct数据类型 - 这也可能会导致后续 MATLAB 代码出现问题。)
| 归档时间: |
|
| 查看次数: |
8762 次 |
| 最近记录: |