尝试将XArray保存到NetCDF时发生TypeError

时间:2020-05-13 13:15:54

标签: python netcdf python-xarray

请对此提供任何帮助。我有一个使用.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'等更改变量的名称,但这也会产生相同的错误。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在序列化之前,您需要使用rename()将变量重命名为字符串,而不是在DataArray上设置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

顺便说一句,考虑到变量的命名方式,它们似乎可以作为另一个维度更好,因此您有一个由latlon,{{ 1}},time