如何通过字符串为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
相关产品推荐
相关产品推荐

