Brightway2+Premise调用NewDatabase.update_all()时出现区域匹配错误
问题描述
基于Brightway2、Premise、Ecoinvent、Biosphere数据库及Excel数据开展数字内容消费的LCA分析与场景预测,调用NewDatabase.update_all()创建未来场景时触发ValueError,错误源于ecoinvent_to_iam_location()函数,提示无法匹配ENTSO-E对应区域,且每次报错的区域标识存在差异。为解决依赖冲突,已调整部分包版本,现提供相关代码、报错堆栈及数据库创建日志。
代码片段
from premise import NewDatabase # 初始化场景数据库 ndb = NewDatabase( scenarios=["SSP2-Base"], source_db="ecoinvent 3.9.1 cutoff", source_version="3.9.1", key="my_ecoinvent_access_key", ) ndb.update_all() # 触发报错的核心调用
报错堆栈
ValueError: Could not find matching IAM location for ENTSO-E region: [FR] File "/usr/local/lib/python3.8/site-packages/premise/location_mapping.py", line 127, in ecoinvent_to_iam_location raise ValueError(f"Could not find matching IAM location for ENTSO-E region: {region}") File "/usr/local/lib/python3.8/site-packages/premise/new_database.py", line 462, in update_all self.update_electricity() File "/usr/local/lib/python3.8/site-packages/premise/new_database.py", line 684, in update_electricity iam_loc = ecoinvent_to_iam_location(ecoinvent_loc)
数据库创建日志
2024-05-20 10:02:15 - INFO - Loading ecoinvent 3.9.1 cutoff database 2024-05-20 10:07:30 - INFO - Loading Biosphere3 database 2024-05-20 10:12:45 - INFO - Initializing scenario SSP2-Base 2024-05-20 10:18:00 - ERROR - ValueError: Could not find matching IAM location for ENTSO-E region: FR
解决方案
1. 补全区域映射关系
Premise依赖ENTSO-E区域与IAM区域的映射字典,报错说明目标区域未在映射表中定义:
- 找到
premise/location_mapping.py文件,定位ENTSO_E_TO_IAM字典 - 手动添加缺失的区域映射,示例:
ENTSO_E_TO_IAM = { # 已有映射条目... "FR": "R5WEU", # 需根据实际IAM区域编码调整 "DE": "R5WEU" }
2. 验证依赖版本兼容性
即使已调整版本,仍需确认核心包版本匹配Premise官方要求:
- 运行
pip list检查当前包版本,对比Premise文档推荐的兼容版本(如Premise v1.5.x对应Brightway2 v2.4.x、Ecoinvent 3.8+) - 若存在版本不匹配,重新安装指定版本:
pip install premise==1.5.3 brightway2==2.4.5
3. 统一Ecoinvent区域格式
Ecoinvent不同版本的区域命名可能存在格式差异(如ENTSO-E FR vs FR):
- 用Brightway2查询数据库中的ENTSO-E区域格式:
import brightway2 as bw db = bw.Database("ecoinvent 3.9.1 cutoff") entso_regions = {act["location"] for act in db if "ENTSO-E" in act["location"]} print(entso_regions) - 将查询结果与
ENTSO_E_TO_IAM字典的键统一格式,若数据库区域带前缀,修改映射字典的键为对应格式。
4. 手动传入自定义映射
若Premise支持,初始化NewDatabase时直接传入自定义区域映射:
from premise import NewDatabase custom_location_map = { "FR": "R5WEU", "ES": "R5WEU" } ndb = NewDatabase( scenarios=["SSP2-Base"], source_db="ecoinvent 3.9.1 cutoff", source_version="3.9.1", key="my_ecoinvent_access_key", location_mapping=custom_location_map ) ndb.update_all()
内容的提问来源于stack exchange,提问作者754PM
相关产品推荐
相关产品推荐

