如何在xarray中选择带连字符字符串索引的坐标值?
解决PyPSA+Linopy中xarray变量筛选的语法错误
问题场景
使用PyPSA搭配Linopy后端时,得到如下xarray变量对象:
Variable 'Link-p_nom': ---------------------- Variable labels: array([ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]) Coordinates: * Link-ext (Link-ext) object 'BE0 0 H2 Electrolysis' ... 'BE0 4 battery di... Attributes: binary: False
尝试用常规xarray方法筛选单个值时:
vars_link.sel(Link-ext="BE0 0 H2 Electrolysis")
触发语法错误:
vars_link.sel(Link-ext="BE0 0 H2 Electrolysis") ^^^^^^^^^ SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
错误原因
Python不允许函数的关键字参数名包含连字符-,代码里的Link-ext=会被解释器误认为是Link - ext = ...的减法表达式,从而抛出语法错误。
解决方法
有两种可行的方式实现筛选:
方式一:传入字典参数
直接把坐标名和对应筛选值组成字典,作为sel方法的参数:vars_link.sel({"Link-ext": "BE0 0 H2 Electrolysis"})方式二:通过字典解包传递关键字参数
把带连字符的坐标名放在字典里,用**解包后传递给sel:vars_link.sel(**{"Link-ext": "BE0 0 H2 Electrolysis"})
如果需要筛选多个值,只需把值改为列表即可:
vars_link.sel({"Link-ext": ["BE0 0 H2 Electrolysis", "BE0 4 battery di..."]})
内容的提问来源于stack exchange,提问作者Max Parzen
相关产品推荐
相关产品推荐

