Brightway2 Excel数据库导入问题。写入\u数据库()

Brightway2 Excel数据库导入问题。写入\u数据库(),excel,brightway,Excel,Brightway,首先,一般来说,我对bw2和LCA是相当陌生的,所以请理解 我目前正在使用一个工具,将ecoinvent活动的交换导出到excel工作表。 在excel工作表中,我想更改金额并添加新的或删除交换。在那之后,我的计划是使用这个excel表格作为LCA的数据库 我有两个问题: 1) 目前,a有一个excel工作表,其中包含一个活动及其交换,可以加载到jupyter笔记本中。我使用了maxkoslowski的“Brightway2\u简介”中的“excel\u导入器\u示例”结构。在我不得不使用“.w

首先,一般来说,我对bw2和LCA是相当陌生的,所以请理解

我目前正在使用一个工具,将ecoinvent活动的交换导出到excel工作表。 在excel工作表中,我想更改金额并添加新的或删除交换。在那之后,我的计划是使用这个excel表格作为LCA的数据库

我有两个问题:

1) 目前,a有一个excel工作表,其中包含一个活动及其交换,可以加载到jupyter笔记本中。我使用了maxkoslowski的“Brightway2\u简介”中的“excel\u导入器\u示例”结构。在我不得不使用“.write_database()”之前,它工作正常。不知怎的,它不会起作用。我收到一条对我毫无帮助的错误消息:

*InvalidExchange                           Traceback (most recent call last)
<ipython-input-149-0d0d7c5cd566> in <module>
----> 1 imp.write_database() #hier das Problem: Database wird nicht gespeichert, obwohl Datei in Zeile drüber gefunden wird
~\Miniconda3\envs\tomaten\lib\site-packages\bw2io\importers\excel.py in write_database(self, **kwargs)
    257         """Same as base ``write_database`` method, but ``activate_parameters`` is True by default."""
    258         kwargs['activate_parameters'] = kwargs.get('activate_parameters', True)
--> 259         super(ExcelImporter, self).write_database(**kwargs)
    260 
    261     def get_activity(self, sn, ws):
~\Miniconda3\envs\tomaten\lib\site-packages\bw2io\importers\base_lci.py in write_database(self, data, delete_existing, backend, activate_parameters, **kwargs)
    238 
    239         existing.update(data)
--> 240         db.write(existing)
    241 
    242         if activate_parameters:
~\Miniconda3\envs\tomaten\lib\site-packages\wrapt\wrappers.py in __call__(self, *args, **kwargs)
    604                 return self._self_wrapper(wrapped, instance, args, kwargs)
    605 
--> 606             return self._self_wrapper(self.__wrapped__, self._self_instance,
    607                     args, kwargs)
    608 
~\Miniconda3\envs\tomaten\lib\site-packages\bw2data\project.py in writable_project(wrapped, instance, args, kwargs)
    354     if projects.read_only:
    355         raise ReadOnlyProject(READ_ONLY_PROJECT)
--> 356     return wrapped(*args, **kwargs)
~\Miniconda3\envs\tomaten\lib\site-packages\bw2data\backends\peewee\database.py in write(self, data, process)
    258         if data:
    259             try:
--> 260                 self._efficient_write_many_data(data)
    261             except:
    262                 # Purge all data from database, then reraise
~\Miniconda3\envs\tomaten\lib\site-packages\bw2data\backends\peewee\database.py in _efficient_write_many_data(self, data, indices)
    202 
    203             for index, (key, ds) in enumerate(data.items()):
--> 204                 exchanges, activities = self._efficient_write_dataset(
    205                     index, key, ds, exchanges, activities
    206                 )
~\Miniconda3\envs\tomaten\lib\site-packages\bw2data\backends\peewee\database.py in _efficient_write_dataset(self, index, key, ds, exchanges, activities)
    154         for exchange in ds.get('exchanges', []):
    155             if 'input' not in exchange or 'amount' not in exchange:
