Source code for pycif.plugins.obsparsers.obspack.parse_nc

import xarray as xr


[docs] def parse_nc(obs_file): # Open the file ds = xr.open_dataset(obs_file) # Construct the dataframe col2use = ["value", "latitude", "longitude", "altitude", "obspack_num"] df = ds[col2use].to_dataframe().rename( columns={ "value": "obs", "longitude": "lon", "latitude": "lat", "altitude": "alt" } ).set_index("obspack_num") # Deal with dates df.loc[:, "date"] = ds["time"].values # Deal with time duration if "time_interval" in ds: df.loc[:, "duration"] = \ ds["time_interval"].dt.total_seconds().values / 3600 elif "dataset_data_frequency" in ds.attrs: df.loc[:, "duration"] = 1. / ds.attrs["dataset_data_frequency"] else: raise Exception( f"No information about obs duration in the file {obs_file}.\n" "The variable 'time_interval' or the attribute 'dataset_data_frequency' " "should be defined in your ObsPack file." ) # Replace fixed parameters df.loc[:, "station"] = ds.attrs["site_code"] df.loc[:, "parameter"] = ds.attrs["dataset_parameter"] df.loc[:, "network"] = "ObsPack" df.loc[:, "obserror"] = 0. # Rescale depending on unit -> convert to ppb unit = ds["value"].attrs["units"] if unit == "mol mol-1": df.loc[:, "obs"] *= 1e9 return df