def save_timeseries(df, outfile, standard_name, **kw): """http://cfconventions.org/Data/cf-convetions/cf-conventions-1.6/build /cf-conventions.html#idp5577536""" cube = as_cube(df, calendars={1: cf_units.CALENDAR_GREGORIAN}) cube.coord("index").rename("time") # Cast all station names to strings and renamed it. columns = cube.coord('columns').points.astype(str).tolist() cube.coord('columns').points = columns cube.coord("columns").rename("station name") cube.rename(standard_name) cube.coord("station name").var_name = 'station' longitude = kw.get("longitude") latitude = kw.get("latitude") if longitude is not None: longitude = iris.coords.AuxCoord(np.float_(longitude), var_name="lon", standard_name="longitude", long_name="station longitude", units=cf_units.Unit("degrees")) cube.add_aux_coord(longitude, data_dims=1) if latitude is not None: latitude = iris.coords.AuxCoord(np.float_(latitude), var_name="lat", standard_name="latitude", long_name="station latitude", units=cf_units.Unit("degrees")) cube.add_aux_coord(latitude, data_dims=1) cube.units = kw.get('units') station_attr = kw.get("station_attr") if station_attr is not None: cube.coord("station name").attributes.update(station_attr) cube_attr = kw.get("cube_attr") if cube_attr is not None: cube.attributes.update(cube_attr) iris.save(cube, outfile)
def save_timeseries(df, outfile, standard_name, **kw): """http://cfconventions.org/Data/cf-convetions/cf-conventions-1.6/build /cf-conventions.html#idp5577536""" cube = as_cube(df, calendars={1: iris.unit.CALENDAR_GREGORIAN}) cube.coord("index").rename("time") cube.coord("columns").rename("station name") cube.rename(standard_name) longitude = kw.get("longitude") latitude = kw.get("latitude") if longitude is not None: longitude = iris.coords.AuxCoord(longitude, var_name="lon", standard_name="longitude", long_name="station longitude", units=iris.unit.Unit("degrees")) cube.add_aux_coord(longitude, data_dims=1) if latitude is not None: latitude = iris.coords.AuxCoord(latitude, var_name="lat", standard_name="latitude", long_name="station latitude", units=iris.unit.Unit("degrees")) cube.add_aux_coord(latitude, data_dims=1) # Work around iris to get String instead of np.array object. string_list = cube.coord("station name").points.tolist() cube.coord("station name").points = string_list cube.coord("station name").var_name = 'station' station_attr = kw.get("station_attr") if station_attr is not None: cube.coord("station name").attributes.update(station_attr) cube_attr = kw.get("cube_attr") if cube_attr is not None: cube.attributes.update(cube_attr) iris.save(cube, outfile)
df['low'] = np.convolve(wt, df['u'], mode='same') df['high'] = df['u'] - df['low'] # <codecell> import pandas as pd roll_l = pd.rolling_mean(df['u'], window=40, center=True, freq='1H') roll_h = df['u'] - roll_l # <codecell> import iris from iris.pandas import as_cube cube = as_cube(df['u']) low = cube.rolling_window('index', iris.analysis.SUM, len(wt), weights=wt) t = low.coord('index') t = t.units.num2date(t.points) pad = np.zeros(window_size) * np.NaN low = np.r_[pad, low.data, pad] high = df['u'] - low # <codecell>