我正在尝试根据来自其他地区的代理在Brightway中创建一个新活动。我希望香肠能减轻负担,并将数据集连接到适当的市场。
在此示例中,我尝试使用瑞士数据集作为代理在魁北克创建低压天然气市场。魁北克有一个高压天然气市场。还有一个中间过程(压力降低)将低压和高压市场活动联系在一起。这就是我所做的:
#db_name is the name of my consequential version of ecoinvent 3.4
data= w.extract_brightway2_databases([db_name])
CH_location = [w.equals('location','CH')]
pressure_red=[w.equals('name','natural gas pressure reduction from high to low pressure')]
ch_pressure_red_filter=CH_location+pressure_red
ch_pred=w.get_one(data,*ch_pressure_red_filter)
ch_market_lp_ng_filter=CH_location+[w.equals('name','market for natural gas, low pressure')]
ch_mlp_ng=w.get_one(data,*ch_market_lp_ng_filter)
#create a copy of the datasets and change location
qc_mlp_ng=ch_mlp_ng.copy()
qc_mlp_ng['location']='CA-QC'
qc_pred=ch_pred.copy()
qc_pred['location']='CA-QC'
new_data=[qc_mlp_ng,qc_pred]
w.write_brightway2_database(data+[qc_mlp_ng,qc_pred],'expanded_ecoinvent')
这会引发 NonuniqueCode错误,我猜想是因为创建副本时,我有多个数据集使用相同的代码。如何避免这种错误?该程序会将魁北克省所有消耗低压天然气的活动重新链接到我的低压天然气新市场吗?
答案 0 :(得分:1)
您正在创建数据集的多个副本,同时在数据集的元数据中保留相同的唯一标识符。
为避免这种情况,您可以使用Wurst python软件包中的内置函数copy_dataset()
。这将复制数据集并为您的每个副本生成唯一的uuid代码。
from wurst.transformations.utils import copy_dataset
qc_mlp_ng= copy_dataset(ch_mlp_ng)
qc_pred=copy_dataset(ch_pred)