xarray - не может сериализовать координаты - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь использовать xarray для добавления и записи файла netCDF.Ниже приведена некоторая информация об исходном файле.

Dimensions:    (Time: 744, south_north: 289, west_east: 339)
Coordinates:
XLAT       (Time, south_north, west_east) float32 ...
XLONG      (Time, south_north, west_east) float32 ...
Dimensions without coordinates: Time, south_north, west_east
Data variables:
Times      (Time) |S19 ...
RAINNC     (Time, south_north, west_east) float32 ...
I_RAINNC   (Time, south_north, west_east) int32 ...
SNOWNC     (Time, south_north, west_east) float32 ...
GRAUPELNC  (Time, south_north, west_east) float32 ...
HAILNC     (Time, south_north, west_east) float32 ...  

Вот некоторая информация о добавленном файле (добавлены две переменные).

Dimensions:    (Time: 744, south_north: 289, west_east: 339)
Coordinates:
XLAT       (Time, south_north, west_east) float32 ...
XLONG      (Time, south_north, west_east) float32 ...
Dimensions without coordinates: Time, south_north, west_east
Data variables:
Times      (Time) |S19 ...
RAINNC     (Time, south_north, west_east) float32 0.0 0.0 0.0 0.0 0.0
I_RAINNC   (Time, south_north, west_east) int32 0 0 0 0 0 0 0 0 0 0 0 0 
SNOWNC     (Time, south_north, west_east) float32 ...
GRAUPELNC  (Time, south_north, west_east) float32 ...
HAILNC     (Time, south_north, west_east) float32 ...
PRCP       (Time, south_north, west_east) float32 0.0 0.0 0.0 0.0 0.0 
CUMPRCP    (Time, south_north, west_east) float32 0.0 0.0 0.0 0.0 0.0

Я пытаюсь написать новый файл сxarray.to_netcdf (), но я получаю эту ошибку:

ValueError: cannot serialize coordinates because variable RAINNC 
already has an attribute 'coordinates'

Есть идеи, как устранить эту ошибку?

РЕДАКТИРОВАТЬ:

Данные были получены с помощью Weather иМодель прогнозирования исследований (WRF).Данные загружаются через open_dataset () с decode_cf по умолчанию.Атрибуты RAINNC одинаковы для обоих файлов и перечислены ниже.

OrderedDict([('FieldType', 104),
         ('MemoryOrder', 'XY '),
         ('description', 'ACCUMULATED TOTAL GRID SCALE PRECIPITATION'),
         ('units', 'mm'),
         ('stagger', ''),
         ('coordinates', 'XLONG XLAT XTIME')])

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Я столкнулся с той же проблемой с файлами WRF и нашел более простой обходной путь, который заключается в установке decode_coords=False при вызове xarray.open_dataset(), например:

xr.open_dataset('wrfout_d01_2019-04-16_15_00_00', decode_coords=False).to_netcdf('test.nc')

Далее обсуждается здесь .

0 голосов
/ 22 мая 2018

Как вы загрузили первый xarray.Dataset?Какие атрибуты находятся в переменной RAINNC, (1) в файле netCDF, (2) в исходном наборе данных, загруженном с помощью xarray, и (3) в объединенном наборе данных?

Это сообщение об ошибке сообщает вам, чтоRAINNC имеет атрибут 'coordinates' в ваших объединенных наборах данных.Xarray выдает ошибку, поскольку использует атрибут 'coordinates' (в соответствии с соглашениями CF) для сохранения координат (в вашем случае XLAT и XLONG) в файлах netCDF.Однако этого не произойдет, если уже существует существующий атрибут 'coordinates', чтобы избежать перезаписи существующих данных.

Обычно этого не происходит, поскольку существующие атрибуты 'coordinates' в файлах netCDF надиск удаляется при добавлении переменных к coords в модели данных xarray.Однако это может произойти, если вы используете xarray.open_dataset() с decode_cf=False или если для создания набора данных используется какая-то ручная логика.

Простой обходной путь - удалить любой 'coordinates'атрибуты из переменных данных в вашем комбинированном наборе данных (например, del ds['RAINNC'].attrs['coordinates']), но вы должны обязательно взглянуть на эти значения в первую очередь, чтобы убедиться, что вы не удаляете важные метаданные.

...