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

使用pvlib绘制光伏AC发电量时出现KeyError: 'precipitable_water'求助

问题:ModelChain运行时出现KeyError: 'precipitable_water'

我正在用pvlib库完成一个实际光伏装置的学校项目,尝试绘制ModelChain的AC发电量时遇到了如下错误:

import pvlib
from pvlib import clearsky, atmosphere, solarposition
from pvlib.modelchain import ModelChain
from pvlib.location import Location
from pvlib.pvsystem import PVSystem, Array, SingleAxisTrackerMount, AbstractMount, FixedMount
from pvlib.temperature import TEMPERATURE_MODEL_PARAMETERS

location = Location(latitude = 40.30117520975112, longitude = -3.6973221576701967, tz = "Europe/Madrid", altitude = 660, name = 'Ormazabal Getafe')
modules = pvlib.pvsystem.retrieve_sam('CECMod')
inverters = pvlib.pvsystem.retrieve_sam('CECInverter')
module = modules['JA_Solar_JAP72S01_330_SC'] 
inverter = inverters['SMA_America__STP_33_US_41__480V_'] 
temp_par = TEMPERATURE_MODEL_PARAMETERS['sapm']['open_rack_glass_glass']
system = PVSystem(surface_tilt = 19, surface_azimuth = 170, module_parameters = module, inverter_parameters = inverter,
                  temperature_model_parameters = temp_par, modules_per_string = 17, strings_per_inverter = 6) 
modelchain = ModelChain(system, location, aoi_model = 'physical')

times = pd.date_range(start = '2023-06-01', end = '2023-12-15', freq = 'h', tz = location.tz)
solar_position = location.get_solarposition(times)
clearsky = location.get_clearsky(times)
clearsky.plot(figsize = (20, 8))
plt.ylabel('Irradiance $W/m^2$')
plt.title('Irradiance in the location')
plt.show()

modelchain.run_model(clearsky)
modelchain.results.ac.plot(figsize = (20, 8))
plt.show()

错误信息:

----> 26 modelchain.run_model(clearsky)
KeyError: 'precipitable_water'

原因与解决方法

这个错误是因为你指定了aoi_model='physical'(物理入射角模型),该模型需要**可降水量(precipitable_water)**作为输入参数,但你传入的clearsky数据集里没有这个字段。

有两种解决方式:

方式一:更换AOI模型

如果不需要物理模型的高精度,可以改用不需要额外参数的AOI模型,比如'sapm'或'no_loss'。修改ModelChain的初始化代码:

modelchain = ModelChain(system, location, aoi_model='sapm')

方式二:添加可降水量数据

如果必须使用physical模型,需要计算并添加precipitable_water到输入数据中。可以用pvlib的atmosphere.precipitable_water函数计算,示例代码如下:

# 生成气温序列,这里用20℃作为示例,有实际观测数据的话替换更准确
temp_air = pd.Series(20, index=times)
# 计算可降水量
precipitable_water = pvlib.atmosphere.precipitable_water(temp_air, location.altitude)
# 将可降水量添加到clearsky数据中
clearsky['precipitable_water'] = precipitable_water

之后再运行modelchain.run_model(clearsky)即可。

内容的提问来源于stack exchange,提问作者Luis Enrique Orozco Villanueva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:25:41