Cantera导出CSV失败及SolutionArray对象报错的解决方法问询
Cantera计算结果导出CSV解决方案
报错原因说明
你遇到的<cantera.composite.SolutionArray object at 0x7f4badca0fd0>报错,是因为使用的Cantera版本低于2.5.0,旧版本的SolutionArray没有内置to_csv方法,直接调用只会输出对象的内存地址,无法导出数据。
手动转换为Pandas DataFrame再导出的方案兼容所有Cantera版本,可解决该问题,且可以按需选择导出的字段,避免导出冗余数据。
具体修改步骤
1. 导出第一部分:单工况时间历程数据
找到第一部分中你取消注释的time_history.to_csv("time_history_TEST.csv")行,替换为以下代码:
# 构造时间序列结果DataFrame df_time_history = pd.DataFrame() # 写入基础参数 df_time_history['时间(s)'] = time_history.t df_time_history['温度(K)'] = time_history.T df_time_history['压力(Pa)'] = time_history.P # 写入所有物种质量分数,可根据需要删减字段 for sp_name in gas.species_names: df_time_history[f'Y_{sp_name}'] = time_history(sp_name).Y[:, 0] # 导出为CSV,无多余索引行 df_time_history.to_csv("time_history.csv", index=False, encoding='utf-8-sig')
2. 导出第二部分:温度与自燃延迟对应(NTC评估)数据
在第二部分的for循环跑完(所有温度工况的自燃延迟计算完成)、绘图代码之前,添加以下代码:
# 构造NTC结果DataFrame df_ignition_delay = pd.DataFrame() # 写入对应参数 df_ignition_delay['温度(K)'] = ignition_delays.T df_ignition_delay['1000/T (1/K)'] = 1000 / ignition_delays.T df_ignition_delay['自燃延迟时间(s)'] = ignition_delays.tau df_ignition_delay['压力(Pa)'] = reactor_pressure df_ignition_delay['当量比'] = 1.0 # 导出为CSV df_ignition_delay.to_csv("ignition_delay_vs_temperature.csv", index=False, encoding='utf-8-sig')
验证说明
修改后运行脚本,会在脚本运行目录下生成两个CSV文件:
time_history.csv:包含1000K工况下反应过程的时间、温度、压力、各组分质量分数数据ignition_delay_vs_temperature.csv:包含所有温度点对应的自燃延迟时间,可直接用于后续NTC行为分析
内容的提问来源于stack exchange,提问作者wundolab
相关产品推荐
相关产品推荐

