You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python新手求助:将.mat文件转换为DataFrame的方法

解决NASA电池.mat文件转DataFrame的问题

问题根源

你之前的代码错误在于直接访问mat['Voltage_measured'],但这个.mat文件的结构是嵌套的:顶层键是电池编号(如'B0005'),所有测量数据都嵌套在cycles数组的每个循环条目里,并非顶层直接存在Voltage_measured这类键。

完整解决方案代码

import pandas as pd
import scipy.io as sio

# 读取.mat文件
mat = sio.loadmat('B0005.mat')

# 提取电池核心数据(顶层键为电池编号)
battery_core = mat['B0005'][0, 0]
# 获取所有循环的数据集
cycles = battery_core['cycles']

# 初始化列表存储所有时间点的测量数据
all_records = []

# 遍历每个循环
for idx in range(cycles.shape[0]):
    current_cycle = cycles[idx, 0]
    # 获取当前循环编号
    cycle_num = current_cycle['cycle'][0, 0]
    # 提取各测量数据,将二维数组转为一维(flatten())
    voltage = current_cycle['Voltage_measured'][0, 0].flatten()
    current_measured = current_cycle['Current_measured'][0, 0].flatten()
    temperature = current_cycle['Temperature_measured'][0, 0].flatten()
    current_load = current_cycle['Current_load'][0, 0].flatten()
    time = current_cycle['Time'][0, 0].flatten()
    
    # 将每个时间点的多维度数据整合为字典,加入列表
    for v, c, t, cl, tm in zip(voltage, current_measured, temperature, current_load, time):
        all_records.append({
            'cycle_number': cycle_num,
            'time': tm,
            'Voltage_measured': v,
            'Current_measured': c,
            'Temperature_measured': t,
            'Current_load': cl
        })

# 转换为DataFrame
df = pd.DataFrame(all_records)
# 查看前5行数据
print(df.head())

提取单个循环的数据(可选)

如果只需要某一个循环的数据集,比如第10个循环(索引从0开始,对应idx=9):

target_cycle = cycles[9, 0]
single_cycle_df = pd.DataFrame({
    'Voltage_measured': target_cycle['Voltage_measured'][0,0].flatten(),
    'Current_measured': target_cycle['Current_measured'][0,0].flatten(),
    'Temperature_measured': target_cycle['Temperature_measured'][0,0].flatten(),
    'Current_load': target_cycle['Current_load'][0,0].flatten(),
    'Time': target_cycle['Time'][0,0].flatten()
})
print(single_cycle_df.head())

内容的提问来源于stack exchange,提问作者Anh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:37:42