diff --git a/notebooks/scmensemble.ipynb b/notebooks/scmensemble.ipynb
new file mode 100644
index 00000000..9ee4c529
--- /dev/null
+++ b/notebooks/scmensemble.ipynb
@@ -0,0 +1,4003 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# ScmEnsemble\n",
+ "\n",
+ "In this notebook we provide an overview of the capabilities provided by scmdata's `ScmEnsemble` class.\n",
+ "This class acts as a container for one or more `ScmRun` objects which allows for the joining of data across different timebases."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Imports"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# NBVAL_IGNORE_OUTPUT\n",
+ "from scmdata import ScmEnsemble, ScmRun"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Loading data\n",
+ "\n",
+ "`ScmEnsemble`'s can read many different data types and be loaded in many different ways.\n",
+ "For a full explanation, see the docstring of `ScmEnsemble`'s `__init__` method."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "\n",
+ " Parameters\n",
+ " ----------\n",
+ " runs : list of ScmRun\n",
+ " \n"
+ ]
+ }
+ ],
+ "source": [
+ "print(ScmEnsemble.__init__.__doc__)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here we load data from a file.\n",
+ "\n",
+ "*Note:* here we load RCP26 emissions data. This originally came from http://www.pik-potsdam.de/~mmalte/rcps/ and has since been re-written into a format which can be read by scmdata using the [pymagicc](https://github.com/openclimatedata/pymagicc) library. We are not currently planning on importing Pymagicc's readers into scmdata by default, please raise an issue [here](https://github.com/openscm/scmdata/issues) if you would like us to consider doing so."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "rcp26 = ScmRun(\"rcp26_emissions.csv\", lowercase_cols=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Timeseries\n",
+ "\n",
+ "`ScmDataFrame` is ideally suited to working with timeseries data.\n",
+ "The `timeseries` method allows you to easily get the data back in wide format as a *pandas* `DataFrame`.\n",
+ "Here 'wide' format refers to representing timeseries as a row with metadata being contained in the row labels."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " time | \n",
+ " 1765-01-01 00:00:00 | \n",
+ " 1766-01-01 00:00:00 | \n",
+ " 1767-01-01 00:00:00 | \n",
+ " 1768-01-01 00:00:00 | \n",
+ " 1769-01-01 00:00:00 | \n",
+ " 1770-01-01 00:00:00 | \n",
+ " 1771-01-01 00:00:00 | \n",
+ " 1772-01-01 00:00:00 | \n",
+ " 1773-01-01 00:00:00 | \n",
+ " 1774-01-01 00:00:00 | \n",
+ " ... | \n",
+ " 2491-01-01 00:00:00 | \n",
+ " 2492-01-01 00:00:00 | \n",
+ " 2493-01-01 00:00:00 | \n",
+ " 2494-01-01 00:00:00 | \n",
+ " 2495-01-01 00:00:00 | \n",
+ " 2496-01-01 00:00:00 | \n",
+ " 2497-01-01 00:00:00 | \n",
+ " 2498-01-01 00:00:00 | \n",
+ " 2499-01-01 00:00:00 | \n",
+ " 2500-01-01 00:00:00 | \n",
+ "
\n",
+ " \n",
+ " | model | \n",
+ " scenario | \n",
+ " region | \n",
+ " variable | \n",
+ " unit | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | IMAGE | \n",
+ " RCP26 | \n",
+ " World | \n",
+ " Emissions|BC | \n",
+ " Mt BC / yr | \n",
+ " 0.000000 | \n",
+ " 0.106998 | \n",
+ " 0.133383 | \n",
+ " 0.159847 | \n",
+ " 0.186393 | \n",
+ " 0.213024 | \n",
+ " 0.239742 | \n",
+ " 0.266550 | \n",
+ " 0.293450 | \n",
+ " 0.320446 | \n",
+ " ... | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|C2F6 | \n",
+ " kt C2F6 / yr | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " ... | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|C6F14 | \n",
+ " kt C6F14 / yr | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " ... | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|CCl4 | \n",
+ " kt CCl4 / yr | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " ... | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|CF4 | \n",
+ " kt CF4 / yr | \n",
+ " 0.010763 | \n",
+ " 0.010752 | \n",
+ " 0.010748 | \n",
+ " 0.010744 | \n",
+ " 0.010740 | \n",
+ " 0.010736 | \n",
+ " 0.010731 | \n",
+ " 0.010727 | \n",
+ " 0.010723 | \n",
+ " 0.010719 | \n",
+ " ... | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 736 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "time 1765-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.000000 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010763 \n",
+ "\n",
+ "time 1766-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.106998 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010752 \n",
+ "\n",
+ "time 1767-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.133383 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010748 \n",
+ "\n",
+ "time 1768-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.159847 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010744 \n",
+ "\n",
+ "time 1769-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.186393 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010740 \n",
+ "\n",
+ "time 1770-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.213024 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010736 \n",
+ "\n",
+ "time 1771-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.239742 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010731 \n",
+ "\n",
+ "time 1772-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.266550 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010727 \n",
+ "\n",
+ "time 1773-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.293450 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010723 \n",
+ "\n",
+ "time 1774-01-01 00:00:00 ... \\\n",
+ "model scenario region variable unit ... \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.320446 ... \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 ... \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 ... \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 ... \n",
+ " Emissions|CF4 kt CF4 / yr 0.010719 ... \n",
+ "\n",
+ "time 2491-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2492-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2493-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2494-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2495-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2496-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2497-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2498-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2499-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2500-01-01 00:00:00 \n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "[5 rows x 736 columns]"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rcp26.timeseries().head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "pandas.core.frame.DataFrame"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "type(rcp26.timeseries())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Operations with scalars\n",
+ "\n",
+ "Basic operations with scalars are easily performed."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " time | \n",
+ " 1765-01-01 00:00:00 | \n",
+ " 1766-01-01 00:00:00 | \n",
+ " 1767-01-01 00:00:00 | \n",
+ " 1768-01-01 00:00:00 | \n",
+ " 1769-01-01 00:00:00 | \n",
+ " 1770-01-01 00:00:00 | \n",
+ " 1771-01-01 00:00:00 | \n",
+ " 1772-01-01 00:00:00 | \n",
+ " 1773-01-01 00:00:00 | \n",
+ " 1774-01-01 00:00:00 | \n",
+ " ... | \n",
+ " 2491-01-01 00:00:00 | \n",
+ " 2492-01-01 00:00:00 | \n",
+ " 2493-01-01 00:00:00 | \n",
+ " 2494-01-01 00:00:00 | \n",
+ " 2495-01-01 00:00:00 | \n",
+ " 2496-01-01 00:00:00 | \n",
+ " 2497-01-01 00:00:00 | \n",
+ " 2498-01-01 00:00:00 | \n",
+ " 2499-01-01 00:00:00 | \n",
+ " 2500-01-01 00:00:00 | \n",
+ "
\n",
+ " \n",
+ " | model | \n",
+ " scenario | \n",
+ " region | \n",
+ " variable | \n",
+ " unit | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | IMAGE | \n",
+ " RCP26 | \n",
+ " World | \n",
+ " Emissions|BC | \n",
+ " Mt BC / yr | \n",
+ " 0.000000 | \n",
+ " 0.106998 | \n",
+ " 0.133383 | \n",
+ " 0.159847 | \n",
+ " 0.186393 | \n",
+ " 0.213024 | \n",
+ " 0.239742 | \n",
+ " 0.266550 | \n",
+ " 0.293450 | \n",
+ " 0.320446 | \n",
+ " ... | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|C2F6 | \n",
+ " kt C2F6 / yr | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " ... | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ " 0.0857 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|C6F14 | \n",
+ " kt C6F14 / yr | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " ... | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ " 0.0887 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|CCl4 | \n",
+ " kt CCl4 / yr | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " ... | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|CF4 | \n",
+ " kt CF4 / yr | \n",
+ " 0.010763 | \n",
+ " 0.010752 | \n",
+ " 0.010748 | \n",
+ " 0.010744 | \n",
+ " 0.010740 | \n",
+ " 0.010736 | \n",
+ " 0.010731 | \n",
+ " 0.010727 | \n",
+ " 0.010723 | \n",
+ " 0.010719 | \n",
+ " ... | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ " 1.0920 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 736 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "time 1765-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.000000 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010763 \n",
+ "\n",
+ "time 1766-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.106998 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010752 \n",
+ "\n",
+ "time 1767-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.133383 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010748 \n",
+ "\n",
+ "time 1768-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.159847 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010744 \n",
+ "\n",
+ "time 1769-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.186393 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010740 \n",
+ "\n",
+ "time 1770-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.213024 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010736 \n",
+ "\n",
+ "time 1771-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.239742 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010731 \n",
+ "\n",
+ "time 1772-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.266550 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010727 \n",
+ "\n",
+ "time 1773-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.293450 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.010723 \n",
+ "\n",
+ "time 1774-01-01 00:00:00 ... \\\n",
+ "model scenario region variable unit ... \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.320446 ... \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 ... \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 ... \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 ... \n",
+ " Emissions|CF4 kt CF4 / yr 0.010719 ... \n",
+ "\n",
+ "time 2491-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2492-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2493-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2494-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2495-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2496-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2497-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2498-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2499-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "time 2500-01-01 00:00:00 \n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 1.0920 \n",
+ "\n",
+ "[5 rows x 736 columns]"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rcp26.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " time | \n",
+ " 1765-01-01 00:00:00 | \n",
+ " 1766-01-01 00:00:00 | \n",
+ " 1767-01-01 00:00:00 | \n",
+ " 1768-01-01 00:00:00 | \n",
+ " 1769-01-01 00:00:00 | \n",
+ " 1770-01-01 00:00:00 | \n",
+ " 1771-01-01 00:00:00 | \n",
+ " 1772-01-01 00:00:00 | \n",
+ " 1773-01-01 00:00:00 | \n",
+ " 1774-01-01 00:00:00 | \n",
+ " ... | \n",
+ " 2491-01-01 00:00:00 | \n",
+ " 2492-01-01 00:00:00 | \n",
+ " 2493-01-01 00:00:00 | \n",
+ " 2494-01-01 00:00:00 | \n",
+ " 2495-01-01 00:00:00 | \n",
+ " 2496-01-01 00:00:00 | \n",
+ " 2497-01-01 00:00:00 | \n",
+ " 2498-01-01 00:00:00 | \n",
+ " 2499-01-01 00:00:00 | \n",
+ " 2500-01-01 00:00:00 | \n",
+ "
\n",
+ " \n",
+ " | model | \n",
+ " scenario | \n",
+ " region | \n",
+ " variable | \n",
+ " unit | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | IMAGE | \n",
+ " RCP26 | \n",
+ " World | \n",
+ " Emissions|BC | \n",
+ " Mt BC / yr | \n",
+ " 2.000000 | \n",
+ " 2.106998 | \n",
+ " 2.133383 | \n",
+ " 2.159847 | \n",
+ " 2.186393 | \n",
+ " 2.213024 | \n",
+ " 2.239742 | \n",
+ " 2.266550 | \n",
+ " 2.293450 | \n",
+ " 2.320446 | \n",
+ " ... | \n",
+ " 5.3578 | \n",
+ " 5.3578 | \n",
+ " 5.3578 | \n",
+ " 5.3578 | \n",
+ " 5.3578 | \n",
+ " 5.3578 | \n",
+ " 5.3578 | \n",
+ " 5.3578 | \n",
+ " 5.3578 | \n",
+ " 5.3578 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|C2F6 | \n",
+ " kt C2F6 / yr | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " ... | \n",
+ " 2.0857 | \n",
+ " 2.0857 | \n",
+ " 2.0857 | \n",
+ " 2.0857 | \n",
+ " 2.0857 | \n",
+ " 2.0857 | \n",
+ " 2.0857 | \n",
+ " 2.0857 | \n",
+ " 2.0857 | \n",
+ " 2.0857 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|C6F14 | \n",
+ " kt C6F14 / yr | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " ... | \n",
+ " 2.0887 | \n",
+ " 2.0887 | \n",
+ " 2.0887 | \n",
+ " 2.0887 | \n",
+ " 2.0887 | \n",
+ " 2.0887 | \n",
+ " 2.0887 | \n",
+ " 2.0887 | \n",
+ " 2.0887 | \n",
+ " 2.0887 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|CCl4 | \n",
+ " kt CCl4 / yr | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " 2.000000 | \n",
+ " ... | \n",
+ " 2.0000 | \n",
+ " 2.0000 | \n",
+ " 2.0000 | \n",
+ " 2.0000 | \n",
+ " 2.0000 | \n",
+ " 2.0000 | \n",
+ " 2.0000 | \n",
+ " 2.0000 | \n",
+ " 2.0000 | \n",
+ " 2.0000 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|CF4 | \n",
+ " kt CF4 / yr | \n",
+ " 2.010763 | \n",
+ " 2.010752 | \n",
+ " 2.010748 | \n",
+ " 2.010744 | \n",
+ " 2.010740 | \n",
+ " 2.010736 | \n",
+ " 2.010731 | \n",
+ " 2.010727 | \n",
+ " 2.010723 | \n",
+ " 2.010719 | \n",
+ " ... | \n",
+ " 3.0920 | \n",
+ " 3.0920 | \n",
+ " 3.0920 | \n",
+ " 3.0920 | \n",
+ " 3.0920 | \n",
+ " 3.0920 | \n",
+ " 3.0920 | \n",
+ " 3.0920 | \n",
+ " 3.0920 | \n",
+ " 3.0920 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 736 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "time 1765-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.000000 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 2.010763 \n",
+ "\n",
+ "time 1766-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.106998 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 2.010752 \n",
+ "\n",
+ "time 1767-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.133383 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 2.010748 \n",
+ "\n",
+ "time 1768-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.159847 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 2.010744 \n",
+ "\n",
+ "time 1769-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.186393 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 2.010740 \n",
+ "\n",
+ "time 1770-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.213024 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 2.010736 \n",
+ "\n",
+ "time 1771-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.239742 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 2.010731 \n",
+ "\n",
+ "time 1772-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.266550 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 2.010727 \n",
+ "\n",
+ "time 1773-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.293450 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 2.010723 \n",
+ "\n",
+ "time 1774-01-01 00:00:00 ... \\\n",
+ "model scenario region variable unit ... \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.320446 ... \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.000000 ... \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.000000 ... \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.000000 ... \n",
+ " Emissions|CF4 kt CF4 / yr 2.010719 ... \n",
+ "\n",
+ "time 2491-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 3.0920 \n",
+ "\n",
+ "time 2492-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 3.0920 \n",
+ "\n",
+ "time 2493-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 3.0920 \n",
+ "\n",
+ "time 2494-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 3.0920 \n",
+ "\n",
+ "time 2495-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 3.0920 \n",
+ "\n",
+ "time 2496-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 3.0920 \n",
+ "\n",
+ "time 2497-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 3.0920 \n",
+ "\n",
+ "time 2498-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 3.0920 \n",
+ "\n",
+ "time 2499-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 3.0920 \n",
+ "\n",
+ "time 2500-01-01 00:00:00 \n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n",
+ " Emissions|C2F6 kt C2F6 / yr 2.0857 \n",
+ " Emissions|C6F14 kt C6F14 / yr 2.0887 \n",
+ " Emissions|CCl4 kt CCl4 / yr 2.0000 \n",
+ " Emissions|CF4 kt CF4 / yr 3.0920 \n",
+ "\n",
+ "[5 rows x 736 columns]"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "(rcp26 + 2).head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " time | \n",
+ " 1765-01-01 00:00:00 | \n",
+ " 1766-01-01 00:00:00 | \n",
+ " 1767-01-01 00:00:00 | \n",
+ " 1768-01-01 00:00:00 | \n",
+ " 1769-01-01 00:00:00 | \n",
+ " 1770-01-01 00:00:00 | \n",
+ " 1771-01-01 00:00:00 | \n",
+ " 1772-01-01 00:00:00 | \n",
+ " 1773-01-01 00:00:00 | \n",
+ " 1774-01-01 00:00:00 | \n",
+ " ... | \n",
+ " 2491-01-01 00:00:00 | \n",
+ " 2492-01-01 00:00:00 | \n",
+ " 2493-01-01 00:00:00 | \n",
+ " 2494-01-01 00:00:00 | \n",
+ " 2495-01-01 00:00:00 | \n",
+ " 2496-01-01 00:00:00 | \n",
+ " 2497-01-01 00:00:00 | \n",
+ " 2498-01-01 00:00:00 | \n",
+ " 2499-01-01 00:00:00 | \n",
+ " 2500-01-01 00:00:00 | \n",
+ "
\n",
+ " \n",
+ " | model | \n",
+ " scenario | \n",
+ " region | \n",
+ " variable | \n",
+ " unit | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | IMAGE | \n",
+ " RCP26 | \n",
+ " World | \n",
+ " Emissions|BC | \n",
+ " Mt BC / yr | \n",
+ " 0.000000 | \n",
+ " 0.026749 | \n",
+ " 0.033346 | \n",
+ " 0.039962 | \n",
+ " 0.046598 | \n",
+ " 0.053256 | \n",
+ " 0.059935 | \n",
+ " 0.066637 | \n",
+ " 0.073362 | \n",
+ " 0.080112 | \n",
+ " ... | \n",
+ " 0.839450 | \n",
+ " 0.839450 | \n",
+ " 0.839450 | \n",
+ " 0.839450 | \n",
+ " 0.839450 | \n",
+ " 0.839450 | \n",
+ " 0.839450 | \n",
+ " 0.839450 | \n",
+ " 0.839450 | \n",
+ " 0.839450 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|C2F6 | \n",
+ " kt C2F6 / yr | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " ... | \n",
+ " 0.021425 | \n",
+ " 0.021425 | \n",
+ " 0.021425 | \n",
+ " 0.021425 | \n",
+ " 0.021425 | \n",
+ " 0.021425 | \n",
+ " 0.021425 | \n",
+ " 0.021425 | \n",
+ " 0.021425 | \n",
+ " 0.021425 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|C6F14 | \n",
+ " kt C6F14 / yr | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " ... | \n",
+ " 0.022175 | \n",
+ " 0.022175 | \n",
+ " 0.022175 | \n",
+ " 0.022175 | \n",
+ " 0.022175 | \n",
+ " 0.022175 | \n",
+ " 0.022175 | \n",
+ " 0.022175 | \n",
+ " 0.022175 | \n",
+ " 0.022175 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|CCl4 | \n",
+ " kt CCl4 / yr | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " ... | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|CF4 | \n",
+ " kt CF4 / yr | \n",
+ " 0.002691 | \n",
+ " 0.002688 | \n",
+ " 0.002687 | \n",
+ " 0.002686 | \n",
+ " 0.002685 | \n",
+ " 0.002684 | \n",
+ " 0.002683 | \n",
+ " 0.002682 | \n",
+ " 0.002681 | \n",
+ " 0.002680 | \n",
+ " ... | \n",
+ " 0.273000 | \n",
+ " 0.273000 | \n",
+ " 0.273000 | \n",
+ " 0.273000 | \n",
+ " 0.273000 | \n",
+ " 0.273000 | \n",
+ " 0.273000 | \n",
+ " 0.273000 | \n",
+ " 0.273000 | \n",
+ " 0.273000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 736 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "time 1765-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.000000 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.002691 \n",
+ "\n",
+ "time 1766-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.026749 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.002688 \n",
+ "\n",
+ "time 1767-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.033346 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.002687 \n",
+ "\n",
+ "time 1768-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.039962 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.002686 \n",
+ "\n",
+ "time 1769-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.046598 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.002685 \n",
+ "\n",
+ "time 1770-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.053256 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.002684 \n",
+ "\n",
+ "time 1771-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.059935 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.002683 \n",
+ "\n",
+ "time 1772-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.066637 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.002682 \n",
+ "\n",
+ "time 1773-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.073362 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.002681 \n",
+ "\n",
+ "time 1774-01-01 00:00:00 ... \\\n",
+ "model scenario region variable unit ... \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.080112 ... \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.000000 ... \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.000000 ... \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 ... \n",
+ " Emissions|CF4 kt CF4 / yr 0.002680 ... \n",
+ "\n",
+ "time 2491-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.021425 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.022175 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.273000 \n",
+ "\n",
+ "time 2492-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.021425 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.022175 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.273000 \n",
+ "\n",
+ "time 2493-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.021425 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.022175 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.273000 \n",
+ "\n",
+ "time 2494-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.021425 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.022175 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.273000 \n",
+ "\n",
+ "time 2495-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.021425 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.022175 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.273000 \n",
+ "\n",
+ "time 2496-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.021425 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.022175 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.273000 \n",
+ "\n",
+ "time 2497-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.021425 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.022175 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.273000 \n",
+ "\n",
+ "time 2498-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.021425 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.022175 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.273000 \n",
+ "\n",
+ "time 2499-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.021425 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.022175 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.273000 \n",
+ "\n",
+ "time 2500-01-01 00:00:00 \n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n",
+ " Emissions|C2F6 kt C2F6 / yr 0.021425 \n",
+ " Emissions|C6F14 kt C6F14 / yr 0.022175 \n",
+ " Emissions|CCl4 kt CCl4 / yr 0.000000 \n",
+ " Emissions|CF4 kt CF4 / yr 0.273000 \n",
+ "\n",
+ "[5 rows x 736 columns]"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "(rcp26 / 4).head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`ScmRun` instances also support operations with [Pint](https://github.com/hgrecco/pint) scalars, permitting automatic unit conversion and error raising. For interested readers, the scmdata package uses the [OpenSCM-Units](https://openscm-units.readthedocs.io/) unit registry."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "to_add = 500 * ur(\"MtCO2 / yr\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "If we try to add 0.5 GtC / yr to all the timeseries, we'll get a `DimensionalityError`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Traceback (most recent call last):\n",
+ "pint.errors.DimensionalityError: Cannot convert from 'BC * megametric_ton / a' ([black_carbon] * [mass] / [time]) to 'megatCO2 / a' ([carbon] * [mass] / [time])\n"
+ ]
+ }
+ ],
+ "source": [
+ "try:\n",
+ " rcp26 + to_add\n",
+ "except DimensionalityError:\n",
+ " traceback.print_exc(limit=0, chain=False)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "However, if we filter things correctly, this operation is perfectly valid."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/home/jared/code/uom/scmdata/venv/lib/python3.7/site-packages/numpy/core/_asarray.py:83: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n",
+ " return array(a, dtype, copy=False, order=order)\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " time | \n",
+ " 1765-01-01 00:00:00 | \n",
+ " 1766-01-01 00:00:00 | \n",
+ " 1767-01-01 00:00:00 | \n",
+ " 1768-01-01 00:00:00 | \n",
+ " 1769-01-01 00:00:00 | \n",
+ " 1770-01-01 00:00:00 | \n",
+ " 1771-01-01 00:00:00 | \n",
+ " 1772-01-01 00:00:00 | \n",
+ " 1773-01-01 00:00:00 | \n",
+ " 1774-01-01 00:00:00 | \n",
+ " ... | \n",
+ " 2491-01-01 00:00:00 | \n",
+ " 2492-01-01 00:00:00 | \n",
+ " 2493-01-01 00:00:00 | \n",
+ " 2494-01-01 00:00:00 | \n",
+ " 2495-01-01 00:00:00 | \n",
+ " 2496-01-01 00:00:00 | \n",
+ " 2497-01-01 00:00:00 | \n",
+ " 2498-01-01 00:00:00 | \n",
+ " 2499-01-01 00:00:00 | \n",
+ " 2500-01-01 00:00:00 | \n",
+ "
\n",
+ " \n",
+ " | model | \n",
+ " scenario | \n",
+ " region | \n",
+ " variable | \n",
+ " unit | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | IMAGE | \n",
+ " RCP26 | \n",
+ " World | \n",
+ " Emissions|CO2|MAGICC AFOLU | \n",
+ " C * gigametric_ton / a | \n",
+ " 0.136364 | \n",
+ " 0.141702 | \n",
+ " 0.14704 | \n",
+ " 0.152379 | \n",
+ " 0.157717 | \n",
+ " 0.163055 | \n",
+ " 0.168393 | \n",
+ " 0.173732 | \n",
+ " 0.17907 | \n",
+ " 0.184408 | \n",
+ " ... | \n",
+ " 0.136364 | \n",
+ " 0.136364 | \n",
+ " 0.136364 | \n",
+ " 0.136364 | \n",
+ " 0.136364 | \n",
+ " 0.136364 | \n",
+ " 0.136364 | \n",
+ " 0.136364 | \n",
+ " 0.136364 | \n",
+ " 0.136364 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
1 rows × 736 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "time 1765-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n",
+ "\n",
+ "time 1766-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.141702 \n",
+ "\n",
+ "time 1767-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.14704 \n",
+ "\n",
+ "time 1768-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.152379 \n",
+ "\n",
+ "time 1769-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.157717 \n",
+ "\n",
+ "time 1770-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.163055 \n",
+ "\n",
+ "time 1771-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.168393 \n",
+ "\n",
+ "time 1772-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.173732 \n",
+ "\n",
+ "time 1773-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.17907 \n",
+ "\n",
+ "time 1774-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.184408 \n",
+ "\n",
+ "time ... \\\n",
+ "model scenario region variable unit ... \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a ... \n",
+ "\n",
+ "time 2491-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n",
+ "\n",
+ "time 2492-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n",
+ "\n",
+ "time 2493-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n",
+ "\n",
+ "time 2494-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n",
+ "\n",
+ "time 2495-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n",
+ "\n",
+ "time 2496-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n",
+ "\n",
+ "time 2497-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n",
+ "\n",
+ "time 2498-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n",
+ "\n",
+ "time 2499-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n",
+ "\n",
+ "time 2500-01-01 00:00:00 \n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n",
+ "\n",
+ "[1 rows x 736 columns]"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "(rcp26.filter(variable=\"Emissions|CO2|MAGICC AFOLU\") + to_add).head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This can be compared to the raw data as shown below."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " time | \n",
+ " 1765-01-01 00:00:00 | \n",
+ " 1766-01-01 00:00:00 | \n",
+ " 1767-01-01 00:00:00 | \n",
+ " 1768-01-01 00:00:00 | \n",
+ " 1769-01-01 00:00:00 | \n",
+ " 1770-01-01 00:00:00 | \n",
+ " 1771-01-01 00:00:00 | \n",
+ " 1772-01-01 00:00:00 | \n",
+ " 1773-01-01 00:00:00 | \n",
+ " 1774-01-01 00:00:00 | \n",
+ " ... | \n",
+ " 2491-01-01 00:00:00 | \n",
+ " 2492-01-01 00:00:00 | \n",
+ " 2493-01-01 00:00:00 | \n",
+ " 2494-01-01 00:00:00 | \n",
+ " 2495-01-01 00:00:00 | \n",
+ " 2496-01-01 00:00:00 | \n",
+ " 2497-01-01 00:00:00 | \n",
+ " 2498-01-01 00:00:00 | \n",
+ " 2499-01-01 00:00:00 | \n",
+ " 2500-01-01 00:00:00 | \n",
+ "
\n",
+ " \n",
+ " | model | \n",
+ " scenario | \n",
+ " region | \n",
+ " variable | \n",
+ " unit | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | IMAGE | \n",
+ " RCP26 | \n",
+ " World | \n",
+ " Emissions|CO2|MAGICC AFOLU | \n",
+ " Gt C / yr | \n",
+ " 0.0 | \n",
+ " 0.005338 | \n",
+ " 0.010677 | \n",
+ " 0.016015 | \n",
+ " 0.021353 | \n",
+ " 0.026691 | \n",
+ " 0.03203 | \n",
+ " 0.037368 | \n",
+ " 0.042706 | \n",
+ " 0.048045 | \n",
+ " ... | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
1 rows × 736 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "time 1765-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n",
+ "\n",
+ "time 1766-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.005338 \n",
+ "\n",
+ "time 1767-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.010677 \n",
+ "\n",
+ "time 1768-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.016015 \n",
+ "\n",
+ "time 1769-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.021353 \n",
+ "\n",
+ "time 1770-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.026691 \n",
+ "\n",
+ "time 1771-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.03203 \n",
+ "\n",
+ "time 1772-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.037368 \n",
+ "\n",
+ "time 1773-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.042706 \n",
+ "\n",
+ "time 1774-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.048045 \n",
+ "\n",
+ "time ... \\\n",
+ "model scenario region variable unit ... \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr ... \n",
+ "\n",
+ "time 2491-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n",
+ "\n",
+ "time 2492-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n",
+ "\n",
+ "time 2493-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n",
+ "\n",
+ "time 2494-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n",
+ "\n",
+ "time 2495-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n",
+ "\n",
+ "time 2496-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n",
+ "\n",
+ "time 2497-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n",
+ "\n",
+ "time 2498-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n",
+ "\n",
+ "time 2499-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n",
+ "\n",
+ "time 2500-01-01 00:00:00 \n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n",
+ "\n",
+ "[1 rows x 736 columns]"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rcp26.filter(variable=\"Emissions|CO2|MAGICC AFOLU\").head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Unit conversion\n",
+ "\n",
+ "The scmdata package uses the [OpenSCM-Units](https://openscm-units.readthedocs.io/) unit registry and uses the [Pint](https://github.com/hgrecco/pint) library to handle unit conversion.\n",
+ "\n",
+ "Calling the `convert_unit` method of an `ScmRun` returns a new `ScmRun` instance with converted units."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " time | \n",
+ " 1765-01-01 00:00:00 | \n",
+ " 1766-01-01 00:00:00 | \n",
+ " 1767-01-01 00:00:00 | \n",
+ " 1768-01-01 00:00:00 | \n",
+ " 1769-01-01 00:00:00 | \n",
+ " 1770-01-01 00:00:00 | \n",
+ " 1771-01-01 00:00:00 | \n",
+ " 1772-01-01 00:00:00 | \n",
+ " 1773-01-01 00:00:00 | \n",
+ " 1774-01-01 00:00:00 | \n",
+ " ... | \n",
+ " 2491-01-01 00:00:00 | \n",
+ " 2492-01-01 00:00:00 | \n",
+ " 2493-01-01 00:00:00 | \n",
+ " 2494-01-01 00:00:00 | \n",
+ " 2495-01-01 00:00:00 | \n",
+ " 2496-01-01 00:00:00 | \n",
+ " 2497-01-01 00:00:00 | \n",
+ " 2498-01-01 00:00:00 | \n",
+ " 2499-01-01 00:00:00 | \n",
+ " 2500-01-01 00:00:00 | \n",
+ "
\n",
+ " \n",
+ " | model | \n",
+ " scenario | \n",
+ " region | \n",
+ " variable | \n",
+ " unit | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | IMAGE | \n",
+ " RCP26 | \n",
+ " World | \n",
+ " Emissions|BC | \n",
+ " Mt BC / yr | \n",
+ " 0.0 | \n",
+ " 0.106998 | \n",
+ " 0.133383 | \n",
+ " 0.159847 | \n",
+ " 0.186393 | \n",
+ " 0.213024 | \n",
+ " 0.239742 | \n",
+ " 0.26655 | \n",
+ " 0.29345 | \n",
+ " 0.320446 | \n",
+ " ... | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ " 3.3578 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
1 rows × 736 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "time 1765-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.0 \n",
+ "\n",
+ "time 1766-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.106998 \n",
+ "\n",
+ "time 1767-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.133383 \n",
+ "\n",
+ "time 1768-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.159847 \n",
+ "\n",
+ "time 1769-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.186393 \n",
+ "\n",
+ "time 1770-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.213024 \n",
+ "\n",
+ "time 1771-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.239742 \n",
+ "\n",
+ "time 1772-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.26655 \n",
+ "\n",
+ "time 1773-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.29345 \n",
+ "\n",
+ "time 1774-01-01 00:00:00 ... \\\n",
+ "model scenario region variable unit ... \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.320446 ... \n",
+ "\n",
+ "time 2491-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ "\n",
+ "time 2492-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ "\n",
+ "time 2493-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ "\n",
+ "time 2494-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ "\n",
+ "time 2495-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ "\n",
+ "time 2496-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ "\n",
+ "time 2497-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ "\n",
+ "time 2498-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ "\n",
+ "time 2499-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ "\n",
+ "time 2500-01-01 00:00:00 \n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n",
+ "\n",
+ "[1 rows x 736 columns]"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rcp26.filter(variable=\"Emissions|BC\").timeseries()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " time | \n",
+ " 1765-01-01 00:00:00 | \n",
+ " 1766-01-01 00:00:00 | \n",
+ " 1767-01-01 00:00:00 | \n",
+ " 1768-01-01 00:00:00 | \n",
+ " 1769-01-01 00:00:00 | \n",
+ " 1770-01-01 00:00:00 | \n",
+ " 1771-01-01 00:00:00 | \n",
+ " 1772-01-01 00:00:00 | \n",
+ " 1773-01-01 00:00:00 | \n",
+ " 1774-01-01 00:00:00 | \n",
+ " ... | \n",
+ " 2491-01-01 00:00:00 | \n",
+ " 2492-01-01 00:00:00 | \n",
+ " 2493-01-01 00:00:00 | \n",
+ " 2494-01-01 00:00:00 | \n",
+ " 2495-01-01 00:00:00 | \n",
+ " 2496-01-01 00:00:00 | \n",
+ " 2497-01-01 00:00:00 | \n",
+ " 2498-01-01 00:00:00 | \n",
+ " 2499-01-01 00:00:00 | \n",
+ " 2500-01-01 00:00:00 | \n",
+ "
\n",
+ " \n",
+ " | model | \n",
+ " scenario | \n",
+ " region | \n",
+ " variable | \n",
+ " unit | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | IMAGE | \n",
+ " RCP26 | \n",
+ " World | \n",
+ " Emissions|BC | \n",
+ " kg BC / day | \n",
+ " 0.0 | \n",
+ " 292944.558522 | \n",
+ " 365181.6564 | \n",
+ " 437636.605065 | \n",
+ " 510316.112252 | \n",
+ " 583227.186858 | \n",
+ " 656376.947296 | \n",
+ " 729772.785763 | \n",
+ " 803422.313484 | \n",
+ " 877333.360712 | \n",
+ " ... | \n",
+ " 9.193155e+06 | \n",
+ " 9.193155e+06 | \n",
+ " 9.193155e+06 | \n",
+ " 9.193155e+06 | \n",
+ " 9.193155e+06 | \n",
+ " 9.193155e+06 | \n",
+ " 9.193155e+06 | \n",
+ " 9.193155e+06 | \n",
+ " 9.193155e+06 | \n",
+ " 9.193155e+06 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
1 rows × 736 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "time 1765-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 0.0 \n",
+ "\n",
+ "time 1766-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 292944.558522 \n",
+ "\n",
+ "time 1767-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 365181.6564 \n",
+ "\n",
+ "time 1768-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 437636.605065 \n",
+ "\n",
+ "time 1769-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 510316.112252 \n",
+ "\n",
+ "time 1770-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 583227.186858 \n",
+ "\n",
+ "time 1771-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 656376.947296 \n",
+ "\n",
+ "time 1772-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 729772.785763 \n",
+ "\n",
+ "time 1773-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 803422.313484 \n",
+ "\n",
+ "time 1774-01-01 00:00:00 ... \\\n",
+ "model scenario region variable unit ... \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 877333.360712 ... \n",
+ "\n",
+ "time 2491-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n",
+ "\n",
+ "time 2492-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n",
+ "\n",
+ "time 2493-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n",
+ "\n",
+ "time 2494-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n",
+ "\n",
+ "time 2495-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n",
+ "\n",
+ "time 2496-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n",
+ "\n",
+ "time 2497-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n",
+ "\n",
+ "time 2498-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n",
+ "\n",
+ "time 2499-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n",
+ "\n",
+ "time 2500-01-01 00:00:00 \n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n",
+ "\n",
+ "[1 rows x 736 columns]"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rcp26.filter(variable=\"Emissions|BC\").convert_unit(\"kg BC / day\").timeseries()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Note that you must filter your data first as the unit conversion is applied to all available variables. If you do not, you will receive `DimensionalityError`'s."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Traceback (most recent call last):\n",
+ "pint.errors.DimensionalityError: Cannot convert from 'C * gigametric_ton / a' ([carbon] * [mass] / [time]) to 'BC * kilogram / day' ([black_carbon] * [mass] / [time])\n"
+ ]
+ }
+ ],
+ "source": [
+ "try:\n",
+ " rcp26.convert_unit(\"kg BC / day\").timeseries()\n",
+ "except DimensionalityError:\n",
+ " traceback.print_exc(limit=0, chain=False)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Having said this, thanks to Pint's idea of contexts, we are able to trivially convert to CO2 equivalent units (as long as we restrict our conversion to variables which have a CO2 equivalent)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " time | \n",
+ " 1765-01-01 00:00:00 | \n",
+ " 1766-01-01 00:00:00 | \n",
+ " 1767-01-01 00:00:00 | \n",
+ " 1768-01-01 00:00:00 | \n",
+ " 1769-01-01 00:00:00 | \n",
+ " 1770-01-01 00:00:00 | \n",
+ " 1771-01-01 00:00:00 | \n",
+ " 1772-01-01 00:00:00 | \n",
+ " 1773-01-01 00:00:00 | \n",
+ " 1774-01-01 00:00:00 | \n",
+ " ... | \n",
+ " 2491-01-01 00:00:00 | \n",
+ " 2492-01-01 00:00:00 | \n",
+ " 2493-01-01 00:00:00 | \n",
+ " 2494-01-01 00:00:00 | \n",
+ " 2495-01-01 00:00:00 | \n",
+ " 2496-01-01 00:00:00 | \n",
+ " 2497-01-01 00:00:00 | \n",
+ " 2498-01-01 00:00:00 | \n",
+ " 2499-01-01 00:00:00 | \n",
+ " 2500-01-01 00:00:00 | \n",
+ "
\n",
+ " \n",
+ " | model | \n",
+ " scenario | \n",
+ " region | \n",
+ " variable | \n",
+ " unit | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | IMAGE | \n",
+ " RCP26 | \n",
+ " World | \n",
+ " Emissions|CH4 | \n",
+ " Mt CH4 / yr | \n",
+ " 0.000 | \n",
+ " 1.963262 | \n",
+ " 2.436448 | \n",
+ " 2.911105 | \n",
+ " 3.387278 | \n",
+ " 3.865015 | \n",
+ " 4.344362 | \n",
+ " 4.825372 | \n",
+ " 5.308094 | \n",
+ " 5.792582 | \n",
+ " ... | \n",
+ " 142.0527 | \n",
+ " 142.0527 | \n",
+ " 142.0527 | \n",
+ " 142.0527 | \n",
+ " 142.0527 | \n",
+ " 142.0527 | \n",
+ " 142.0527 | \n",
+ " 142.0527 | \n",
+ " 142.0527 | \n",
+ " 142.0527 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|CO2|MAGICC AFOLU | \n",
+ " Gt C / yr | \n",
+ " 0.000 | \n",
+ " 0.005338 | \n",
+ " 0.010677 | \n",
+ " 0.016015 | \n",
+ " 0.021353 | \n",
+ " 0.026691 | \n",
+ " 0.032030 | \n",
+ " 0.037368 | \n",
+ " 0.042706 | \n",
+ " 0.048045 | \n",
+ " ... | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ " 0.0000 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|CO2|MAGICC Fossil and Industrial | \n",
+ " Gt C / yr | \n",
+ " 0.003 | \n",
+ " 0.003000 | \n",
+ " 0.003000 | \n",
+ " 0.003000 | \n",
+ " 0.003000 | \n",
+ " 0.003000 | \n",
+ " 0.004000 | \n",
+ " 0.004000 | \n",
+ " 0.004000 | \n",
+ " 0.004000 | \n",
+ " ... | \n",
+ " -0.9308 | \n",
+ " -0.9308 | \n",
+ " -0.9308 | \n",
+ " -0.9308 | \n",
+ " -0.9308 | \n",
+ " -0.9308 | \n",
+ " -0.9308 | \n",
+ " -0.9308 | \n",
+ " -0.9308 | \n",
+ " -0.9308 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|N2O | \n",
+ " Mt N2ON / yr | \n",
+ " 0.000 | \n",
+ " 0.005191 | \n",
+ " 0.010117 | \n",
+ " 0.015043 | \n",
+ " 0.019969 | \n",
+ " 0.024896 | \n",
+ " 0.029822 | \n",
+ " 0.034750 | \n",
+ " 0.039677 | \n",
+ " 0.044605 | \n",
+ " ... | \n",
+ " 5.2823 | \n",
+ " 5.2823 | \n",
+ " 5.2823 | \n",
+ " 5.2823 | \n",
+ " 5.2823 | \n",
+ " 5.2823 | \n",
+ " 5.2823 | \n",
+ " 5.2823 | \n",
+ " 5.2823 | \n",
+ " 5.2823 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
4 rows × 736 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "time 1765-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 0.000 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.003 \n",
+ " Emissions|N2O Mt N2ON / yr 0.000 \n",
+ "\n",
+ "time 1766-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 1.963262 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.005338 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.003000 \n",
+ " Emissions|N2O Mt N2ON / yr 0.005191 \n",
+ "\n",
+ "time 1767-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 2.436448 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.010677 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.003000 \n",
+ " Emissions|N2O Mt N2ON / yr 0.010117 \n",
+ "\n",
+ "time 1768-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 2.911105 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.016015 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.003000 \n",
+ " Emissions|N2O Mt N2ON / yr 0.015043 \n",
+ "\n",
+ "time 1769-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 3.387278 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.021353 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.003000 \n",
+ " Emissions|N2O Mt N2ON / yr 0.019969 \n",
+ "\n",
+ "time 1770-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 3.865015 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.026691 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.003000 \n",
+ " Emissions|N2O Mt N2ON / yr 0.024896 \n",
+ "\n",
+ "time 1771-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 4.344362 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.032030 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.004000 \n",
+ " Emissions|N2O Mt N2ON / yr 0.029822 \n",
+ "\n",
+ "time 1772-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 4.825372 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.037368 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.004000 \n",
+ " Emissions|N2O Mt N2ON / yr 0.034750 \n",
+ "\n",
+ "time 1773-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 5.308094 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.042706 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.004000 \n",
+ " Emissions|N2O Mt N2ON / yr 0.039677 \n",
+ "\n",
+ "time 1774-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 5.792582 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.048045 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.004000 \n",
+ " Emissions|N2O Mt N2ON / yr 0.044605 \n",
+ "\n",
+ "time ... \\\n",
+ "model scenario region variable unit ... \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr ... \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr ... \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr ... \n",
+ " Emissions|N2O Mt N2ON / yr ... \n",
+ "\n",
+ "time 2491-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n",
+ " Emissions|N2O Mt N2ON / yr 5.2823 \n",
+ "\n",
+ "time 2492-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n",
+ " Emissions|N2O Mt N2ON / yr 5.2823 \n",
+ "\n",
+ "time 2493-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n",
+ " Emissions|N2O Mt N2ON / yr 5.2823 \n",
+ "\n",
+ "time 2494-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n",
+ " Emissions|N2O Mt N2ON / yr 5.2823 \n",
+ "\n",
+ "time 2495-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n",
+ " Emissions|N2O Mt N2ON / yr 5.2823 \n",
+ "\n",
+ "time 2496-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n",
+ " Emissions|N2O Mt N2ON / yr 5.2823 \n",
+ "\n",
+ "time 2497-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n",
+ " Emissions|N2O Mt N2ON / yr 5.2823 \n",
+ "\n",
+ "time 2498-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n",
+ " Emissions|N2O Mt N2ON / yr 5.2823 \n",
+ "\n",
+ "time 2499-01-01 00:00:00 \\\n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n",
+ " Emissions|N2O Mt N2ON / yr 5.2823 \n",
+ "\n",
+ "time 2500-01-01 00:00:00 \n",
+ "model scenario region variable unit \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n",
+ " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n",
+ " Emissions|N2O Mt N2ON / yr 5.2823 \n",
+ "\n",
+ "[4 rows x 736 columns]"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rcp26.filter(variable=[\"*CO2*\", \"*CH4*\", \"*N2O*\"]).timeseries()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " time | \n",
+ " 1765-01-01 00:00:00 | \n",
+ " 1766-01-01 00:00:00 | \n",
+ " 1767-01-01 00:00:00 | \n",
+ " 1768-01-01 00:00:00 | \n",
+ " 1769-01-01 00:00:00 | \n",
+ " 1770-01-01 00:00:00 | \n",
+ " 1771-01-01 00:00:00 | \n",
+ " 1772-01-01 00:00:00 | \n",
+ " 1773-01-01 00:00:00 | \n",
+ " 1774-01-01 00:00:00 | \n",
+ " ... | \n",
+ " 2491-01-01 00:00:00 | \n",
+ " 2492-01-01 00:00:00 | \n",
+ " 2493-01-01 00:00:00 | \n",
+ " 2494-01-01 00:00:00 | \n",
+ " 2495-01-01 00:00:00 | \n",
+ " 2496-01-01 00:00:00 | \n",
+ " 2497-01-01 00:00:00 | \n",
+ " 2498-01-01 00:00:00 | \n",
+ " 2499-01-01 00:00:00 | \n",
+ " 2500-01-01 00:00:00 | \n",
+ "
\n",
+ " \n",
+ " | model | \n",
+ " scenario | \n",
+ " region | \n",
+ " variable | \n",
+ " unit | \n",
+ " unit_context | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | IMAGE | \n",
+ " RCP26 | \n",
+ " World | \n",
+ " Emissions|CH4 | \n",
+ " Mt CO2 / yr | \n",
+ " AR4GWP100 | \n",
+ " 0.0 | \n",
+ " 49.081547 | \n",
+ " 60.911202 | \n",
+ " 72.777625 | \n",
+ " 84.681955 | \n",
+ " 96.625365 | \n",
+ " 108.609062 | \n",
+ " 120.634295 | \n",
+ " 132.702345 | \n",
+ " 144.814540 | \n",
+ " ... | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|CO2|MAGICC AFOLU | \n",
+ " Mt CO2 / yr | \n",
+ " AR4GWP100 | \n",
+ " 0.0 | \n",
+ " 19.573753 | \n",
+ " 39.147508 | \n",
+ " 58.721260 | \n",
+ " 78.295012 | \n",
+ " 97.868767 | \n",
+ " 117.442519 | \n",
+ " 137.016271 | \n",
+ " 156.590027 | \n",
+ " 176.163779 | \n",
+ " ... | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|CO2|MAGICC Fossil and Industrial | \n",
+ " Mt CO2 / yr | \n",
+ " AR4GWP100 | \n",
+ " 11.0 | \n",
+ " 11.000000 | \n",
+ " 11.000000 | \n",
+ " 11.000000 | \n",
+ " 11.000000 | \n",
+ " 11.000000 | \n",
+ " 14.666666 | \n",
+ " 14.666666 | \n",
+ " 14.666666 | \n",
+ " 14.666666 | \n",
+ " ... | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|N2O | \n",
+ " Mt CO2 / yr | \n",
+ " AR4GWP100 | \n",
+ " 0.0 | \n",
+ " 2.430911 | \n",
+ " 4.737559 | \n",
+ " 7.044330 | \n",
+ " 9.351227 | \n",
+ " 11.658254 | \n",
+ " 13.965417 | \n",
+ " 16.272717 | \n",
+ " 18.580161 | \n",
+ " 20.887751 | \n",
+ " ... | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
4 rows × 736 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "time 1765-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 0.0 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.0 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.0 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 0.0 \n",
+ "\n",
+ "time 1766-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 49.081547 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 19.573753 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2.430911 \n",
+ "\n",
+ "time 1767-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 60.911202 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 39.147508 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 4.737559 \n",
+ "\n",
+ "time 1768-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 72.777625 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 58.721260 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 7.044330 \n",
+ "\n",
+ "time 1769-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 84.681955 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 78.295012 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 9.351227 \n",
+ "\n",
+ "time 1770-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 96.625365 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 97.868767 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 11.658254 \n",
+ "\n",
+ "time 1771-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 108.609062 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 117.442519 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 13.965417 \n",
+ "\n",
+ "time 1772-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 120.634295 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 137.016271 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 16.272717 \n",
+ "\n",
+ "time 1773-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 132.702345 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 156.590027 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 18.580161 \n",
+ "\n",
+ "time 1774-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 144.814540 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 176.163779 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 20.887751 \n",
+ "\n",
+ "time ... \\\n",
+ "model scenario region variable unit unit_context ... \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 ... \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 ... \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 ... \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 ... \n",
+ "\n",
+ "time 2491-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2492-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2493-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2494-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2495-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2496-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2497-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2498-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2499-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2500-01-01 00:00:00 \n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "[4 rows x 736 columns]"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rcp26.filter(variable=[\"*CO2*\", \"*CH4*\", \"*N2O*\"]).convert_unit(\n",
+ " \"Mt CO2 / yr\", context=\"AR4GWP100\"\n",
+ ").timeseries()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Without the context, a `DimensionalityError` is once again raised."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Traceback (most recent call last):\n",
+ "pint.errors.DimensionalityError: Cannot convert from 'BC * megametric_ton / a' ([black_carbon] * [mass] / [time]) to 'CO2 * megametric_ton / a' ([carbon] * [mass] / [time])\n"
+ ]
+ }
+ ],
+ "source": [
+ "try:\n",
+ " rcp26.convert_unit(\"Mt CO2 / yr\").timeseries()\n",
+ "except DimensionalityError:\n",
+ " traceback.print_exc(limit=0, chain=False)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In addition, when we do a conversion with contexts, the context information is automatically added to the metadata. This ensures we can't accidentally use a different context for further conversions."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " time | \n",
+ " 1765-01-01 00:00:00 | \n",
+ " 1766-01-01 00:00:00 | \n",
+ " 1767-01-01 00:00:00 | \n",
+ " 1768-01-01 00:00:00 | \n",
+ " 1769-01-01 00:00:00 | \n",
+ " 1770-01-01 00:00:00 | \n",
+ " 1771-01-01 00:00:00 | \n",
+ " 1772-01-01 00:00:00 | \n",
+ " 1773-01-01 00:00:00 | \n",
+ " 1774-01-01 00:00:00 | \n",
+ " ... | \n",
+ " 2491-01-01 00:00:00 | \n",
+ " 2492-01-01 00:00:00 | \n",
+ " 2493-01-01 00:00:00 | \n",
+ " 2494-01-01 00:00:00 | \n",
+ " 2495-01-01 00:00:00 | \n",
+ " 2496-01-01 00:00:00 | \n",
+ " 2497-01-01 00:00:00 | \n",
+ " 2498-01-01 00:00:00 | \n",
+ " 2499-01-01 00:00:00 | \n",
+ " 2500-01-01 00:00:00 | \n",
+ "
\n",
+ " \n",
+ " | model | \n",
+ " scenario | \n",
+ " region | \n",
+ " variable | \n",
+ " unit | \n",
+ " unit_context | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | IMAGE | \n",
+ " RCP26 | \n",
+ " World | \n",
+ " Emissions|CH4 | \n",
+ " Mt CO2 / yr | \n",
+ " AR4GWP100 | \n",
+ " 0.0 | \n",
+ " 49.081547 | \n",
+ " 60.911202 | \n",
+ " 72.777625 | \n",
+ " 84.681955 | \n",
+ " 96.625365 | \n",
+ " 108.609062 | \n",
+ " 120.634295 | \n",
+ " 132.702345 | \n",
+ " 144.814540 | \n",
+ " ... | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ " 3551.317500 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|CO2|MAGICC AFOLU | \n",
+ " Mt CO2 / yr | \n",
+ " AR4GWP100 | \n",
+ " 0.0 | \n",
+ " 19.573753 | \n",
+ " 39.147508 | \n",
+ " 58.721260 | \n",
+ " 78.295012 | \n",
+ " 97.868767 | \n",
+ " 117.442519 | \n",
+ " 137.016271 | \n",
+ " 156.590027 | \n",
+ " 176.163779 | \n",
+ " ... | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ " 0.000000 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|CO2|MAGICC Fossil and Industrial | \n",
+ " Mt CO2 / yr | \n",
+ " AR4GWP100 | \n",
+ " 11.0 | \n",
+ " 11.000000 | \n",
+ " 11.000000 | \n",
+ " 11.000000 | \n",
+ " 11.000000 | \n",
+ " 11.000000 | \n",
+ " 14.666666 | \n",
+ " 14.666666 | \n",
+ " 14.666666 | \n",
+ " 14.666666 | \n",
+ " ... | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ " -3412.933333 | \n",
+ "
\n",
+ " \n",
+ " | Emissions|N2O | \n",
+ " Mt CO2 / yr | \n",
+ " AR4GWP100 | \n",
+ " 0.0 | \n",
+ " 2.430911 | \n",
+ " 4.737559 | \n",
+ " 7.044330 | \n",
+ " 9.351227 | \n",
+ " 11.658254 | \n",
+ " 13.965417 | \n",
+ " 16.272717 | \n",
+ " 18.580161 | \n",
+ " 20.887751 | \n",
+ " ... | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ " 2473.625629 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
4 rows × 736 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ "time 1765-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 0.0 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.0 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.0 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 0.0 \n",
+ "\n",
+ "time 1766-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 49.081547 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 19.573753 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2.430911 \n",
+ "\n",
+ "time 1767-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 60.911202 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 39.147508 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 4.737559 \n",
+ "\n",
+ "time 1768-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 72.777625 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 58.721260 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 7.044330 \n",
+ "\n",
+ "time 1769-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 84.681955 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 78.295012 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 9.351227 \n",
+ "\n",
+ "time 1770-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 96.625365 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 97.868767 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 11.658254 \n",
+ "\n",
+ "time 1771-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 108.609062 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 117.442519 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 13.965417 \n",
+ "\n",
+ "time 1772-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 120.634295 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 137.016271 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 16.272717 \n",
+ "\n",
+ "time 1773-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 132.702345 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 156.590027 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 18.580161 \n",
+ "\n",
+ "time 1774-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 144.814540 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 176.163779 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 20.887751 \n",
+ "\n",
+ "time ... \\\n",
+ "model scenario region variable unit unit_context ... \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 ... \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 ... \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 ... \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 ... \n",
+ "\n",
+ "time 2491-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2492-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2493-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2494-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2495-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2496-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2497-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2498-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2499-01-01 00:00:00 \\\n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "time 2500-01-01 00:00:00 \n",
+ "model scenario region variable unit unit_context \n",
+ "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n",
+ " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n",
+ " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n",
+ " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n",
+ "\n",
+ "[4 rows x 736 columns]"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "ar4gwp100_converted = rcp26.filter(\n",
+ " variable=[\"*CO2*\", \"*CH4*\", \"*N2O*\"]\n",
+ ").convert_unit(\"Mt CO2 / yr\", context=\"AR4GWP100\")\n",
+ "ar4gwp100_converted.timeseries()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Trying to convert without a context, or with a different context, raises an error."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Traceback (most recent call last):\n",
+ "ValueError: Existing unit conversion context(s), `['AR4GWP100']`, doesn't match input context, `None`, drop `unit_context` metadata before doing conversion\n"
+ ]
+ }
+ ],
+ "source": [
+ "try:\n",
+ " ar4gwp100_converted.convert_unit(\"Mt CO2 / yr\")\n",
+ "except ValueError:\n",
+ " traceback.print_exc(limit=0, chain=False)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Traceback (most recent call last):\n",
+ "ValueError: Existing unit conversion context(s), `['AR4GWP100']`, doesn't match input context, `AR5GWP100`, drop `unit_context` metadata before doing conversion\n"
+ ]
+ }
+ ],
+ "source": [
+ "try:\n",
+ " ar4gwp100_converted.convert_unit(\"Mt CO2 / yr\", context=\"AR5GWP100\")\n",
+ "except ValueError:\n",
+ " traceback.print_exc(limit=0, chain=False)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Metadata handling\n",
+ "\n",
+ "`ScmRun` instances are strict with respect to metadata handling. If you either try to either a) instantiate an `ScmRun` instance with duplicate metadata or b) change an existing `ScmRun` instance so that it has duplicate metadata then you will receive a `NonUniqueMetadataError`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Traceback (most recent call last):\n",
+ "scmdata.errors.NonUniqueMetadataError: Duplicate metadata (numbers show how many times the given metadata is repeated).\n",
+ " variable unit model scenario region repeats\n",
+ "0 Emissions Gt idealised idealised World 3\n"
+ ]
+ }
+ ],
+ "source": [
+ "try:\n",
+ " ScmRun(\n",
+ " data=np.arange(6).reshape(2, 3),\n",
+ " index=[10, 20],\n",
+ " columns={\n",
+ " \"variable\": \"Emissions\",\n",
+ " \"unit\": \"Gt\",\n",
+ " \"model\": \"idealised\",\n",
+ " \"scenario\": \"idealised\",\n",
+ " \"region\": \"World\",\n",
+ " },\n",
+ " )\n",
+ "except NonUniqueMetadataError:\n",
+ " traceback.print_exc(limit=0, chain=False)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Traceback (most recent call last):\n",
+ "scmdata.errors.NonUniqueMetadataError: Duplicate metadata (numbers show how many times the given metadata is repeated).\n",
+ " model scenario region variable unit repeats\n",
+ "0 IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 2\n",
+ "4 IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Mt N / yr 2\n"
+ ]
+ }
+ ],
+ "source": [
+ "# NBVAL_IGNORE_OUTPUT\n",
+ "try:\n",
+ " rcp26[\"variable\"] = \"Emissions|CO2|MAGICC AFOLU\"\n",
+ "except NonUniqueMetadataError:\n",
+ " traceback.print_exc(limit=0, chain=False)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The `meta` attribute provides `Timeseries` specific metadata. There is also a `metadata` attribute which provides metadata for the `ScmRun` instance.\n",
+ "\n",
+ "These metadata can be used to store information about the collection of runs as a whole, such as the file where the data are stored or longer-form information about a particular dataset."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'filename': 'rcp26_emissions.csv'}"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rcp26.metadata[\"filename\"] = \"rcp26_emissions.csv\"\n",
+ "rcp26.metadata"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Convenience methods\n",
+ "\n",
+ "Below we showcase a few convenience methods of `ScmRun`. These will grow over time, please add a pull request adding more where they are useful!"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### get_unique_meta\n",
+ "\n",
+ "This method helps with getting the unique metadata values in an `ScmRun`. Here we show how it can be useful. Check out its docstring for full details. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "By itself, it doesn't do anything special, just returns the unique metadata values as a list."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['Emissions|CO2|MAGICC AFOLU']"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rcp26.get_unique_meta(\"variable\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "However, it can be useful if you expect there to only be one unique metadata value. In such a case, you can use the `no_duplicates` argument to ensure that you only get a single value as its native type (not a list) and that an error will be raised if this isn't the case."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'IMAGE'"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rcp26.get_unique_meta(\"model\", no_duplicates=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Traceback (most recent call last):\n",
+ "ValueError: `unit` column is not unique (found values: ['Mt BC / yr', 'kt C2F6 / yr', 'kt C6F14 / yr', 'kt CCl4 / yr', 'kt CF4 / yr', 'kt CFC11 / yr', 'kt CFC113 / yr', 'kt CFC114 / yr', 'kt CFC115 / yr', 'kt CFC12 / yr', 'kt CH3Br / yr', 'kt CH3CCl3 / yr', 'kt CH3Cl / yr', 'Mt CH4 / yr', 'Mt CO / yr', 'Gt C / yr', 'kt HCFC141b / yr', 'kt HCFC142b / yr', 'kt HCFC22 / yr', 'kt HFC125 / yr', 'kt HFC134a / yr', 'kt HFC143a / yr', 'kt HFC227ea / yr', 'kt HFC23 / yr', 'kt HFC245fa / yr', 'kt HFC32 / yr', 'kt HFC4310 / yr', 'kt Halon1202 / yr', 'kt Halon1211 / yr', 'kt Halon1301 / yr', 'kt Halon2402 / yr', 'Mt N2ON / yr', 'Mt N / yr', 'Mt NMVOC / yr', 'Mt OC / yr', 'kt SF6 / yr', 'Mt S / yr'])\n"
+ ]
+ }
+ ],
+ "source": [
+ "try:\n",
+ " rcp26.get_unique_meta(\"unit\", no_duplicates=True)\n",
+ "except ValueError:\n",
+ " traceback.print_exc(limit=0, chain=False)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.6"
+ },
+ "pycharm": {
+ "stem_cell": {
+ "cell_type": "raw",
+ "metadata": {
+ "collapsed": false
+ },
+ "source": []
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/src/scmdata/__init__.py b/src/scmdata/__init__.py
index cce9b11c..90ead036 100644
--- a/src/scmdata/__init__.py
+++ b/src/scmdata/__init__.py
@@ -8,6 +8,7 @@
from scmdata.run import ScmRun, run_append # noqa: F401, E402
+from scmdata.ensemble import ScmEnsemble, ensemble_append # noqa: F401, E402
# TODO: remove in next major release
REQUIRED_COLS = ScmRun.required_cols # noqa
diff --git a/src/scmdata/ensemble.py b/src/scmdata/ensemble.py
new file mode 100644
index 00000000..5f3e3f42
--- /dev/null
+++ b/src/scmdata/ensemble.py
@@ -0,0 +1,226 @@
+"""
+:class:`ScmEnsemble` provides a container for holding data from different model runs.
+"""
+
+import warnings
+
+import numpy as np
+import pandas as pd
+
+from scmdata.plotting import inject_plotting_methods
+from scmdata.run import BaseScmRun
+
+
+class ScmEnsemble:
+ """
+ Container for holding multiple :obj:`ScmRun` objects
+ """
+
+ meta_col = "run_id"
+ """
+ str: Name of meta containing a unique identifer for each run
+
+ If no value is provided, then an implicit value is create. This ensures that every timeseries
+ has unique metadata
+ """
+
+ def __init__(self, runs=None):
+ """
+
+ Parameters
+ ----------
+ runs : list of ScmRun
+ """
+
+ if runs is None:
+ runs = []
+
+ self._runs = runs
+ self._run_ids = np.arange(len(runs))
+
+ def __len__(self):
+ return self.num_timeseries
+
+ @property
+ def num_timeseries(self):
+ if not self.num_runs:
+ return 0
+ return sum([len(r) for r in self._runs])
+
+ @property
+ def num_runs(self):
+ return len(self._runs)
+
+ @property
+ def run_ids(self):
+ """
+ Run identifier
+
+ Currently ranges from 0 -> num_runs - 1. These run ids are not preserved
+ when appending
+
+ Returns
+ -------
+ list of int
+ """
+ return self._run_ids.tolist()
+
+ def __repr__(self):
+ return "".format(
+ self.num_runs, self.num_timeseries
+ )
+
+ def __iter__(self):
+ return zip(self._run_ids, self._runs)
+
+ def __getitem__(self, item):
+ # Convert to multiindex?
+
+ if item in ["time", "year"]:
+ # Drop duplicate years
+ res = (
+ pd.concat([r[item] for r in self._runs])
+ .drop_duplicates()
+ .reset_index(drop=True)
+ )
+ else:
+ items = []
+ for r in self._runs:
+ try:
+ items.append(r[item])
+ except KeyError:
+ continue
+ if not len(items):
+ raise KeyError("[{}] is not in metadata".format(item))
+
+ res = pd.concat(items)
+
+ return res
+
+ def get_unique_meta(self, meta, no_duplicates=False):
+ """
+ Get unique values in a metadata column.
+
+ Parameters
+ ----------
+ meta
+ Column to retrieve metadata for
+
+ no_duplicates
+ Should I raise an error if there is more than one unique value in the
+ metadata column?
+
+ Raises
+ ------
+ ValueError
+ There is more than one unique value in the metadata column and
+ ``no_duplicates`` is ``True``.
+
+ Returns
+ -------
+ [List[Any], Any]
+ List of unique metadata values. If ``no_duplicates`` is ``True`` the
+ metadata value will be returned (rather than a list).
+ """
+ vals = self[meta].unique().tolist()
+ if no_duplicates:
+ if len(vals) != 1:
+ raise ValueError(
+ "`{}` column is not unique (found values: {})".format(meta, vals)
+ )
+
+ return vals[0]
+
+ return vals
+
+ def copy(self, deep=True):
+ if deep:
+ runs = [r.copy() for r in self.runs]
+ else:
+ runs = self.runs
+ return ScmEnsemble(runs)
+
+ @property
+ def runs(self):
+ # copy so not directly modifiable
+ return self._runs[:]
+
+ def filter(self, inplace=False, keep=True, **kwargs):
+ if inplace:
+ for r in self._runs:
+ r.filter(inplace=True, keep=keep, **kwargs)
+ else:
+ return ScmEnsemble(
+ [r.filter(inplace=False, keep=keep, **kwargs) for r in self.runs]
+ )
+
+ def timeseries(self, **kwargs):
+ if not len(self.runs):
+ return pd.DataFrame()
+
+ unique_keys = set(
+ [l for r in self.runs for l in r.meta_attributes] + [self.meta_col]
+ )
+ unique_keys = sorted(unique_keys)
+
+ def _get_timeseries(run_id, r):
+ df = r.timeseries(**kwargs)
+ if self.meta_col in df.index.names:
+ warnings.warn("Overriding {} meta column")
+ df = df.reset_index(self.meta_col)
+
+ df[self.meta_col] = run_id
+ df = df.set_index(self.meta_col, append=True)
+
+ # Add in missing levels as needed
+ for l in unique_keys:
+ if l not in df.index.names:
+ df[l] = pd.NA
+ df = df.set_index(l, append=True)
+
+ # reorder columns so they are in alphabetical order
+ df.index = df.index.reorder_levels(unique_keys)
+ return df
+
+ return pd.concat([_get_timeseries(run_id, r) for run_id, r in self])
+
+ def append(
+ self, run, inplace=False,
+ ):
+ return ensemble_append([self, run], inplace=inplace)
+
+
+def ensemble_append(ensemble_or_runs, inplace=False):
+ if not isinstance(ensemble_or_runs, list):
+ raise TypeError("ensemble_or_runs is not a list")
+
+ if not len(ensemble_or_runs):
+ raise ValueError("Nothing to append")
+
+ first = ensemble_or_runs[0]
+ if inplace:
+ if not isinstance(first, ScmEnsemble):
+ raise TypeError("Can only append inplace to an ScmEnsemble")
+ ret = first
+ else:
+ if isinstance(first, ScmEnsemble):
+ ret = first.copy()
+ elif isinstance(first, BaseScmRun):
+ ret = ScmEnsemble([first])
+ else:
+ raise TypeError("Cannot handle appending type {}".format(type(first)))
+
+ for run in ensemble_or_runs[1:]:
+ if isinstance(run, ScmEnsemble):
+ for r_id, r in run:
+ ret._runs.append(r)
+ elif isinstance(run, BaseScmRun):
+ ret._runs.append(run)
+ else:
+ raise TypeError("Cannot handle appending type {}".format(type(run)))
+ ret._run_ids = np.arange(ret.num_runs)
+ if not inplace:
+ return ret
+
+
+inject_plotting_methods(ScmEnsemble)
diff --git a/tests/conftest.py b/tests/conftest.py
index 89ff6632..83266211 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -159,6 +159,10 @@
TEST_RUN_TS = np.array([[1, 6.0, 6], [0.5, 3, 3]]).T
+class CustomScmRun(BaseScmRun):
+ required_cols = ["variable", "unit", "scenario", "model"]
+
+
@pytest.fixture
def test_data_path():
return TEST_DATA
@@ -265,6 +269,20 @@ def base_scm_run():
)
+@pytest.fixture(scope="function")
+def custom_scm_run():
+ yield CustomScmRun(
+ np.arange(12).reshape(3, 4),
+ index=[2000, 2010, 2020],
+ columns={
+ "variable": ["variable_a", "variable_b", "variable_a", "variable_b"],
+ "unit": "unspecified",
+ "scenario": ["scenario_a", "scenario_a", "scenario_b", "scenario_b"],
+ "model": "model",
+ },
+ )
+
+
_misru = [
"a_model",
"a_iam",
diff --git a/tests/unit/test_ensemble.py b/tests/unit/test_ensemble.py
new file mode 100644
index 00000000..13c82c94
--- /dev/null
+++ b/tests/unit/test_ensemble.py
@@ -0,0 +1,272 @@
+import datetime as dt
+import re
+
+import numpy as np
+import numpy.testing as npt
+import pandas as pd
+import pandas.testing as pdt
+import pytest
+
+from scmdata.ensemble import ScmEnsemble, ensemble_append
+from scmdata.run import ScmRun
+
+inplace_param = pytest.mark.parametrize("inplace", [True, False])
+
+
+@pytest.fixture(scope="function")
+def ensemble(scm_run):
+ return ScmEnsemble(
+ [
+ scm_run,
+ scm_run.filter(variable="Primary Energy").interpolate(
+ [dt.datetime(y, 1, 1) for y in range(2010, 2026, 5)]
+ ),
+ ]
+ )
+
+
+def test_ensemble(scm_run):
+ ensemble = ScmEnsemble([scm_run, scm_run])
+
+ assert len(ensemble) == len(scm_run) * 2
+ assert ensemble.num_timeseries == len(scm_run) * 2
+ assert ensemble.num_runs == 2
+
+
+def test_ensemble_num_timeseries(ensemble):
+ assert ScmEnsemble().num_timeseries == 0
+
+ assert ensemble.num_timeseries == sum([len(r) for r in ensemble.runs])
+ assert ensemble.num_timeseries > 0
+
+
+def test_ensemble_repr(ensemble):
+ res = repr(ensemble)
+
+ assert "scmdata.ensemble.ScmEnsemble" in res
+ assert "runs: {}".format(ensemble.num_runs) in res
+ assert "timeseries: {}".format(ensemble.num_timeseries) in res
+
+
+def test_ensemble_copy(ensemble):
+ ensemble_copy = ensemble.copy(deep=False)
+ assert id(ensemble) != id(ensemble_copy)
+
+ for l, r in zip(ensemble.runs, ensemble_copy.runs):
+ assert id(l) == id(r)
+
+ ensemble_copy = ensemble.copy(deep=True)
+ assert id(ensemble) != id(ensemble_copy)
+
+ for l, r in zip(ensemble.runs, ensemble_copy.runs):
+ assert id(l) != id(r)
+
+
+@pytest.mark.parametrize("item", ("time", "year", "scenario", "variable"))
+def test_ensemble_getitem(ensemble, item):
+ if item == "year":
+ assert isinstance(ensemble[item], pd.Series)
+ npt.assert_array_almost_equal(ensemble["year"], [2005, 2010, 2015, 2020, 2025])
+ elif item == "time":
+ assert isinstance(ensemble[item], pd.Series)
+ assert np.all(
+ ensemble["time"]
+ == [dt.datetime(y, 1, 1) for y in [2005, 2010, 2015, 2020, 2025]]
+ )
+ else:
+ assert isinstance(ensemble[item], pd.Series)
+ exp = pd.concat([r[item] for r in ensemble.runs])
+ pdt.assert_series_equal(ensemble[item], exp)
+
+
+def test_ensemble_timeseries(ensemble):
+ res = ensemble.timeseries()
+
+ npt.assert_array_almost_equal(ensemble.runs[0]["year"], [2005, 2010, 2015])
+ npt.assert_array_almost_equal(ensemble.runs[1]["year"], [2010, 2015, 2020, 2025])
+ npt.assert_array_almost_equal(res.columns.year, [2005, 2010, 2015, 2020, 2025])
+
+ # index should be in order
+ assert res.index.names == sorted(res.index.names)
+
+ def _get_timeseries(idx, r):
+ ts = r.timeseries()
+ ts["run_id"] = idx
+ ts = ts.set_index("run_id", append=True)
+
+ return ts
+
+ exp = pd.concat([_get_timeseries(run_id, r) for run_id, r in ensemble])
+ exp.index = exp.index.reorder_levels(sorted(exp.index.names))
+
+ pd.testing.assert_frame_equal(res, exp)
+
+ assert np.all(np.isnan(exp.xs(0, level="run_id").loc[:, "2020-01-01":"2025-01-01"]))
+
+ # Check that subset is the same
+ pdt.assert_frame_equal(
+ ensemble.runs[0].timeseries().reset_index(),
+ res.xs(0, level="run_id").dropna(how="all", axis="columns").reset_index(),
+ check_like=True, # To remove once #97 is resolved
+ )
+
+
+def test_ensemble_timeseries_empty():
+ res = ScmEnsemble().timeseries()
+ assert res.empty
+
+
+def test_ensemble_timeseries_overlapping(ensemble):
+ ensemble.runs[0]["run_id"] = 72
+ with pytest.warns(UserWarning,):
+ res = ensemble.timeseries()
+
+ run_ids = res.index.get_level_values(level="run_id")
+ pdt.assert_index_equal(run_ids, pd.Index([0, 0, 0, 1, 1], name="run_id"))
+
+ ensemble.meta_col = "ensemble_member"
+ with pytest.warns(None) as record:
+ res = ensemble.timeseries()
+ assert len(record) == 0
+
+ run_ids = res.index.get_level_values(level="run_id")
+ pdt.assert_index_equal(
+ run_ids,
+ pd.Index([72, 72, 72, pd.NA, pd.NA], name="run_id"),
+ exact=False,
+ check_exact=False,
+ )
+ run_ids = res.index.get_level_values(level="ensemble_member")
+ pdt.assert_index_equal(run_ids, pd.Index([0, 0, 0, 1, 1], name="ensemble_member"))
+
+
+@inplace_param
+def test_ensemble_filter_basic(ensemble, inplace):
+ res = ensemble.filter(scenario="a_scenario2", inplace=inplace)
+
+ if inplace:
+ assert res is None
+ res = ensemble
+ else:
+ assert id(res) != id(ensemble)
+ assert len(res) != id(ensemble)
+
+ assert np.all(res["scenario"] == "a_scenario2")
+
+
+@inplace_param
+def test_ensemble_append(ensemble, scm_run, inplace):
+ orig = ensemble.copy()
+ res = ensemble_append([ensemble, ensemble.copy()], inplace=inplace)
+
+ if inplace:
+ assert res is None
+ res = ensemble
+ else:
+ assert id(res) != id(ensemble)
+
+ assert isinstance(res, ScmEnsemble)
+
+ assert len(res) == len(orig) * 2
+
+
+def test_ensemble_append_wrong_first(ensemble, scm_run):
+ with pytest.raises(TypeError, match="Can only append inplace to an ScmEnsemble"):
+ ensemble_append([scm_run, ensemble], inplace=True)
+
+
+def test_ensemble_append_mixed(ensemble, scm_run):
+ res = ensemble_append([ensemble, ensemble])
+ assert isinstance(res, ScmEnsemble)
+ assert res.num_runs == 4
+
+ res = ensemble_append([ensemble, scm_run])
+ assert isinstance(res, ScmEnsemble)
+ assert res.num_runs == 3
+
+ res = ensemble.append(scm_run)
+ assert isinstance(res, ScmEnsemble)
+ assert res.num_runs == 3
+
+ res = ensemble_append([scm_run])
+ assert isinstance(res, ScmEnsemble)
+ assert res.num_runs == 1
+
+
+def test_ensemble_append_empty():
+ with pytest.raises(ValueError, match="Nothing to append"):
+ ensemble_append([])
+
+
+def test_ensemble_append_nonlist():
+ with pytest.raises(TypeError, match="ensemble_or_runs is not a list"):
+ ensemble_append(1)
+
+
+@pytest.mark.parametrize(
+ "obj", ["a", 1, np.asarray([1, 2, 3]), pd.DataFrame([[1, 2, 3]])]
+)
+def test_ensemble_append_unknown(ensemble, scm_run, obj):
+ with pytest.raises(TypeError, match="Cannot handle appending type"):
+ ensemble_append([obj])
+
+ with pytest.raises(TypeError, match="Cannot handle appending type"):
+ ensemble_append([scm_run, obj])
+
+
+def test_ensemble_append_custom_run(custom_scm_run):
+ res = ensemble_append([custom_scm_run, custom_scm_run])
+ assert len(res) == len(custom_scm_run) * 2
+
+ assert res.run_ids == [0, 1]
+
+ # TODO: fix inconcistency with columns type of timeseries
+ # pandas coerces this to a DataTimeIndex
+ exp_ts = custom_scm_run.timeseries()
+ exp_ts.columns = exp_ts.columns.astype(object)
+
+ pdt.assert_frame_equal(res.timeseries().xs(0, level="run_id"), exp_ts)
+ pdt.assert_frame_equal(res.timeseries().xs(1, level="run_id"), exp_ts)
+
+
+@pytest.fixture("function")
+def ensemble_unique_meta(scm_run):
+ other_run = ScmRun(
+ np.arange(3),
+ index=[1900, 1910, 1920],
+ columns={
+ "variable": "Example",
+ "unit": "unspecified",
+ "region": "World",
+ "model": "b_iam",
+ "scenario": "a_scenario",
+ },
+ )
+ return ScmEnsemble([scm_run, other_run])
+
+
+def test_ensemble_unique_meta(ensemble_unique_meta):
+ exp = ["Primary Energy", "Primary Energy|Coal", "Example"]
+ assert ensemble_unique_meta.get_unique_meta("variable") == exp
+
+ assert ensemble_unique_meta.get_unique_meta("model") == ["a_iam", "b_iam"]
+ assert ensemble_unique_meta.get_unique_meta("climate_model") == ["a_model"]
+
+
+def test_ensemble_unique_meta_missing(ensemble_unique_meta):
+ res = ensemble_unique_meta.get_unique_meta("climate_model")
+ assert res == ["a_model"]
+
+ with pytest.raises(KeyError, match=re.escape("[non_existent] is not in metadata")):
+ ensemble_unique_meta.get_unique_meta("non_existent")
+
+ # Empty Ensembles also raise KeyError
+ with pytest.raises(KeyError, match=re.escape("[test] is not in metadata")):
+ ScmEnsemble([]).get_unique_meta("test")
+
+
+def test_ensemble_unique_meta_no_duplicates(ensemble_unique_meta):
+ assert ensemble_unique_meta.get_unique_meta("region", no_duplicates=True) == "World"
+
+ with pytest.raises(ValueError, match="`variable` column is not unique"):
+ ensemble_unique_meta.get_unique_meta("variable", no_duplicates=True)