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

基于参数迭代生成多个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:27:33