机械计算结果Python分析:最优数据结构与Excel导出格式问题
机械计算结果分析与Excel导出优化
1. 大数据量下的数据结构选择
字典列表在中小数据量(几万到几十万条)下完全够用,优势是直观、易实现。但当数据量达到百万级以上时,它会占用大量内存(所有数据预存在内存中),此时更推荐以下方案:
推荐方案:生成器替代列表
用生成器迭代生成数据字典,避免一次性加载所有数据到内存,处理大文件时内存占用更低:
def load_calculation_data(files): for file in files: filename = file.split(".")[0] with open(file, "r") as f: for row in f: # 替换为你的数据提取逻辑 load_number = ... datapoint_id = ... component_id = ... value = float(row) yield { 'Computation': filename, 'Load Case': load_number, 'Datapoint': datapoint_id, 'Compo': component_id, 'Value': value } # 直接从生成器创建DataFrame,无需预存所有字典 df = pd.DataFrame(load_calculation_data(["computation1.out", "computation2.out"]))
其他注意事项
- 如果数据格式固定,可直接在读取文件时构造DataFrame行数据,跳过字典列表环节;
- 嵌套字典不推荐,转成DataFrame需要额外层级拆解逻辑,反而增加复杂度。
2. 构建指定格式的多层表头Excel
要实现Computation -> Load Case -> Component的多层表头结构,需利用pandas的多层索引(MultiIndex),结合透视表或索引重组完成数据转换:
具体实现代码
import pandas as pd # 先统一列名(确保和数据提取逻辑一致) df = df.rename(columns={'LoadCase': 'Load Case', 'Component': 'Compo'}) # 构建透视表,生成多层列索引 pivot_df = df.pivot_table( index='Datapoint', # 行索引为数据点ID columns=['Computation', 'Load Case', 'Compo'], # 列层级:计算类型 -> 载荷工况 -> 分量 values='Value', aggfunc='first' # 每个(datapoint, 计算类型, 载荷, 分量)组合唯一,用first即可 ) # 确保分量按1/2/3顺序排列(可选) pivot_df = pivot_df.reindex( sorted(pivot_df.columns, key=lambda x: (x[0], x[1], x[2])), axis=1 ) # 导出Excel,merge_cells=True自动合并相同表头,贴合需求格式 pivot_df.to_excel( "myoutput.xlsx", sheet_name='Data', float_format="%.4f", merge_cells=True )
效果说明
- 导出的Excel会自动生成三层表头:第一层为计算类型(computation1/computation2),第二层为载荷工况(loadcase1/loadcase2),第三层为分量(compo1/compo2/compo3);
- 行索引为数据点ID,每个单元格对应数据点在指定计算、载荷、分量下的数值;
merge_cells=True会让相同的表头单元格自动合并,和你给出的示例格式完全匹配。
内容的提问来源于stack exchange,提问作者tristof
相关产品推荐
相关产品推荐

