Обновление времени в формате Proleptic Gregorian в NetCDF с использованием Xarray - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть отдельные 6-часовые файлы NetCDF в год, но значение времени повреждено, т.е.timedelta64 [нс] 00:00:00 для каждого файла.Моя цель - исправить это и объединить в один объединенный файл, используя xarrays.Файл имеет CF-соглашение и время в греческом языке Proleptic.

Я пытался сохранить значения оси времени как метку времени, но я получил ошибку при записи обратно в формат .nc, говоря ValueError: не удалось предотвратить перезапись существующегоключевой календарь в attrs по переменной time.

Я пытаюсь обновить значения времени в секундах с 01-01-1970.Это работает, но проблема в том, что когда я читаю сохраненный файл, мне бы хотелось, чтобы время отображалось в фактическом гггг-мм-дд, чтобы я мог использовать метод .sel для быстрого просмотра данных.

IsЕсть лучший способ записать мой выходной файл, сохраняя стандартные соглашения Proleptic Gregorian, так что когда я читаю его обратно, моя временная ось автоматически переводится в гггг-мм-дд вместо преобразования его из секунд в формат гггг-мм-ддкаждый раз после прочтения.

import xarray as xr
big_ds = xr.open_mfdataset('path/*',   autoclose=True, concat_dim='time')
dt = pd.date_range(start=datetime(2000,1,1), end=datetime(2000,12,31,18), freq='6H')
big_ds.time.values = (dt - std_time).total_seconds()
big_ds.to_netcdf('outfile.nc')

test_ds = xr.open_dataset('outfile.nc')
test_ds.time
>><xarray.DataArray 'time' (time: 1464)>
array([9.466848e+08, 9.467064e+08, 9.467280e+08, ..., 9.782424e+08,
   9.782640e+08, 9.782856e+08])
Coordinates:
* time     (time) float64 9.467e+08 9.467e+08 ... 9.783e+08 9.783e+08
Attributes:
calendar:  proleptic_gregorian

1 Ответ

0 голосов
/ 17 ноября 2018

Коротким исправлением было добавление единиц к атрибуту времени.

big_ds.time.attrs['units'] = 'Seconds since 01/01/1970 00:00:00 UTC'

Итак, при чтении данных xarray достаточно умен, чтобы это увидеть и преобразовать значения времени, сохраненные в секундах, в datetime64[ns]чтобы можно было получить к ним доступ как yyyy-mm-dd

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...