--> 156                 raise InvalidExchange
    157             if 'type' not in exchange:
    158                 raise UntypedExchange
InvalidExchange:
*无效交换回溯(最后一次最近调用)
在里面
---->1 imp.write_database()#hier das问题:数据库不存在,数据在Zeile drüber gefunden wird
写入数据库中的~\Miniconda3\envs\tomaten\lib\site packages\bw2io\importers\excel.py(self,**kwargs)
257“与基本的“write\u database”方法相同,但默认情况下“activate\u parameters”为True”
258 kwargs['activate_parameters']=kwargs.get('activate_parameters',True)
-->259 super(ExcelImporter,self).写_数据库(**kwargs)
260
261 def get_活动(自身、序列号、序列号):
写入数据库中的~\Miniconda3\envs\tomaten\lib\site packages\bw2io\importers\base\u lci.py(self、data、delete\u existing、backend、activate\u parameters、**kwargs)
238
239.现有更新(数据)
-->240 db.写入(现有)
241
242如果激活_参数:
~\Miniconda3\envs\tomaten\lib\site packages\wrapt\wrappers.py在调用中(self,*args,**kwargs)
604返回self.\u self\u包装(包装、实例、参数、kwargs)
605
-->606返回self.\u self.\u包装(self.\u包装,self.\u self.\u实例,
607 args,kwargs)
608
可写_项目中的~\Miniconda3\envs\tomaten\lib\site packages\bw2data\project.py(wrapped、instance、args、kwargs)
354如果项目为只读:
355提高只读项目(只读项目)
-->356已包装退货(*args,**kwargs)
写入中的~\Miniconda3\envs\tomaten\lib\site packages\bw2data\backends\peewee\database.py(self、data、process)
258如果数据:
259试试:
-->260自有效写入多个数据(数据)
261除:
262#清除数据库中的所有数据,然后重新访问
~\Miniconda3\envs\tomaten\lib\site packages\bw2data\backends\peewee\database.py在多个数据(自身、数据、索引)中高效写入
202
203对于枚举(data.items())中的索引,(键,ds):
-->204交换,活动=self.\u高效\u写入\u数据集(
205索引、键、ds、交易所、活动
206                 )
~\Miniconda3\envs\tomaten\lib\site packages\bw2data\backends\peewee\database.py在高效的写入数据集中(self、index、key、ds、exchange、activities)
154用于ds.get中的exchange('exchanges',[]):
155如果“输入”未兑换或“金额”未兑换:
-->156提高伤残交换率
157如果“类型”不在交换中:
158提高非类型索引更改
无效交换:
有人知道问题出在哪里吗

2) 我的计划有可能成功吗?我读到的下一个问题是,未链接的交易所似乎是一个大问题,而我所有的交易所都是未链接的atm


提前谢谢你

如果您有未链接的Exchange,则无法导入数据库

Brightway基本上是一个进行基于矩阵的计算的框架。要正确构建矩阵,对于每个数据点,我们需要知道三件事:行、列和要插入的数字

在最后提供的错误中,您会看到以下内容:

    155             if 'input' not in exchange or 'amount' not in exchange:
--> 156                 raise InvalidExchange
这不是非常有用的信息,但您可以在这里看到,
输入
(将是行;列是
输出
)或
金额
(将是数字)缺失。正如您在后面所说的“我的所有内容都未链接”,我的猜测是,
input
字段是罪魁祸首

如果您的交换是未链接的,那么我们有带数字的数据点,我们知道列索引,但不知道行。我们不能使用它们来构建矩阵,因此会产生一个错误。要解决这个问题,我们需要告诉软件如何找到正确的行

Brightway library
bw2io
使用“策略”进行链接。因为我们支持多种文件格式和心智模型,所以没有单一的方法来做事情。Brightway中的数据IO是一个很大的主题,但文档中已经介绍了它。关于如何链接数据,文档中有一节介绍