-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Best way to find data variables by standard_name #567
Comments
I would probably make this return an xray.Dataset object instead of a plain dict, but otherwise this looks about right: def get_std_name_vars(ds,std_name):
return ds[[k for k, v in ds.data_vars.iteritems() if 'standard_name' in v.attrs and std_name in v.standard_name]] I don't think there's a better way to do this currently. Hypothetically, we could add this to a CF-specific API for xray, e.g., as discussed in #461. |
I was thinking that the data variables that matched a specified |
How about the function below? (Stolen from pyaxiom.) def get_variables_by_attributes(ds, strict=False, **kwargs):
"""
Returns variables that match specific conditions.
* Can pass in key=value parameters and variables are returned that
contain all of the matches.
ex.:
vs = nc.get_variables_by_attributes(axis='X')
* Can pass in key=callable parameter and if the callable returns
True. The callable should accept a single parameter, the attribute
value. None is returned as the attribute valuewhen the attribute
does not exist on the variable.
ex.:
# Get Axis variables
vs = nc.get_variables_by_attributes(axis=lambda v: v in ['X', 'Y', 'Z', 'T'])
# Get variable that don't have a "axis" attribute
vs = nc.get_variables_by_attributes(axis=lambda v: v is None)
# Get variable that have a "grid_mapping" attribute
vs = nc.get_variables_by_attributes(axis=lambda v: v is not None)
* strict : True/False
If True will return only 1 variable if only one is found. Default is False.
"""
vs = []
has_value_flag = False
for vname, var in ds.iteritems():
for k, v in kwargs.items():
if callable(v):
has_value_flag = v(getattr(var, k, None))
if has_value_flag is False:
break
elif hasattr(var, k) and getattr(var, k) == v:
has_value_flag = True
else:
has_value_flag = False
break
if has_value_flag is True:
vs.append(ds[vname])
if strict:
if len(vs) == 1:
vs = vs[0]
else:
msg = "Expected only one variable. Got {!r}".format
raise ValueError(msg(vs))
return vs See it in action here. |
@shoyer this made into |
👍 -- I think this would be super-useful general functionality for the xarray community that doesn't come with any downside. |
|
Is there a way to return the data variables that match a specified
standard_name
?I came up with this, but maybe the functionality already exists or there is a better way.
as in this example:
http://nbviewer.ipython.org/gist/rsignell-usgs/5b263906e92ce47bf05e
The text was updated successfully, but these errors were encountered: