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

如何通过Brightway2导出含Technosphere位置信息的Ecoinvent数据库?

解决Brightway2导出Excel时Technosphere位置显示"unknown"的问题

默认的write_excel()方法不会包含Technosphere交换的位置信息,这就是你看到"unknown"的原因。ActivityBrowser能显示是因为它直接读取了Brightway内部存储的交换元数据,而导出工具没有默认提取这部分内容。

以下是两种可行的解决方法:

方法一:手动构建包含位置信息的Excel表格

直接用Pandas提取活动和Technosphere交换的位置数据,自定义导出内容:

import pandas as pd
import brightway2 as bw
import bw2io as bi

# 导入数据库(保持原有步骤)
importer = bi.SingleOutputEcospold2Importer('C://Users/.../ecoinvent391_cutoff_ecoSpold02/datasets','e391_')
importer.apply_strategies()
importer.statistics()

# 提取活动及Technosphere交换的位置信息
export_data = []
for activity in importer.data:
    act_info = {
        "活动名称": activity["name"],
        "活动位置": activity.get("location", "unknown"),
        "活动类别": activity.get("categories", [])
    }
    for exchange in activity.get("exchanges", []):
        if exchange["type"] == "technosphere":
            row = act_info.copy()
            row.update({
                "Technosphere流名称": exchange["name"],
                "Technosphere位置": exchange.get("location", "unknown"),
                "数量": exchange["amount"],
                "单位": exchange.get("unit", "")
            })
            export_data.append(row)

# 导出为Excel
df = pd.DataFrame(export_data)
df.to_excel("ecoinvent_tech_with_locations.xlsx", index=False)

方法二:修改导入策略确保位置信息被保留,再自定义导出

如果导入时交换的位置信息没有被正确加载,可以添加自定义策略来提取原始ecospold文件中的位置数据:

def retain_exchange_locations(importer):
    """自定义策略:从原始ecospold数据中提取交换的位置信息"""
    for activity in importer.data:
        for exchange in activity.get("exchanges", []):
            # 从交换的原始ecospold数据中获取位置
            if "location" not in exchange and "data" in exchange:
                exchange["location"] = exchange["data"].get("location", "unknown")
    return importer

# 应用默认策略后再应用自定义策略
importer.apply_strategies()
importer.apply_strategy(retain_exchange_locations)

# 之后再用方法一中的Pandas代码导出即可

注意:如果你的交换已经链接到Brightway数据库中的活动,也可以通过exchange['input']去查询对应活动的位置,但在导入阶段(未执行write_database()前),交换可能还未完成链接,所以优先从原始data字段提取更可靠。

内容的提问来源于stack exchange,提问作者Can.C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:52:51