Source code for frost.models.available_time_series_response

import pprint

[docs]class AvailableTimeSeriesResponse(object): def __init__(self, series_json, sources=None): """ Initialize a response class :param list series_json: List of data elements :param SourceResponse sources: Optional instance of sources response """ self.series = series_json self.sources = sources
[docs] def to_str(self): """Returns the string representation of the data""" return pprint.pformat(self.series)
[docs] def to_df(self, compact=False): """ Returns a Pandas DataFrame representation of the model :param bool compact: If True returns a compact version with fewer columns :param bool include_sourcemeta: If True will join in metadata (name etc) about the sources fewer columns """ try: import pandas as pd from pandas import json_normalize except ImportError: # dependency missing, issue a warning import warnings warnings.warn('Pandas dependency not found, please install with pip install frost-client[pandas] to enable to_df() feature') return None else: compact_columns = [ "stationId", "sourceId", "validFrom", "timeOffset", "timeResolution", "elementId", "unit"] df = json_normalize(self.series) # change date columns to datetime date_columns = ['validFrom', 'validTo'] for c in date_columns: if c in df.columns: df[c] = pd.to_datetime(df[c]) # create an extra column with normalized sourceId df["stationId"] = df['sourceId'].apply(lambda x: x.split(':')[0]) if compact: df = df[compact_columns] # if we have metadataon the sources, merge it in if self.sources: sources_df = self.sources.to_df(compact=compact) sources_df = sources_df.add_prefix('source.') df = df.merge(sources_df, how="left", left_on="stationId", right_on="source.id") return df
[docs] def to_list(self): """Returns the sources as a Python list of dicts""" return self.series
[docs] def get_source_ids(self): """Returns unique source ids as a list""" return list(set([s["sourceId"].split(':')[0] for s in self.series]))
[docs] def to_ids_list(self): """Returns only station IDs as a Python list""" return [s['uri'] for s in self.series]