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

使用REFPROP TPFLSHdll处理DataFrame列报错,求无循环解决方案

问题描述

我有一个DataFrame对象data,其中包含data['T']和data['P']两列。调用TPFLSHdll函数时出现如下错误:

TypeError: cannot convert the series to <class 'float'>

相关代码:

import os
from ctREFPROP.ctREFPROP import REFPROPFunctionLibrary

# 连接Python与REFPROP库(自动读取路径)
RP = REFPROPFunctionLibrary(os.environ['RPPREFIX'])
RP.SETPATHdll(os.environ['RPPREFIX'])

RP.SETUPdll(1, 'WATER.FLD', "HMX.BNC","DEF")

D, Dl, Dv, x, y, q, e, h, s, Cv, Cp, w, ierr, herr = RP.TPFLSHdll(data['T'], data['P'], [1])

之前遇到类似问题时,通过添加.values解决:

import os
from ctREFPROP.ctREFPROP import REFPROPFunctionLibrary

# 连接Python与REFPROP库(自动读取路径)
RP = REFPROPFunctionLibrary(os.environ['RPPREFIX'])
RP.SETPATHdll(os.environ['RPPREFIX'])

RP.SETUPdll(1, 'WATER.FLD', "HMX.BNC","DEF")

D, Dl, Dv, x, y, q, e, h, s, Cv, Cp, w, ierr, herr = RP.TPFLSHdll(data['T'].values, data['P'].values, [1])

但现在添加.values后出现新错误:

TypeError: only size-1 arrays can be converted to Python scalars

请问有没有无需使用FOR循环的解决办法?

解决方法

错误原因

当传入数组形式的温度(T)和压力(P)时,组分参数需要与T/P数组长度一致,而不是单元素列表[1]——函数会尝试将单元素列表与多维数组进行匹配,导致类型不兼容错误。

代码实现

只需将组分参数修改为与T/P同长度的数组即可,无需循环:

import os
import numpy as np
from ctREFPROP.ctREFPROP import REFPROPFunctionLibrary

# 连接Python与REFPROP库(自动读取路径)
RP = REFPROPFunctionLibrary(os.environ['RPPREFIX'])
RP.SETPATHdll(os.environ['RPPREFIX'])

RP.SETUPdll(1, 'WATER.FLD', "HMX.BNC","DEF")

# 生成与T/P同长度的组分数组(单组分场景下所有元素为1)
z = np.ones_like(data['T'].values)

# 调用TPFLSHdll进行批量计算
D, Dl, Dv, x, y, q, e, h, s, Cv, Cp, w, ierr, herr = RP.TPFLSHdll(data['T'].values, data['P'].values, z)

额外说明

如果需要更简洁的写法,也可以直接用np.ones(len(data['T']))生成组分数组,效果一致。这种方式利用了REFPROP底层函数的批量计算能力,完全不需要循环遍历每一行数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:12:44