背景:我正在和一位教授合作将一些MatLab脚本转换成python (同时学习python ),所以我为我的粗鲁道歉。
我正在尝试用python读取.mat文件。下面是我的示例代码;
import numpy as np
from scipy.io import loadmat
isochrones = loadmat('isochrones.mat')现在这个.mat文件包含了一个1x1结构的变量'isoc‘。在该变量内部还有两个结构,'e8‘和'e9’。
我在进入'e8‘和'e9’小节时遇到了问题。它们被更多的1x1变量填充,这些变量包括更多,以此类推。
isoc = isochrones['isoc']
e8 = isoc['e8']
e9 = isoc['e9']我能够走到这一步,但在那之后我就卡住了。当我打印出'e9‘的内容时,它列出了其中的所有数据值,还打印了其中包含的dtype,其中可以看到'e9’变量中的文件。
这是一个包含.mat文件的谷歌驱动器链接:https://drive.google.com/open?id=1kpZsHBtWll-HMd28zQ12L8v1ahWClCaM
发布于 2020-05-02 04:13:54
我已经看过.mat文件了:
e8[0][0][0][0][0]对应于isoc.e8.one:即[[B], [V], [logage]]
e8[0][0][0][0][1]对应于isoc.e8.two:即[[B], [V], [logage]]
e8[0][0][0][0][0][0][0][0]将提取isoc.e8.one.B,即[14.591, ..., -1.415]
e8[0][0][0][0][0][0][0][1]将提取isoc.e8.one.V,即[13.014, ..., -2.990]
e8[0][0][0][0][1][0][0][0]将提取isoc.e8.two.B,即[14.590, ..., 0.818]
根据@hpaulj所说的,并结合我列出的列表进行了一些研究:
import pandas as pd
from scipy.io import loadmat
import itertools
isochrones = loadmat('isochrones.mat')
isoc = isochrones['isoc']
e8 = isoc['e8']
e9 = isoc['e9']
keys = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
e8_dict = {}
e9_dict = {}
for i in range(len(keys)):
e8_dict[keys[i]] = [list(itertools.chain.from_iterable(j)) for j in e8[0, 0][0, 0][i][0, 0]]
e9_dict[keys[i]] = [list(itertools.chain.from_iterable(k)) for k in e9[0, 0][0, 0][i][0, 0]]
e8_df = pd.DataFrame.from_dict(e8_dict, orient='index', columns=['B', 'V', 'logage'])
e9_df = pd.DataFrame.from_dict(e9_dict, orient='index', columns=['B', 'V', 'logage'])因此,可以使用e8_df.loc['one']访问isoc.e8.one的数据,使用返回B数据数组的e8_df.loc['one']['B']访问isoc.e8.one.B的数据。
下图显示了e8_df的打印输出

https://stackoverflow.com/questions/61549747
复制相似问题