Source code for pyam.datareader

from pyam import IamDataFrame

try:
    import pandas_datareader.wb as wb
    HAS_DATAREADER = True
except ImportError:  # pragma: no cover
    wb = None
    HAS_DATAREADER = False


[docs]def read_worldbank(model='World Bank', scenario='WDI', **kwargs): """Read data from the World Bank Data Catalogue and return as IamDataFrame This function is a simple wrapper for the class :class:`pandas_datareader.wb.WorldBankReader` and the function :func:`pandas_datareader.wb.download`. Import the module to retrieve/search the list of indicators (and their id's), countries, etc. .. code-block:: python from pandas_datareader import wb Parameters ---------- model : str, optional The `model` name to be used for the returned timeseries data. scenario : str, optional The `scenario` name to be used for the returned timeseries data. kwargs passed to :func:`pandas_datareader.wb.download` Notes ----- The function :func:`pandas_datareader.wb.download` takes an `indicator` argument, which can be a string or list of strings. If the `indicator` passed to :func:`read_worldbank` is a dictionary of a World Bank id mapped to a string, the variables in the returned IamDataFrame will be renamed. The function :func:`pandas_datareader.wb.download` does not return a unit, but it can be collected for some indicators using the function :func:`pandas_datareader.wb.get_indicators`. In the current implementation, unit is defined as `n/a` for all data; this can be enhanced later (if there is interest from users). Returns ------- IamDataFrame """ if not HAS_DATAREADER: # pragma: no cover raise ImportError('Required package `pandas-datareader` not found!') data = wb.download(**kwargs) df = IamDataFrame(data.reset_index(), model=model, scenario=scenario, value=data.columns, unit='n/a', region='country') # TODO use wb.get_indicators to retrieve corrent units (where available) # if `indicator` is a mapping, use it for renaming if 'indicator' in kwargs and isinstance(kwargs['indicator'], dict): df.rename(variable=kwargs['indicator'], inplace=True) return df