J'ai une mauvaise compréhension des variables de temps dans xarray. J'ai un fichier netcdf4 avec le temps à la fois la dimension illimitée et une variable (par exemple coordonnée variable) définie ainsi:python xarray perd l'attribut units pour la variable de temps
double time(time=59231);
:_Netcdf4Dimid = 0; // int
:units = "seconds since 2015-11-12 16:1:48.500000 0:00";
Il est également temps de convention EPIC stockées dans le fichier (parce que je vais toujours revenir en arrière ici entre les conventions code de test)
int EPIC_time(time=59231);
:units = "True Julian Day";
:epic_code = 624; // int
:datum = "Time (UTC) in True Julian Days: 2440000 = 0000 h on May 23, 1968";
:NOTE = "Decimal Julian day [days] = time [days] + (time2 [msec]/86400000 [msec/day])";
:_Netcdf4Dimid = 0; // int
:serial_number = "23881";
:sensor_type = "TRDI";
:sensor_depth = 10.367607116699219; // double
:initial_sensor_height = 1; // int
:initial_sensor_height_note = "height in meters above bottom: accurate for tripod mounted instruments";
:height_depth_units = "m";
:_FillValue = -1; // int
:_Unsigned = "true";
et il y a une variable avec l'instrument tête là aussi:
float Hdg_1215(time=59231, lat=1, lon=1);
:_FillValue = 1.0E35f; // float
:units = "degrees";
:name = "Hdg";
Pour ouvrir le fichier et de travailler avec elle, je fais cela:
import xarray as xr
import numpy as np
import datetime as dt
vars2omit = {'EPIC_time','EPIC_time2'}
ds = xr.open_dataset(infile,decode_times=True,drop_variables=vars2omit)
Je peux tracer et faire des choses avec les données. Il y a deux comportements très étranges, dont l'explication m'aidera à comprendre le fonctionnement interne de xarray.
Une fois le fichier ouvert, tenter d'accéder à l'attribut units pour la variable de temps (variable de temps de coordonnées) échoue. Pourquoi? L'attribut est dans le fichier.
print(ds['Hdg_1215'].attrs['units']) # this works
print(ds['time'].attrs['units']) # this fails, KeyError: 'units'