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

如何通过字符串为xarray Dataset批量创建并赋值新变量?

解决xarray Dataset用字符串批量创建新变量的问题

问题根源

Python语法不允许函数关键字参数是带引号的字符串字面量,所以直接写x.assign('temperature_f'=...)会触发语法错误。另外,x.assign()不会原地修改原Dataset,而是返回包含新变量的新对象,你原来的循环代码没有接收返回值,相当于没有对原数据做任何修改。

解决方案

1. 单个字符串变量名的写法

用字典解包语法**,把字符串变量名和对应数据组成字典传给assign():

# 创建单个新变量
x = x.assign(**{'temperature_f': x["temperature_c"] * 9 / 5 + 32})

2. 批量创建多个变量(推荐,效率更高)

通过字典推导式批量生成变量名与对应数据的映射,再一次性传给assign():

variables_names = ['temperature_f', 'temperature_h', 'temperature_i']  
variables_lambdas = [3, 6, 1]

# 构建新变量的键值对字典
new_variables = {
    var_name: x["temperature_c"] * lam / 5 + 32
    for var_name, lam in zip(variables_names, variables_lambdas)
}

# 批量添加新变量到Dataset
x = x.assign(**new_variables)

3. 循环方式(不推荐,效率较低)

如果一定要用循环,必须接收assign()的返回值:

variables_names = ['temperature_f', 'temperature_h', 'temperature_i']  
variables_lambdas = [3, 6, 1]

for name, lam in zip(variables_names, variables_lambdas):
    x = x.assign(**{name: x["temperature_c"] * lam / 5 + 32})

验证结果

执行代码后查看x的内容,会看到三个新变量已成功添加:

print(x)

输出示例:

<xarray.Dataset>
Dimensions:        (lat: 2, lon: 2)
Coordinates:
  * lat            (lat) int32 10 20
  * lon            (lon) int32 150 160
Data variables:
    temperature_c  (lat, lon) float64 ...
    precipitation  (lat, lon) float64 ...
    temperature_f  (lat, lon) float64 ...
    temperature_h  (lat, lon) float64 ...
    temperature_i  (lat, lon) float64 ...

内容的提问来源于stack exchange,提问作者Greg Madman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:35:16