尝试将xarray保存到netcdf时发生TypeError

问题描述 投票:0回答:1

感谢您对此的任何帮助。我有一个使用.to_xarray()方法从熊猫数据帧创建的xarray,其格式如下:

<xarray.Dataset>
Dimensions:  (lat: 556, lon: 1438, time: 96)
Coordinates:
  * time     (time) datetime64[ns] 2005-01-01 2006-01-01 ... 2100-01-01
  * lat      (lat) float64 -55.38 -55.12 -54.88 -54.62 ... 82.88 83.12 83.38
  * lon      (lon) float64 -69.88 -69.62 -69.38 -69.12 ... -26.12 -24.38 -24.12
Data variables:
    1.0      (lat, lon, time) float32 nan nan nan nan nan ... nan nan nan nan
    2.0      (lat, lon, time) float32 nan nan nan nan nan ... nan nan nan nan
    3.0      (lat, lon, time) float32 nan nan nan nan nan ... nan nan nan nan
    4.0      (lat, lon, time) float32 nan nan nan nan nan ... nan nan nan nan
    5.0      (lat, lon, time) float32 nan nan nan nan nan ... nan nan nan nan
    6.0      (lat, lon, time) float32 nan nan nan nan nan ... nan nan nan nan
    7.0      (lat, lon, time) float32 nan nan nan nan nan ... nan nan nan nan

当我尝试使用.to_netcdf()保存它时,出现以下错误:

TypeError: DataArray.name or Dataset key must be either a string or None for serialization to netCDF files

我曾尝试通过ds_land [1.0] .name ='class_1'等更改变量的名称,但这也会产生相同的错误。有什么想法吗?

python netcdf python-xarray
1个回答
0
投票

在序列化之前,您需要使用rename()将变量重命名为字符串,而不是在DataArray上设置rename()属性。这是因为name

variables names in netCDF must be strings

因此,将变量重命名为import xarray as xr ds = xr.Dataset() ds[1.0] = xr.DataArray([1, 2, 3]) ds[1.0].attrs['name'] = 'class_1' ds.to_netcdf('testing.nc') # this fails, as you have seen ds = ds.rename({1.0: 'class_1'}) ds.to_netcdf('testing2.nc') # this works 也可以解决问题:

'1.0'

顺便说一句,给定变量的命名方式,将它们作为另一个维度似乎更好一些,因此您有一个新变量,其尺寸为ds = xr.Dataset() ds[1.0] = xr.DataArray([1, 2, 3]) ds = ds.rename({1.0: '1.0'}) ds.to_netcdf('testing3.nc') # this also works latlontime

© www.soinside.com 2019 - 2024. All rights reserved.