尝试将xarray保存到netcdf时出现TypeError

2024-10-01 09:41:45 发布

您现在位置:Python中文网/ 问答频道 /正文

如果您能在这方面提供帮助,我将不胜感激。我有一个xarray,它是使用.toxarray()方法从pandas数据帧创建的,其形式如下:

<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]更改变量的名称。名称='class_1'等,但这也会产生相同的错误。有什么想法吗


Tags: orto方法名称pandastime错误nan
1条回答
网友
1楼 · 发布于 2024-10-01 09:41:45

在序列化之前,需要使用^{}将变量重命名为字符串,而不是在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

另一方面,考虑到变量的命名方式,似乎它们最好作为另一个维度,因此您有一个新变量,其维度为latlontime<new dim with levels 1..7>

相关问题 更多 >