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

如何用Pandas DataFrame实现类似MATLAB元胞数组的数据存储?

处理电池循环数据的Python数据结构方案

从MATLAB转Python处理这类数据,以下几个方案完全匹配你要的“按循环-充放电层级分割”的需求,选哪个看你后续操作习惯:

1. 嵌套字典(最贴近MATLAB元胞数组逻辑)

用字典顶层对应循环次数,第二层用数字索引对应充放电数据,和你原来data{cycle}{1/2}的调用逻辑几乎一致:

import pandas as pd

# 假设你的原始数据存在df里,包含'cycle number'、'charge capacity'、'discharge capacity'列
cycle_dict = {}

# 先按循环次数分组
grouped = df.groupby('cycle number')

for cycle_num, group in grouped:
    # 把每个循环的充放电数据存成字典,1对应充电、2对应放电
    cycle_dict[cycle_num] = {
        1: group['charge capacity'].values,  # 等价MATLAB的data{cycle_num}{1}
        2: group['discharge capacity'].values  # 等价MATLAB的data{cycle_num}{2}
    }

# 调用示例
print(cycle_dict[1][1])  # 循环1的充电容量数组
print(cycle_dict[4][2])  # 循环4的放电容量数组

2. 嵌套列表(索引式访问)

如果习惯用数字索引而非字典键,可直接用嵌套列表,注意Python列表从0开始,所以预留索引0的位置让索引1对应循环1:

max_cycle = df['cycle number'].max()
# 初始化嵌套列表,长度为最大循环数+1
cycle_list = [[] for _ in range(max_cycle + 1)]

for cycle_num, group in grouped:
    # 每个循环位置存储[充电数据, 放电数据]
    cycle_list[cycle_num] = [
        group['charge capacity'].values,
        group['discharge capacity'].values
    ]

# 调用示例
print(cycle_list[1][0])  # 循环1的充电容量(对应原来的data{1}{1})
print(cycle_list[4][1])  # 循环4的放电容量(对应原来的data{4}{2})

3. 直接用pandas GroupBy对象(最高效的数据分析方式)

如果后续还要对数据做过滤、统计、可视化等操作,没必要转成其他结构,直接用GroupBy对象更省内存,操作也更灵活:

grouped = df.groupby('cycle number')

# 获取指定循环的充放电数据
cycle1_charge = grouped.get_group(1)['charge capacity']
cycle4_discharge = grouped.get_group(4)['discharge capacity']

# 甚至可以直接做批量操作,比如计算每个循环的平均充电容量
avg_charge_per_cycle = grouped['charge capacity'].mean()

方案选择建议

  • 如果你只是需要类似MATLAB的索引访问逻辑,选嵌套字典或列表;
  • 如果你后续要做大量数据分析操作,直接用GroupBy对象,避免数据重复存储,3万行数据的情况下效率优势很明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:15:34