基于参数迭代生成多个DataFrame的技术实现问询
解决方案:迭代修改参数并生成多组DataFrame
你的核心需求是遍历不同的gas_flow值,对每个值计算全温度范围的热力参数,生成对应的DataFrame。原代码的问题在于只固定了一个gas_flow值,且使用全局列表会导致多次调用时数据混乱。下面是重构后的代码,完美解决这个问题:
重构后的完整代码
import math import numpy as np import pandas as pd # 定义参数范围 Tin_range = range(750, 129, -1) HTC_parameters = ['Temp','H','CP', 'RHO', 'V', 'MEU', 'Re', 'F', 'K', 'Pr', 'NU'] # 生成要迭代的gas_flow列表(修正了原代码的round位置,避免精度丢失) Rgas_flow = [round(x, 3) for x in np.arange(0.1558, 0.1558*0.3, -0.1558 * 0.05)] D = 0.09012 def calculate_htc(gas_flow): """根据给定的gas_flow计算全温度范围的HTC参数,返回带参数标记的DataFrame""" # 每次计算都初始化局部列表,避免全局数据污染 CP = [] RHO = [] V = [] MEU = [] Re = [] F = [] K = [] Pr = [] NU = [] H = [] Temp = [] for T in Tin_range: Cp = ((0.2573 * T) + 1048.8)/1000 # J/kg*K rho = 0.000001 * (T ** 2) - 0.0019 * T + 1.1684 # 密度 v = (4 * gas_flow) / (rho * math.pi * (D ** 2)) # 流速 meu = (0.0304 * T + 18.348) / 1000000 # 粘度 re = (rho * v * D) / meu # 雷诺数(Re) f = ((0.79 * np.log(re) - 1.64) ** -2) / 8 # 摩擦因子 k = (T * 0.00006) + 0.0257 # 热导率 pr = (Cp * 1000 * meu) / k # 普朗特数(Pr) # 修正了原代码中pr的指数写法,确保运算逻辑正确 Nu = (f * pr * (re - 1000)) / (1 + 12.7 * (f ** 0.5) * ((pr ** (2/3)) - 1)) # 努塞尔数(Nu) h = (Nu * k) / D # 局部对流传热系数(HTC) CP.append(round(Cp, 2)) RHO.append(round(rho, 4)) V.append(round(v, 2)) MEU.append(meu) Re.append(round(re, 2)) F.append(f) K.append(round(k, 4)) Pr.append(round(pr, 3)) NU.append(round(Nu, 2)) H.append(round(h, 2)) Temp.append(T) # 生成DataFrame并添加gas_flow标记列 df = pd.DataFrame(list(zip(Temp,H, CP, RHO, V, MEU, Re, F, K, Pr, NU)), columns=HTC_parameters) df['gas_flow'] = gas_flow return df # 遍历所有gas_flow值,收集计算结果 all_results = [] for flow in Rgas_flow: df = calculate_htc(flow) all_results.append(df) print(f"已完成gas_flow={flow}的计算") # 可选:合并所有结果为一个大DataFrame,方便整体分析 combined_df = pd.concat(all_results, ignore_index=True) print("\n合并后的完整数据预览:") print(combined_df.head())
关键改进点
- 参数化函数设计:把
gas_flow作为函数参数传入,让每次计算都是独立的,彻底避免全局变量带来的数据混乱 - 局部变量隔离:在函数内部初始化所有参数列表,确保每次调用都从零开始计算,不会残留上一次的结果
- 添加参数标记:给每个DataFrame加入
gas_flow列,后续可以轻松区分不同参数下的计算结果 - 结果灵活处理:既可以把所有结果合并成一个大表做整体分析,也可以单独保存每个参数对应的小表
扩展用法
如果需要单独保存每个gas_flow对应的结果文件,只需在循环中加入保存代码:
for flow in Rgas_flow: df = calculate_htc(flow) df.to_csv(f"htc_results_gasflow_{flow}.csv", index=False)
内容的提问来源于stack exchange,提问作者avraham glazer
相关产品推荐
相关产品推荐

