{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Demo: NumPy, Pandas\n",
    "UW Geospatial Data Analysis  \n",
    "CEE498/CEWA599  \n",
    "David Shean"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introduction\n",
    "This is a quick demo of some key functionality for these core Python packages, emphasizing topics that will help with lab exercises this week and later in the quarter. It is by no means complete! \n",
    "\n",
    "Please consult the reading assignment and lists of other excellent, more complete online resources."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## NumPy\n",
    "> NumPy is the fundamental package for scientific computing in Python. It is a Python library that provides a *multidimensional array object*, various derived objects (such as masked arrays and matrices), and an assortment of routines for fast operations on arrays, including mathematical, logical, shape manipulation, sorting, selecting, I/O, discrete Fourier transforms, basic linear algebra, basic statistical operations, random simulation and much more."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Pandas\n",
    "> pandas is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool,\n",
    "built on top of the Python programming language. \n",
    "\n",
    "> pandas is a Python package providing fast, flexible, and expressive data structures designed to make working with “relational” or “labeled” data both easy and intuitive. It aims to be the fundamental high-level building block for doing practical, real-world data analysis in Python. Additionally, it has the broader goal of becoming the most powerful and flexible open source data analysis/manipulation tool available in any language. It is already well on its way toward this goal."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Matplotlib\n",
    ">Matplotlib is a comprehensive library for creating static, animated, and interactive visualizations in Python.\n",
    "\n",
    ">Matplotlib is a Python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms. Matplotlib can be used in Python scripts, the Python and IPython shells, the Jupyter notebook, web application servers, and four graphical user interface toolkits.\n",
    "\n",
    ">Matplotlib tries to make easy things easy and hard things possible. You can generate plots, histograms, power spectra, bar charts, errorcharts, scatterplots, etc., with just a few lines of code. For examples, see the sample plots and thumbnail gallery.\n",
    "\n",
    ">For simple plotting the pyplot module provides a MATLAB-like interface, particularly when combined with IPython. For the power user, you have full control of line styles, font properties, axes properties, etc, via an object oriented interface or via a set of functions familiar to MATLAB users."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import necessary modules\n",
    "* Use shorthand, so you don't have to type out full module name each time\n",
    "* Note different structure for matplotlib package"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## NumPy 1D array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 9, 4, 6, 5, 4, 4, 3, 9, 1])"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Create 1D array of random integers\n",
    "#Note parenthesis and brackets\n",
    "a = np.random.randint(0,10,10)\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.ndarray"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#np.ndarray?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Constructing an array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "#np.array?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "array() takes from 1 to 2 positional arguments but 3 were given",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m/tmp/ipykernel_512/449188611.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m: array() takes from 1 to 2 positional arguments but 3 were given"
     ]
    }
   ],
   "source": [
    "np.array(0, 1, 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Pass in an array-like object - need brackets around the numbers\n",
    "np.array([0, 1, 2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mylist = [0, 1, 2]\n",
    "np.array(mylist)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Array properties and datatypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 9, 4, 6, 5, 4, 4, 3, 9, 1])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10,)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('int64')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.dtype"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### What is 'int64'?\n",
    "* Signed integer represented by 64 bits\n",
    "* Each bit can be 0 or 1\n",
    "* 0 = 0000000000000000000000000000000000000000000000000000000000000000\n",
    "* 1 = 0000000000000000000000000000000000000000000000000000000000000001\n",
    "* 2 = 0000000000000000000000000000000000000000000000000000000000000010\n",
    "* ...\n",
    "* https://numpy.org/doc/stable/user/basics.types.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "18446744073709551616"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Possible unique combinations of 64 bits\n",
    "range = 2**64\n",
    "range"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.84e+19\n"
     ]
    }
   ],
   "source": [
    "print(f\"{range:.2e}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9223372036854775808"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mm = int((2**64)/2)\n",
    "mm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'A 64-bit signed integer can store values between -9223372036854775808 and +9223372036854775808'"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f'A 64-bit signed integer can store values between -{mm} and +{mm}'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 9, 4, 6, 5, 4, 4, 3, 9, 1])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Overkill for our single integer values\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Number of bytes (8 bits each) for each element in the array\n",
    "a.itemsize"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "80"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Total number of bytes for 10 elements\n",
    "a.nbytes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 9, 4, 6, 5, 4, 4, 3, 9, 1], dtype=uint8)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Recast to 8-bit unsigned integer (valid range: 0-255)\n",
    "b = a.astype('uint8')\n",
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('uint8')"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "256"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "2**8"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 9, 4, 6, 5, 4, 4, 3, 9, 1], dtype=uint8)"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b.nbytes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([255,   9,   4,   6,   5,   4,   4,   3,   9,   1], dtype=uint8)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Assign value within valid range\n",
    "b[0] = 255\n",
    "b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 9, 4, 6, 5, 4, 4, 3, 9, 1], dtype=uint8)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Assign value outside of valid range - overlflow!\n",
    "# https://en.wikipedia.org/wiki/Integer_overflow\n",
    "b[0] = 257\n",
    "b"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2D arrays"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "a2 = np.random.random((10,10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.52652326, 0.14231249, 0.07566598, 0.59790843, 0.70154418,\n",
       "        0.52064036, 0.00837979, 0.11927175, 0.13957386, 0.2459467 ],\n",
       "       [0.6461288 , 0.15507331, 0.90511239, 0.80794971, 0.53618462,\n",
       "        0.5585833 , 0.37523991, 0.13770533, 0.22708269, 0.79929664],\n",
       "       [0.32809269, 0.08102169, 0.80168028, 0.2397003 , 0.33923008,\n",
       "        0.6039445 , 0.06581277, 0.43881912, 0.13918295, 0.81991938],\n",
       "       [0.54214022, 0.12926722, 0.67341643, 0.97417468, 0.0349868 ,\n",
       "        0.87610442, 0.24762983, 0.0228108 , 0.5683135 , 0.51484197],\n",
       "       [0.66986602, 0.12030778, 0.43275939, 0.0487702 , 0.08680747,\n",
       "        0.77752797, 0.42610501, 0.58918494, 0.24729525, 0.59084971],\n",
       "       [0.85876637, 0.89397025, 0.96531165, 0.59977053, 0.00839696,\n",
       "        0.93101856, 0.87715167, 0.79625335, 0.83850491, 0.10052971],\n",
       "       [0.67171947, 0.35401307, 0.74514409, 0.16502892, 0.30921615,\n",
       "        0.81304308, 0.074765  , 0.08685205, 0.31914575, 0.23735222],\n",
       "       [0.47789035, 0.74734751, 0.26285763, 0.59484722, 0.7155864 ,\n",
       "        0.59474681, 0.47150914, 0.03452718, 0.72332275, 0.47028776],\n",
       "       [0.02877749, 0.83078924, 0.31289166, 0.30402027, 0.12422959,\n",
       "        0.5741902 , 0.45545665, 0.8212274 , 0.76181614, 0.108464  ],\n",
       "       [0.96086507, 0.83894286, 0.84632944, 0.26903294, 0.14547441,\n",
       "        0.75889114, 0.28676771, 0.36896895, 0.37812949, 0.78041529]])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10, 10)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "100"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2.size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('float64')"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.52652326, 0.14231249, 0.07566598, 0.59790843, 0.70154418,\n",
       "       0.52064036, 0.00837979, 0.11927175, 0.13957386, 0.2459467 ])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Get first element along first axis\n",
    "#Question is this first row or col?\n",
    "a2[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.52652326, 0.6461288 , 0.32809269, 0.54214022, 0.66986602,\n",
       "       0.85876637, 0.67171947, 0.47789035, 0.02877749, 0.96086507])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Get first element along second axis\n",
    "a2[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5265232608453788"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Get first element along both axes\n",
    "a2[0,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.52652326, 0.14231249, 0.07566598, 0.59790843, 0.70154418,\n",
       "        0.52064036, 0.00837979, 0.11927175, 0.13957386, 0.2459467 ],\n",
       "       [0.6461288 , 0.15507331, 0.90511239, 0.80794971, 0.53618462,\n",
       "        0.5585833 , 0.37523991, 0.13770533, 0.22708269, 0.79929664],\n",
       "       [0.32809269, 0.08102169, 0.80168028, 0.2397003 , 0.33923008,\n",
       "        0.6039445 , 0.06581277, 0.43881912, 0.13918295, 0.81991938]])"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Get slice along first axis - first 3 rows\n",
    "a2[0:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.52652326, 0.14231249, 0.07566598],\n",
       "       [0.6461288 , 0.15507331, 0.90511239],\n",
       "       [0.32809269, 0.08102169, 0.80168028],\n",
       "       [0.54214022, 0.12926722, 0.67341643],\n",
       "       [0.66986602, 0.12030778, 0.43275939],\n",
       "       [0.85876637, 0.89397025, 0.96531165],\n",
       "       [0.67171947, 0.35401307, 0.74514409],\n",
       "       [0.47789035, 0.74734751, 0.26285763],\n",
       "       [0.02877749, 0.83078924, 0.31289166],\n",
       "       [0.96086507, 0.83894286, 0.84632944]])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Slice along second axis - first 3 cols\n",
    "a2[:,0:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.52652326, 0.14231249, 0.07566598],\n",
       "       [0.6461288 , 0.15507331, 0.90511239],\n",
       "       [0.32809269, 0.08102169, 0.80168028]])"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2[0:3,0:3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## ufunc\n",
    "* Efficiently perform operation element-by-element in \"vectorized\" fashion (different than GIS vector dataset)\n",
    "* **Do not loop over arrays** (unless absolutely necessary)\n",
    "* https://numpy.org/doc/stable/reference/ufuncs.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[5.26523261, 1.42312486, 0.75665984, 5.97908434, 7.01544181,\n",
       "        5.20640363, 0.08379791, 1.19271753, 1.39573862, 2.459467  ],\n",
       "       [6.46128797, 1.55073312, 9.05112389, 8.07949708, 5.36184615,\n",
       "        5.58583304, 3.75239908, 1.37705329, 2.27082693, 7.99296637],\n",
       "       [3.28092688, 0.8102169 , 8.01680285, 2.39700296, 3.39230084,\n",
       "        6.03944497, 0.65812771, 4.38819125, 1.3918295 , 8.19919379],\n",
       "       [5.42140219, 1.2926722 , 6.73416434, 9.74174681, 0.34986796,\n",
       "        8.76104416, 2.47629829, 0.228108  , 5.68313498, 5.14841969],\n",
       "       [6.69866023, 1.2030778 , 4.3275939 , 0.48770196, 0.86807469,\n",
       "        7.77527967, 4.26105014, 5.89184939, 2.47295249, 5.90849707],\n",
       "       [8.58766372, 8.93970246, 9.65311645, 5.99770527, 0.08396962,\n",
       "        9.31018559, 8.77151667, 7.96253349, 8.38504906, 1.00529706],\n",
       "       [6.7171947 , 3.54013069, 7.45144089, 1.65028921, 3.09216152,\n",
       "        8.13043078, 0.74765   , 0.86852048, 3.1914575 , 2.3735222 ],\n",
       "       [4.77890351, 7.47347509, 2.62857634, 5.94847221, 7.15586397,\n",
       "        5.94746812, 4.71509138, 0.34527179, 7.23322755, 4.70287758],\n",
       "       [0.28777487, 8.30789238, 3.1289166 , 3.04020265, 1.24229588,\n",
       "        5.741902  , 4.5545665 , 8.21227395, 7.61816135, 1.08463997],\n",
       "       [9.60865071, 8.38942857, 8.46329441, 2.69032942, 1.45474407,\n",
       "        7.58891143, 2.86767713, 3.6896895 , 3.78129487, 7.80415291]])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2 * 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Don't do this!\n",
    "#for n, i in enumerate(a2):\n",
    "#    a2[n] = i + 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[2.77226744e-01, 2.02528438e-02, 5.72534107e-03, 3.57494495e-01,\n",
       "        4.92164238e-01, 2.71066388e-01, 7.02209035e-05, 1.42257512e-02,\n",
       "        1.94808630e-02, 6.04897792e-02],\n",
       "       [4.17482422e-01, 2.40477320e-02, 8.19228437e-01, 6.52782731e-01,\n",
       "        2.87493942e-01, 3.12015307e-01, 1.40804989e-01, 1.89627575e-02,\n",
       "        5.15665493e-02, 6.38875114e-01],\n",
       "       [1.07644812e-01, 6.56451420e-03, 6.42691279e-01, 5.74562317e-02,\n",
       "        1.15077050e-01, 3.64748955e-01, 4.33132086e-03, 1.92562224e-01,\n",
       "        1.93718936e-02, 6.72267787e-01],\n",
       "       [2.93916017e-01, 1.67100142e-02, 4.53489693e-01, 9.49016309e-01,\n",
       "        1.22407590e-03, 7.67558948e-01, 6.13205320e-02, 5.20332575e-04,\n",
       "        3.22980232e-01, 2.65062253e-01],\n",
       "       [4.48720489e-01, 1.44739619e-02, 1.87280690e-01, 2.37853201e-03,\n",
       "        7.53553662e-03, 6.04549740e-01, 1.81565483e-01, 3.47138893e-01,\n",
       "        6.11549402e-02, 3.49103376e-01],\n",
       "       [7.37479681e-01, 7.99182800e-01, 9.31826572e-01, 3.59724685e-01,\n",
       "        7.05089649e-05, 8.66795558e-01, 7.69395047e-01, 6.34019395e-01,\n",
       "        7.03090478e-01, 1.01062218e-02],\n",
       "       [4.51207047e-01, 1.25325253e-01, 5.55239714e-01, 2.72345449e-02,\n",
       "        9.56146285e-02, 6.61039047e-01, 5.58980528e-03, 7.54327828e-03,\n",
       "        1.01854010e-01, 5.63360766e-02],\n",
       "       [2.28379187e-01, 5.58528300e-01, 6.90941356e-02, 3.53843216e-01,\n",
       "        5.12063892e-01, 3.53723770e-01, 2.22320868e-01, 1.19212608e-03,\n",
       "        5.23195808e-01, 2.21170575e-01],\n",
       "       [8.28143736e-04, 6.90210757e-01, 9.79011906e-02, 9.24283216e-02,\n",
       "        1.54329906e-02, 3.29694386e-01, 2.07440760e-01, 6.74414434e-01,\n",
       "        5.80363824e-01, 1.17644387e-02],\n",
       "       [9.23261684e-01, 7.03825118e-01, 7.16273522e-01, 7.23787240e-02,\n",
       "        2.11628030e-02, 5.75915767e-01, 8.22357214e-02, 1.36138086e-01,\n",
       "        1.42981909e-01, 6.09048026e-01]])"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#np.power(a2, 2)\n",
    "a2**2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.72561923, 0.37724327, 0.27507451, 0.77324539, 0.83758234,\n",
       "        0.72155413, 0.0915412 , 0.34535743, 0.37359585, 0.49593014],\n",
       "       [0.80382137, 0.39379349, 0.95137395, 0.89886023, 0.73224628,\n",
       "        0.74738431, 0.61256829, 0.37108669, 0.47653194, 0.89403391],\n",
       "       [0.57279376, 0.28464309, 0.89536601, 0.48959197, 0.58243462,\n",
       "        0.77713866, 0.25654   , 0.66243424, 0.37307231, 0.905494  ],\n",
       "       [0.73630172, 0.35953751, 0.82061954, 0.98700288, 0.18704758,\n",
       "        0.9360045 , 0.49762418, 0.15103245, 0.7538657 , 0.71752489],\n",
       "       [0.81845343, 0.34685412, 0.6578445 , 0.22083975, 0.29463107,\n",
       "        0.88177546, 0.6527672 , 0.76758383, 0.49728789, 0.76866749],\n",
       "       [0.92669648, 0.9455    , 0.98250275, 0.77444853, 0.09163494,\n",
       "        0.96489303, 0.93656375, 0.89233029, 0.91569914, 0.3170642 ],\n",
       "       [0.81958494, 0.59498997, 0.86321729, 0.40623752, 0.55607207,\n",
       "        0.90168901, 0.27343189, 0.29470672, 0.56492986, 0.48718808],\n",
       "       [0.69129614, 0.86449263, 0.51269643, 0.77126339, 0.8459234 ,\n",
       "        0.7711983 , 0.68666523, 0.1858149 , 0.85048384, 0.6857753 ],\n",
       "       [0.16963928, 0.91147641, 0.5593672 , 0.55138033, 0.35246218,\n",
       "        0.75775339, 0.67487528, 0.90621598, 0.87282079, 0.32933873],\n",
       "       [0.98023725, 0.91593824, 0.91996165, 0.51868386, 0.38141107,\n",
       "        0.87114358, 0.53550697, 0.60742814, 0.61492234, 0.88341117]])"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#a2**0.5\n",
    "np.sqrt(a2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Built-in functions\n",
    "* Operate over entire array, specified axes, or slice\n",
    "* Very fast/efficient"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.46351243272781467"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.2922564296409726"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2.std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.008379791373509304"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2.min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.52652326, 0.14231249, 0.07566598, 0.59790843, 0.70154418,\n",
       "        0.52064036, 0.00837979, 0.11927175, 0.13957386, 0.2459467 ],\n",
       "       [0.6461288 , 0.15507331, 0.90511239, 0.80794971, 0.53618462,\n",
       "        0.5585833 , 0.37523991, 0.13770533, 0.22708269, 0.79929664],\n",
       "       [0.32809269, 0.08102169, 0.80168028, 0.2397003 , 0.33923008,\n",
       "        0.6039445 , 0.06581277, 0.43881912, 0.13918295, 0.81991938],\n",
       "       [0.54214022, 0.12926722, 0.67341643, 0.97417468, 0.0349868 ,\n",
       "        0.87610442, 0.24762983, 0.0228108 , 0.5683135 , 0.51484197],\n",
       "       [0.66986602, 0.12030778, 0.43275939, 0.0487702 , 0.08680747,\n",
       "        0.77752797, 0.42610501, 0.58918494, 0.24729525, 0.59084971],\n",
       "       [0.85876637, 0.89397025, 0.96531165, 0.59977053, 0.00839696,\n",
       "        0.93101856, 0.87715167, 0.79625335, 0.83850491, 0.10052971],\n",
       "       [0.67171947, 0.35401307, 0.74514409, 0.16502892, 0.30921615,\n",
       "        0.81304308, 0.074765  , 0.08685205, 0.31914575, 0.23735222],\n",
       "       [0.47789035, 0.74734751, 0.26285763, 0.59484722, 0.7155864 ,\n",
       "        0.59474681, 0.47150914, 0.03452718, 0.72332275, 0.47028776],\n",
       "       [0.02877749, 0.83078924, 0.31289166, 0.30402027, 0.12422959,\n",
       "        0.5741902 , 0.45545665, 0.8212274 , 0.76181614, 0.108464  ],\n",
       "       [0.96086507, 0.83894286, 0.84632944, 0.26903294, 0.14547441,\n",
       "        0.75889114, 0.28676771, 0.36896895, 0.37812949, 0.78041529]])"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Note on axis order\n",
    "* When indexing, first axis (0) will extract rows, second axis (1) will extract cols\n",
    "* When aggregating (e.g., computing mean along an axis), you are specifing the dimension of the array that will be collapsed, not the dimension that will be returned\n",
    "    * So axis=0 will aggregate values across all rows for each column in a 2D array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.52652326, 0.14231249, 0.07566598],\n",
       "       [0.6461288 , 0.15507331, 0.90511239],\n",
       "       [0.32809269, 0.08102169, 0.80168028]])"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2[0:3,0:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.32809269, 0.08102169, 0.07566598])"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2[0:3,0:3].min(axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.07566598, 0.15507331, 0.08102169])"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2[0:3,0:3].min(axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Basic array plotting and visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 9, 4, 6, 5, 4, 4, 3, 9, 1])"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f7d7cd5f160>]"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.52652326, 0.14231249, 0.07566598, 0.59790843, 0.70154418,\n",
       "        0.52064036, 0.00837979, 0.11927175, 0.13957386, 0.2459467 ],\n",
       "       [0.6461288 , 0.15507331, 0.90511239, 0.80794971, 0.53618462,\n",
       "        0.5585833 , 0.37523991, 0.13770533, 0.22708269, 0.79929664],\n",
       "       [0.32809269, 0.08102169, 0.80168028, 0.2397003 , 0.33923008,\n",
       "        0.6039445 , 0.06581277, 0.43881912, 0.13918295, 0.81991938],\n",
       "       [0.54214022, 0.12926722, 0.67341643, 0.97417468, 0.0349868 ,\n",
       "        0.87610442, 0.24762983, 0.0228108 , 0.5683135 , 0.51484197],\n",
       "       [0.66986602, 0.12030778, 0.43275939, 0.0487702 , 0.08680747,\n",
       "        0.77752797, 0.42610501, 0.58918494, 0.24729525, 0.59084971],\n",
       "       [0.85876637, 0.89397025, 0.96531165, 0.59977053, 0.00839696,\n",
       "        0.93101856, 0.87715167, 0.79625335, 0.83850491, 0.10052971],\n",
       "       [0.67171947, 0.35401307, 0.74514409, 0.16502892, 0.30921615,\n",
       "        0.81304308, 0.074765  , 0.08685205, 0.31914575, 0.23735222],\n",
       "       [0.47789035, 0.74734751, 0.26285763, 0.59484722, 0.7155864 ,\n",
       "        0.59474681, 0.47150914, 0.03452718, 0.72332275, 0.47028776],\n",
       "       [0.02877749, 0.83078924, 0.31289166, 0.30402027, 0.12422959,\n",
       "        0.5741902 , 0.45545665, 0.8212274 , 0.76181614, 0.108464  ],\n",
       "       [0.96086507, 0.83894286, 0.84632944, 0.26903294, 0.14547441,\n",
       "        0.75889114, 0.28676771, 0.36896895, 0.37812949, 0.78041529]])"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f7d7cbd3f10>,\n",
       " <matplotlib.lines.Line2D at 0x7f7d7cbd3f70>,\n",
       " <matplotlib.lines.Line2D at 0x7f7d7cb610d0>,\n",
       " <matplotlib.lines.Line2D at 0x7f7d7cb611f0>,\n",
       " <matplotlib.lines.Line2D at 0x7f7d7cb61310>,\n",
       " <matplotlib.lines.Line2D at 0x7f7d7cb61430>,\n",
       " <matplotlib.lines.Line2D at 0x7f7d7cb61550>,\n",
       " <matplotlib.lines.Line2D at 0x7f7d7cb61670>,\n",
       " <matplotlib.lines.Line2D at 0x7f7d7cb61790>,\n",
       " <matplotlib.lines.Line2D at 0x7f7d7cb618b0>]"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(a2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f7d7cb5dd60>]"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(a2[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.colorbar.Colorbar at 0x7f7d7c27b4f0>"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#2D array visualization\n",
    "plt.imshow(a2, cmap='gray')\n",
    "plt.colorbar()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([18., 14., 11.,  9., 15.,  7., 17.,  9.]),\n",
       " array([0.00837979, 0.12910415, 0.24982851, 0.37055287, 0.49127724,\n",
       "        0.6120016 , 0.73272596, 0.85345032, 0.97417468]),\n",
       " <BarContainer object of 8 artists>)"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(a2.ravel(), bins='auto')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Boolean arrays and fancy indexing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.52652326, 0.14231249, 0.07566598, 0.59790843, 0.70154418,\n",
       "        0.52064036, 0.00837979, 0.11927175, 0.13957386, 0.2459467 ],\n",
       "       [0.6461288 , 0.15507331, 0.90511239, 0.80794971, 0.53618462,\n",
       "        0.5585833 , 0.37523991, 0.13770533, 0.22708269, 0.79929664],\n",
       "       [0.32809269, 0.08102169, 0.80168028, 0.2397003 , 0.33923008,\n",
       "        0.6039445 , 0.06581277, 0.43881912, 0.13918295, 0.81991938],\n",
       "       [0.54214022, 0.12926722, 0.67341643, 0.97417468, 0.0349868 ,\n",
       "        0.87610442, 0.24762983, 0.0228108 , 0.5683135 , 0.51484197],\n",
       "       [0.66986602, 0.12030778, 0.43275939, 0.0487702 , 0.08680747,\n",
       "        0.77752797, 0.42610501, 0.58918494, 0.24729525, 0.59084971],\n",
       "       [0.85876637, 0.89397025, 0.96531165, 0.59977053, 0.00839696,\n",
       "        0.93101856, 0.87715167, 0.79625335, 0.83850491, 0.10052971],\n",
       "       [0.67171947, 0.35401307, 0.74514409, 0.16502892, 0.30921615,\n",
       "        0.81304308, 0.074765  , 0.08685205, 0.31914575, 0.23735222],\n",
       "       [0.47789035, 0.74734751, 0.26285763, 0.59484722, 0.7155864 ,\n",
       "        0.59474681, 0.47150914, 0.03452718, 0.72332275, 0.47028776],\n",
       "       [0.02877749, 0.83078924, 0.31289166, 0.30402027, 0.12422959,\n",
       "        0.5741902 , 0.45545665, 0.8212274 , 0.76181614, 0.108464  ],\n",
       "       [0.96086507, 0.83894286, 0.84632944, 0.26903294, 0.14547441,\n",
       "        0.75889114, 0.28676771, 0.36896895, 0.37812949, 0.78041529]])"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ True, False, False,  True,  True,  True, False, False, False,\n",
       "        False],\n",
       "       [ True, False,  True,  True,  True,  True, False, False, False,\n",
       "         True],\n",
       "       [False, False,  True, False, False,  True, False, False, False,\n",
       "         True],\n",
       "       [ True, False,  True,  True, False,  True, False, False,  True,\n",
       "         True],\n",
       "       [ True, False, False, False, False,  True, False,  True, False,\n",
       "         True],\n",
       "       [ True,  True,  True,  True, False,  True,  True,  True,  True,\n",
       "        False],\n",
       "       [ True, False,  True, False, False,  True, False, False, False,\n",
       "        False],\n",
       "       [False,  True, False,  True,  True,  True, False, False,  True,\n",
       "        False],\n",
       "       [False,  True, False, False, False,  True, False,  True,  True,\n",
       "        False],\n",
       "       [ True,  True,  True, False, False,  True, False, False, False,\n",
       "         True]])"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2 > 0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "idx = (a2 > 0.5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ True, False, False,  True,  True,  True, False, False, False,\n",
       "        False],\n",
       "       [ True, False,  True,  True,  True,  True, False, False, False,\n",
       "         True],\n",
       "       [False, False,  True, False, False,  True, False, False, False,\n",
       "         True],\n",
       "       [ True, False,  True,  True, False,  True, False, False,  True,\n",
       "         True],\n",
       "       [ True, False, False, False, False,  True, False,  True, False,\n",
       "         True],\n",
       "       [ True,  True,  True,  True, False,  True,  True,  True,  True,\n",
       "        False],\n",
       "       [ True, False,  True, False, False,  True, False, False, False,\n",
       "        False],\n",
       "       [False,  True, False,  True,  True,  True, False, False,  True,\n",
       "        False],\n",
       "       [False,  True, False, False, False,  True, False,  True,  True,\n",
       "        False],\n",
       "       [ True,  True,  True, False, False,  True, False, False, False,\n",
       "         True]])"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "idx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.colorbar.Colorbar at 0x7f7d7c13b910>"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Quick visualization, True = yellow (1)\n",
    "plt.imshow(idx)\n",
    "plt.colorbar()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.52652326, 0.59790843, 0.70154418, 0.52064036, 0.6461288 ,\n",
       "       0.90511239, 0.80794971, 0.53618462, 0.5585833 , 0.79929664,\n",
       "       0.80168028, 0.6039445 , 0.81991938, 0.54214022, 0.67341643,\n",
       "       0.97417468, 0.87610442, 0.5683135 , 0.51484197, 0.66986602,\n",
       "       0.77752797, 0.58918494, 0.59084971, 0.85876637, 0.89397025,\n",
       "       0.96531165, 0.59977053, 0.93101856, 0.87715167, 0.79625335,\n",
       "       0.83850491, 0.67171947, 0.74514409, 0.81304308, 0.74734751,\n",
       "       0.59484722, 0.7155864 , 0.59474681, 0.72332275, 0.83078924,\n",
       "       0.5741902 , 0.8212274 , 0.76181614, 0.96086507, 0.83894286,\n",
       "       0.84632944, 0.75889114, 0.78041529])"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Return only elements where condition is True\n",
    "a2[idx]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10, 10)"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Original shape\n",
    "a2.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(48,)"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Selected shape\n",
    "a2[idx].shape\n",
    "#idx.nonzero()[0].size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Can also be used for assignment\n",
    "#a2[idx] = 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "### Bitwise operators, combining boolean arrays"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ True, False, False,  True,  True,  True, False, False, False,\n",
       "        False],\n",
       "       [ True, False,  True,  True,  True,  True, False, False, False,\n",
       "         True],\n",
       "       [False, False,  True, False, False,  True, False, False, False,\n",
       "         True],\n",
       "       [ True, False,  True,  True, False,  True, False, False,  True,\n",
       "         True],\n",
       "       [ True, False, False, False, False,  True, False,  True, False,\n",
       "         True],\n",
       "       [ True,  True,  True,  True, False,  True,  True,  True,  True,\n",
       "        False],\n",
       "       [ True, False,  True, False, False,  True, False, False, False,\n",
       "        False],\n",
       "       [False,  True, False,  True,  True,  True, False, False,  True,\n",
       "        False],\n",
       "       [False,  True, False, False, False,  True, False,  True,  True,\n",
       "        False],\n",
       "       [ True,  True,  True, False, False,  True, False, False, False,\n",
       "         True]])"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(a2 > 0.5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ True,  True,  True,  True, False,  True,  True,  True,  True,\n",
       "         True],\n",
       "       [ True,  True, False, False,  True,  True,  True,  True,  True,\n",
       "        False],\n",
       "       [ True,  True, False,  True,  True,  True,  True,  True,  True,\n",
       "        False],\n",
       "       [ True,  True,  True, False,  True, False,  True,  True,  True,\n",
       "         True],\n",
       "       [ True,  True,  True,  True,  True, False,  True,  True,  True,\n",
       "         True],\n",
       "       [False, False, False,  True,  True, False, False, False, False,\n",
       "         True],\n",
       "       [ True,  True, False,  True,  True, False,  True,  True,  True,\n",
       "         True],\n",
       "       [ True, False,  True,  True, False,  True,  True,  True, False,\n",
       "         True],\n",
       "       [ True, False,  True,  True,  True,  True,  True, False, False,\n",
       "         True],\n",
       "       [False, False, False,  True,  True, False,  True,  True,  True,\n",
       "        False]])"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(a2 < 0.7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Bitwise and - True if both are True\n",
    "idx = (a2 > 0.5) & (a2 < 0.7)\n",
    "#Bitwise or - True if either is True\n",
    "#idx = (a < 0.5) | (a > 0.9)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ True, False, False,  True, False,  True, False, False, False,\n",
       "        False],\n",
       "       [ True, False, False, False,  True,  True, False, False, False,\n",
       "        False],\n",
       "       [False, False, False, False, False,  True, False, False, False,\n",
       "        False],\n",
       "       [ True, False,  True, False, False, False, False, False,  True,\n",
       "         True],\n",
       "       [ True, False, False, False, False, False, False,  True, False,\n",
       "         True],\n",
       "       [False, False, False,  True, False, False, False, False, False,\n",
       "        False],\n",
       "       [ True, False, False, False, False, False, False, False, False,\n",
       "        False],\n",
       "       [False, False, False,  True, False,  True, False, False, False,\n",
       "        False],\n",
       "       [False, False, False, False, False,  True, False, False, False,\n",
       "        False],\n",
       "       [False, False, False, False, False, False, False, False, False,\n",
       "        False]])"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "idx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f7d7c0c5700>"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(idx)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.52652326, 0.59790843, 0.52064036, 0.6461288 , 0.53618462,\n",
       "       0.5585833 , 0.6039445 , 0.54214022, 0.67341643, 0.5683135 ,\n",
       "       0.51484197, 0.66986602, 0.58918494, 0.59084971, 0.59977053,\n",
       "       0.67171947, 0.59484722, 0.59474681, 0.5741902 ])"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2[idx]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(19,)"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2[idx].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False,  True,  True, False,  True, False,  True,  True,  True,\n",
       "         True],\n",
       "       [False,  True,  True,  True, False, False,  True,  True,  True,\n",
       "         True],\n",
       "       [ True,  True,  True,  True,  True, False,  True,  True,  True,\n",
       "         True],\n",
       "       [False,  True, False,  True,  True,  True,  True,  True, False,\n",
       "        False],\n",
       "       [False,  True,  True,  True,  True,  True,  True, False,  True,\n",
       "        False],\n",
       "       [ True,  True,  True, False,  True,  True,  True,  True,  True,\n",
       "         True],\n",
       "       [False,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "         True],\n",
       "       [ True,  True,  True, False,  True, False,  True,  True,  True,\n",
       "         True],\n",
       "       [ True,  True,  True,  True,  True, False,  True,  True,  True,\n",
       "         True],\n",
       "       [ True,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "         True]])"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Invert the boolean array\n",
    "~idx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f7d7c0b99a0>"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(idx)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f7d7c0fdbe0>"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(~idx)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(81,)"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2[~idx].shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Masked array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.52652326, 0.14231249, 0.07566598, 0.59790843, 0.70154418,\n",
       "        0.52064036, 0.00837979, 0.11927175, 0.13957386, 0.2459467 ],\n",
       "       [0.6461288 , 0.15507331, 0.90511239, 0.80794971, 0.53618462,\n",
       "        0.5585833 , 0.37523991, 0.13770533, 0.22708269, 0.79929664],\n",
       "       [0.32809269, 0.08102169, 0.80168028, 0.2397003 , 0.33923008,\n",
       "        0.6039445 , 0.06581277, 0.43881912, 0.13918295, 0.81991938],\n",
       "       [0.54214022, 0.12926722, 0.67341643, 0.97417468, 0.0349868 ,\n",
       "        0.87610442, 0.24762983, 0.0228108 , 0.5683135 , 0.51484197],\n",
       "       [0.66986602, 0.12030778, 0.43275939, 0.0487702 , 0.08680747,\n",
       "        0.77752797, 0.42610501, 0.58918494, 0.24729525, 0.59084971],\n",
       "       [0.85876637, 0.89397025, 0.96531165, 0.59977053, 0.00839696,\n",
       "        0.93101856, 0.87715167, 0.79625335, 0.83850491, 0.10052971],\n",
       "       [0.67171947, 0.35401307, 0.74514409, 0.16502892, 0.30921615,\n",
       "        0.81304308, 0.074765  , 0.08685205, 0.31914575, 0.23735222],\n",
       "       [0.47789035, 0.74734751, 0.26285763, 0.59484722, 0.7155864 ,\n",
       "        0.59474681, 0.47150914, 0.03452718, 0.72332275, 0.47028776],\n",
       "       [0.02877749, 0.83078924, 0.31289166, 0.30402027, 0.12422959,\n",
       "        0.5741902 , 0.45545665, 0.8212274 , 0.76181614, 0.108464  ],\n",
       "       [0.96086507, 0.83894286, 0.84632944, 0.26903294, 0.14547441,\n",
       "        0.75889114, 0.28676771, 0.36896895, 0.37812949, 0.78041529]])"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ True, False, False,  True, False,  True, False, False, False,\n",
       "        False],\n",
       "       [ True, False, False, False,  True,  True, False, False, False,\n",
       "        False],\n",
       "       [False, False, False, False, False,  True, False, False, False,\n",
       "        False],\n",
       "       [ True, False,  True, False, False, False, False, False,  True,\n",
       "         True],\n",
       "       [ True, False, False, False, False, False, False,  True, False,\n",
       "         True],\n",
       "       [False, False, False,  True, False, False, False, False, False,\n",
       "        False],\n",
       "       [ True, False, False, False, False, False, False, False, False,\n",
       "        False],\n",
       "       [False, False, False,  True, False,  True, False, False, False,\n",
       "        False],\n",
       "       [False, False, False, False, False,  True, False, False, False,\n",
       "        False],\n",
       "       [False, False, False, False, False, False, False, False, False,\n",
       "        False]])"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "idx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [],
   "source": [
    "#np.ma.array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [],
   "source": [
    "ma = np.ma.array(a2, mask=~idx)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "masked_array(\n",
       "  data=[[0.5265232608453788, --, --, 0.5979084337784969, --,\n",
       "         0.5206403629685025, --, --, --, --],\n",
       "        [0.6461287968711238, --, --, --, 0.5361846154058071,\n",
       "         0.558583303937883, --, --, --, --],\n",
       "        [--, --, --, --, --, 0.6039444969658847, --, --, --, --],\n",
       "        [0.5421402189101205, --, 0.6734164335026674, --, --, --, --, --,\n",
       "         0.5683134980882404, 0.5148419689595748],\n",
       "        [0.6698660228152108, --, --, --, --, --, --, 0.5891849393173709,\n",
       "         --, 0.5908497065541548],\n",
       "        [--, --, --, 0.5997705271856745, --, --, --, --, --, --],\n",
       "        [0.6717194703376138, --, --, --, --, --, --, --, --, --],\n",
       "        [--, --, --, 0.5948472205118084, --, 0.594746811681392, --, --,\n",
       "         --, --],\n",
       "        [--, --, --, --, --, 0.5741901997787556, --, --, --, --],\n",
       "        [--, --, --, --, --, --, --, --, --, --]],\n",
       "  mask=[[False,  True,  True, False,  True, False,  True,  True,  True,\n",
       "          True],\n",
       "        [False,  True,  True,  True, False, False,  True,  True,  True,\n",
       "          True],\n",
       "        [ True,  True,  True,  True,  True, False,  True,  True,  True,\n",
       "          True],\n",
       "        [False,  True, False,  True,  True,  True,  True,  True, False,\n",
       "         False],\n",
       "        [False,  True,  True,  True,  True,  True,  True, False,  True,\n",
       "         False],\n",
       "        [ True,  True,  True, False,  True,  True,  True,  True,  True,\n",
       "          True],\n",
       "        [False,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "          True],\n",
       "        [ True,  True,  True, False,  True, False,  True,  True,  True,\n",
       "          True],\n",
       "        [ True,  True,  True,  True,  True, False,  True,  True,  True,\n",
       "          True],\n",
       "        [ True,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "          True]],\n",
       "  fill_value=1e+20)"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ma"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.46351243272781467"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a2.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5880947520218769"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ma.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f7d7c1bceb0>"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(ma)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Masked array vs. np.nan\n",
    "* We will come back to this in Lab05\n",
    "* Useful for representing nodata in raster datasets\n",
    "* Useful for dynamically masking outliers for calculations without removing values or creating new arrays\n",
    "* np.nan is float32 or float64, so if your original array is int8, much more efficient to use additional 1-bit mask than cast everything as float32"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Pandas!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "#pd.DataFrame?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(a2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.526523</td>\n",
       "      <td>0.142312</td>\n",
       "      <td>0.075666</td>\n",
       "      <td>0.597908</td>\n",
       "      <td>0.701544</td>\n",
       "      <td>0.520640</td>\n",
       "      <td>0.008380</td>\n",
       "      <td>0.119272</td>\n",
       "      <td>0.139574</td>\n",
       "      <td>0.245947</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.646129</td>\n",
       "      <td>0.155073</td>\n",
       "      <td>0.905112</td>\n",
       "      <td>0.807950</td>\n",
       "      <td>0.536185</td>\n",
       "      <td>0.558583</td>\n",
       "      <td>0.375240</td>\n",
       "      <td>0.137705</td>\n",
       "      <td>0.227083</td>\n",
       "      <td>0.799297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.328093</td>\n",
       "      <td>0.081022</td>\n",
       "      <td>0.801680</td>\n",
       "      <td>0.239700</td>\n",
       "      <td>0.339230</td>\n",
       "      <td>0.603944</td>\n",
       "      <td>0.065813</td>\n",
       "      <td>0.438819</td>\n",
       "      <td>0.139183</td>\n",
       "      <td>0.819919</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.542140</td>\n",
       "      <td>0.129267</td>\n",
       "      <td>0.673416</td>\n",
       "      <td>0.974175</td>\n",
       "      <td>0.034987</td>\n",
       "      <td>0.876104</td>\n",
       "      <td>0.247630</td>\n",
       "      <td>0.022811</td>\n",
       "      <td>0.568313</td>\n",
       "      <td>0.514842</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.669866</td>\n",
       "      <td>0.120308</td>\n",
       "      <td>0.432759</td>\n",
       "      <td>0.048770</td>\n",
       "      <td>0.086807</td>\n",
       "      <td>0.777528</td>\n",
       "      <td>0.426105</td>\n",
       "      <td>0.589185</td>\n",
       "      <td>0.247295</td>\n",
       "      <td>0.590850</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.858766</td>\n",
       "      <td>0.893970</td>\n",
       "      <td>0.965312</td>\n",
       "      <td>0.599771</td>\n",
       "      <td>0.008397</td>\n",
       "      <td>0.931019</td>\n",
       "      <td>0.877152</td>\n",
       "      <td>0.796253</td>\n",
       "      <td>0.838505</td>\n",
       "      <td>0.100530</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.671719</td>\n",
       "      <td>0.354013</td>\n",
       "      <td>0.745144</td>\n",
       "      <td>0.165029</td>\n",
       "      <td>0.309216</td>\n",
       "      <td>0.813043</td>\n",
       "      <td>0.074765</td>\n",
       "      <td>0.086852</td>\n",
       "      <td>0.319146</td>\n",
       "      <td>0.237352</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.477890</td>\n",
       "      <td>0.747348</td>\n",
       "      <td>0.262858</td>\n",
       "      <td>0.594847</td>\n",
       "      <td>0.715586</td>\n",
       "      <td>0.594747</td>\n",
       "      <td>0.471509</td>\n",
       "      <td>0.034527</td>\n",
       "      <td>0.723323</td>\n",
       "      <td>0.470288</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.028777</td>\n",
       "      <td>0.830789</td>\n",
       "      <td>0.312892</td>\n",
       "      <td>0.304020</td>\n",
       "      <td>0.124230</td>\n",
       "      <td>0.574190</td>\n",
       "      <td>0.455457</td>\n",
       "      <td>0.821227</td>\n",
       "      <td>0.761816</td>\n",
       "      <td>0.108464</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.960865</td>\n",
       "      <td>0.838943</td>\n",
       "      <td>0.846329</td>\n",
       "      <td>0.269033</td>\n",
       "      <td>0.145474</td>\n",
       "      <td>0.758891</td>\n",
       "      <td>0.286768</td>\n",
       "      <td>0.368969</td>\n",
       "      <td>0.378129</td>\n",
       "      <td>0.780415</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3         4         5         6  \\\n",
       "0  0.526523  0.142312  0.075666  0.597908  0.701544  0.520640  0.008380   \n",
       "1  0.646129  0.155073  0.905112  0.807950  0.536185  0.558583  0.375240   \n",
       "2  0.328093  0.081022  0.801680  0.239700  0.339230  0.603944  0.065813   \n",
       "3  0.542140  0.129267  0.673416  0.974175  0.034987  0.876104  0.247630   \n",
       "4  0.669866  0.120308  0.432759  0.048770  0.086807  0.777528  0.426105   \n",
       "5  0.858766  0.893970  0.965312  0.599771  0.008397  0.931019  0.877152   \n",
       "6  0.671719  0.354013  0.745144  0.165029  0.309216  0.813043  0.074765   \n",
       "7  0.477890  0.747348  0.262858  0.594847  0.715586  0.594747  0.471509   \n",
       "8  0.028777  0.830789  0.312892  0.304020  0.124230  0.574190  0.455457   \n",
       "9  0.960865  0.838943  0.846329  0.269033  0.145474  0.758891  0.286768   \n",
       "\n",
       "          7         8         9  \n",
       "0  0.119272  0.139574  0.245947  \n",
       "1  0.137705  0.227083  0.799297  \n",
       "2  0.438819  0.139183  0.819919  \n",
       "3  0.022811  0.568313  0.514842  \n",
       "4  0.589185  0.247295  0.590850  \n",
       "5  0.796253  0.838505  0.100530  \n",
       "6  0.086852  0.319146  0.237352  \n",
       "7  0.034527  0.723323  0.470288  \n",
       "8  0.821227  0.761816  0.108464  \n",
       "9  0.368969  0.378129  0.780415  "
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.index = ['a','b','c','d','e','f','g','h','i','j']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>0.526523</td>\n",
       "      <td>0.142312</td>\n",
       "      <td>0.075666</td>\n",
       "      <td>0.597908</td>\n",
       "      <td>0.701544</td>\n",
       "      <td>0.520640</td>\n",
       "      <td>0.008380</td>\n",
       "      <td>0.119272</td>\n",
       "      <td>0.139574</td>\n",
       "      <td>0.245947</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>b</th>\n",
       "      <td>0.646129</td>\n",
       "      <td>0.155073</td>\n",
       "      <td>0.905112</td>\n",
       "      <td>0.807950</td>\n",
       "      <td>0.536185</td>\n",
       "      <td>0.558583</td>\n",
       "      <td>0.375240</td>\n",
       "      <td>0.137705</td>\n",
       "      <td>0.227083</td>\n",
       "      <td>0.799297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>0.328093</td>\n",
       "      <td>0.081022</td>\n",
       "      <td>0.801680</td>\n",
       "      <td>0.239700</td>\n",
       "      <td>0.339230</td>\n",
       "      <td>0.603944</td>\n",
       "      <td>0.065813</td>\n",
       "      <td>0.438819</td>\n",
       "      <td>0.139183</td>\n",
       "      <td>0.819919</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>d</th>\n",
       "      <td>0.542140</td>\n",
       "      <td>0.129267</td>\n",
       "      <td>0.673416</td>\n",
       "      <td>0.974175</td>\n",
       "      <td>0.034987</td>\n",
       "      <td>0.876104</td>\n",
       "      <td>0.247630</td>\n",
       "      <td>0.022811</td>\n",
       "      <td>0.568313</td>\n",
       "      <td>0.514842</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>e</th>\n",
       "      <td>0.669866</td>\n",
       "      <td>0.120308</td>\n",
       "      <td>0.432759</td>\n",
       "      <td>0.048770</td>\n",
       "      <td>0.086807</td>\n",
       "      <td>0.777528</td>\n",
       "      <td>0.426105</td>\n",
       "      <td>0.589185</td>\n",
       "      <td>0.247295</td>\n",
       "      <td>0.590850</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f</th>\n",
       "      <td>0.858766</td>\n",
       "      <td>0.893970</td>\n",
       "      <td>0.965312</td>\n",
       "      <td>0.599771</td>\n",
       "      <td>0.008397</td>\n",
       "      <td>0.931019</td>\n",
       "      <td>0.877152</td>\n",
       "      <td>0.796253</td>\n",
       "      <td>0.838505</td>\n",
       "      <td>0.100530</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>g</th>\n",
       "      <td>0.671719</td>\n",
       "      <td>0.354013</td>\n",
       "      <td>0.745144</td>\n",
       "      <td>0.165029</td>\n",
       "      <td>0.309216</td>\n",
       "      <td>0.813043</td>\n",
       "      <td>0.074765</td>\n",
       "      <td>0.086852</td>\n",
       "      <td>0.319146</td>\n",
       "      <td>0.237352</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>h</th>\n",
       "      <td>0.477890</td>\n",
       "      <td>0.747348</td>\n",
       "      <td>0.262858</td>\n",
       "      <td>0.594847</td>\n",
       "      <td>0.715586</td>\n",
       "      <td>0.594747</td>\n",
       "      <td>0.471509</td>\n",
       "      <td>0.034527</td>\n",
       "      <td>0.723323</td>\n",
       "      <td>0.470288</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>i</th>\n",
       "      <td>0.028777</td>\n",
       "      <td>0.830789</td>\n",
       "      <td>0.312892</td>\n",
       "      <td>0.304020</td>\n",
       "      <td>0.124230</td>\n",
       "      <td>0.574190</td>\n",
       "      <td>0.455457</td>\n",
       "      <td>0.821227</td>\n",
       "      <td>0.761816</td>\n",
       "      <td>0.108464</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>j</th>\n",
       "      <td>0.960865</td>\n",
       "      <td>0.838943</td>\n",
       "      <td>0.846329</td>\n",
       "      <td>0.269033</td>\n",
       "      <td>0.145474</td>\n",
       "      <td>0.758891</td>\n",
       "      <td>0.286768</td>\n",
       "      <td>0.368969</td>\n",
       "      <td>0.378129</td>\n",
       "      <td>0.780415</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3         4         5         6  \\\n",
       "a  0.526523  0.142312  0.075666  0.597908  0.701544  0.520640  0.008380   \n",
       "b  0.646129  0.155073  0.905112  0.807950  0.536185  0.558583  0.375240   \n",
       "c  0.328093  0.081022  0.801680  0.239700  0.339230  0.603944  0.065813   \n",
       "d  0.542140  0.129267  0.673416  0.974175  0.034987  0.876104  0.247630   \n",
       "e  0.669866  0.120308  0.432759  0.048770  0.086807  0.777528  0.426105   \n",
       "f  0.858766  0.893970  0.965312  0.599771  0.008397  0.931019  0.877152   \n",
       "g  0.671719  0.354013  0.745144  0.165029  0.309216  0.813043  0.074765   \n",
       "h  0.477890  0.747348  0.262858  0.594847  0.715586  0.594747  0.471509   \n",
       "i  0.028777  0.830789  0.312892  0.304020  0.124230  0.574190  0.455457   \n",
       "j  0.960865  0.838943  0.846329  0.269033  0.145474  0.758891  0.286768   \n",
       "\n",
       "          7         8         9  \n",
       "a  0.119272  0.139574  0.245947  \n",
       "b  0.137705  0.227083  0.799297  \n",
       "c  0.438819  0.139183  0.819919  \n",
       "d  0.022811  0.568313  0.514842  \n",
       "e  0.589185  0.247295  0.590850  \n",
       "f  0.796253  0.838505  0.100530  \n",
       "g  0.086852  0.319146  0.237352  \n",
       "h  0.034527  0.723323  0.470288  \n",
       "i  0.821227  0.761816  0.108464  \n",
       "j  0.368969  0.378129  0.780415  "
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.52652326, 0.14231249, 0.07566598, 0.59790843, 0.70154418,\n",
       "        0.52064036, 0.00837979, 0.11927175, 0.13957386, 0.2459467 ],\n",
       "       [0.6461288 , 0.15507331, 0.90511239, 0.80794971, 0.53618462,\n",
       "        0.5585833 , 0.37523991, 0.13770533, 0.22708269, 0.79929664],\n",
       "       [0.32809269, 0.08102169, 0.80168028, 0.2397003 , 0.33923008,\n",
       "        0.6039445 , 0.06581277, 0.43881912, 0.13918295, 0.81991938],\n",
       "       [0.54214022, 0.12926722, 0.67341643, 0.97417468, 0.0349868 ,\n",
       "        0.87610442, 0.24762983, 0.0228108 , 0.5683135 , 0.51484197],\n",
       "       [0.66986602, 0.12030778, 0.43275939, 0.0487702 , 0.08680747,\n",
       "        0.77752797, 0.42610501, 0.58918494, 0.24729525, 0.59084971],\n",
       "       [0.85876637, 0.89397025, 0.96531165, 0.59977053, 0.00839696,\n",
       "        0.93101856, 0.87715167, 0.79625335, 0.83850491, 0.10052971],\n",
       "       [0.67171947, 0.35401307, 0.74514409, 0.16502892, 0.30921615,\n",
       "        0.81304308, 0.074765  , 0.08685205, 0.31914575, 0.23735222],\n",
       "       [0.47789035, 0.74734751, 0.26285763, 0.59484722, 0.7155864 ,\n",
       "        0.59474681, 0.47150914, 0.03452718, 0.72332275, 0.47028776],\n",
       "       [0.02877749, 0.83078924, 0.31289166, 0.30402027, 0.12422959,\n",
       "        0.5741902 , 0.45545665, 0.8212274 , 0.76181614, 0.108464  ],\n",
       "       [0.96086507, 0.83894286, 0.84632944, 0.26903294, 0.14547441,\n",
       "        0.75889114, 0.28676771, 0.36896895, 0.37812949, 0.78041529]])"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Still just NumPy array under the hood\n",
    "df.values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'], dtype=object)"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.index.values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    0.571077\n",
       "1    0.429305\n",
       "2    0.602117\n",
       "3    0.460120\n",
       "4    0.300166\n",
       "5    0.700869\n",
       "6    0.328882\n",
       "7    0.341562\n",
       "8    0.434237\n",
       "9    0.466790\n",
       "dtype: float64"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Mean of each column\n",
    "df.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a    0.307777\n",
       "b    0.514836\n",
       "c    0.385740\n",
       "d    0.458369\n",
       "e    0.398947\n",
       "f    0.686967\n",
       "g    0.377628\n",
       "h    0.509292\n",
       "i    0.432186\n",
       "j    0.563382\n",
       "dtype: float64"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Mean of each row\n",
    "df.mean(axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Reading files with Pandas\n",
    "Most of the time, you will read in tabular data and let Pandas do the work"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Relative path to csv from Lab01\n",
    "csv_fn = '../01_Shell_Github/data/GLAH14_tllz_conus_lulcfilt_demfilt.csv'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "decyear,ordinal,lat,lon,glas_z,dem_z,dem_z_std,lulc\n",
      "2003.13957078,731266.9433448168,44.157897,-105.356562,1398.51,1400.52,0.33,31\n",
      "2003.13957081,731266.9433462636,44.150175,-105.358116,1387.11,1384.64,0.43,31\n",
      "2003.13957081,731266.9433465529,44.148632,-105.358427,1392.83,1383.49,0.28,31\n",
      "2003.13957081,731266.9433468423,44.147087,-105.358738,1384.24,1382.85,0.84,31\n"
     ]
    }
   ],
   "source": [
    "# Quick check using shell `head` command\n",
    "!head -n 5 $csv_fn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>decyear</th>\n",
       "      <th>ordinal</th>\n",
       "      <th>lat</th>\n",
       "      <th>lon</th>\n",
       "      <th>glas_z</th>\n",
       "      <th>dem_z</th>\n",
       "      <th>dem_z_std</th>\n",
       "      <th>lulc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943345</td>\n",
       "      <td>44.157897</td>\n",
       "      <td>-105.356562</td>\n",
       "      <td>1398.51</td>\n",
       "      <td>1400.52</td>\n",
       "      <td>0.33</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943346</td>\n",
       "      <td>44.150175</td>\n",
       "      <td>-105.358116</td>\n",
       "      <td>1387.11</td>\n",
       "      <td>1384.64</td>\n",
       "      <td>0.43</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943347</td>\n",
       "      <td>44.148632</td>\n",
       "      <td>-105.358427</td>\n",
       "      <td>1392.83</td>\n",
       "      <td>1383.49</td>\n",
       "      <td>0.28</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943347</td>\n",
       "      <td>44.147087</td>\n",
       "      <td>-105.358738</td>\n",
       "      <td>1384.24</td>\n",
       "      <td>1382.85</td>\n",
       "      <td>0.84</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943347</td>\n",
       "      <td>44.145542</td>\n",
       "      <td>-105.359048</td>\n",
       "      <td>1369.21</td>\n",
       "      <td>1380.24</td>\n",
       "      <td>1.73</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65231</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238340</td>\n",
       "      <td>37.896222</td>\n",
       "      <td>-117.044399</td>\n",
       "      <td>1556.16</td>\n",
       "      <td>1556.43</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65232</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238340</td>\n",
       "      <td>37.897769</td>\n",
       "      <td>-117.044675</td>\n",
       "      <td>1556.02</td>\n",
       "      <td>1556.43</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65233</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238340</td>\n",
       "      <td>37.899319</td>\n",
       "      <td>-117.044952</td>\n",
       "      <td>1556.19</td>\n",
       "      <td>1556.44</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65234</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238340</td>\n",
       "      <td>37.900869</td>\n",
       "      <td>-117.045230</td>\n",
       "      <td>1556.18</td>\n",
       "      <td>1556.44</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65235</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238341</td>\n",
       "      <td>37.902420</td>\n",
       "      <td>-117.045508</td>\n",
       "      <td>1556.32</td>\n",
       "      <td>1556.44</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>65236 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           decyear        ordinal        lat         lon   glas_z    dem_z  \\\n",
       "0      2003.139571  731266.943345  44.157897 -105.356562  1398.51  1400.52   \n",
       "1      2003.139571  731266.943346  44.150175 -105.358116  1387.11  1384.64   \n",
       "2      2003.139571  731266.943347  44.148632 -105.358427  1392.83  1383.49   \n",
       "3      2003.139571  731266.943347  44.147087 -105.358738  1384.24  1382.85   \n",
       "4      2003.139571  731266.943347  44.145542 -105.359048  1369.21  1380.24   \n",
       "...            ...            ...        ...         ...      ...      ...   \n",
       "65231  2009.775995  733691.238340  37.896222 -117.044399  1556.16  1556.43   \n",
       "65232  2009.775995  733691.238340  37.897769 -117.044675  1556.02  1556.43   \n",
       "65233  2009.775995  733691.238340  37.899319 -117.044952  1556.19  1556.44   \n",
       "65234  2009.775995  733691.238340  37.900869 -117.045230  1556.18  1556.44   \n",
       "65235  2009.775995  733691.238341  37.902420 -117.045508  1556.32  1556.44   \n",
       "\n",
       "       dem_z_std  lulc  \n",
       "0           0.33    31  \n",
       "1           0.43    31  \n",
       "2           0.28    31  \n",
       "3           0.84    31  \n",
       "4           1.73    31  \n",
       "...          ...   ...  \n",
       "65231       0.00    31  \n",
       "65232       0.00    31  \n",
       "65233       0.00    31  \n",
       "65234       0.00    31  \n",
       "65235       0.00    31  \n",
       "\n",
       "[65236 rows x 8 columns]"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_csv(csv_fn)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>decyear</th>\n",
       "      <th>ordinal</th>\n",
       "      <th>lat</th>\n",
       "      <th>lon</th>\n",
       "      <th>glas_z</th>\n",
       "      <th>dem_z</th>\n",
       "      <th>dem_z_std</th>\n",
       "      <th>lulc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943345</td>\n",
       "      <td>44.157897</td>\n",
       "      <td>-105.356562</td>\n",
       "      <td>1398.51</td>\n",
       "      <td>1400.52</td>\n",
       "      <td>0.33</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943346</td>\n",
       "      <td>44.150175</td>\n",
       "      <td>-105.358116</td>\n",
       "      <td>1387.11</td>\n",
       "      <td>1384.64</td>\n",
       "      <td>0.43</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943347</td>\n",
       "      <td>44.148632</td>\n",
       "      <td>-105.358427</td>\n",
       "      <td>1392.83</td>\n",
       "      <td>1383.49</td>\n",
       "      <td>0.28</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943347</td>\n",
       "      <td>44.147087</td>\n",
       "      <td>-105.358738</td>\n",
       "      <td>1384.24</td>\n",
       "      <td>1382.85</td>\n",
       "      <td>0.84</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943347</td>\n",
       "      <td>44.145542</td>\n",
       "      <td>-105.359048</td>\n",
       "      <td>1369.21</td>\n",
       "      <td>1380.24</td>\n",
       "      <td>1.73</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65231</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238340</td>\n",
       "      <td>37.896222</td>\n",
       "      <td>-117.044399</td>\n",
       "      <td>1556.16</td>\n",
       "      <td>1556.43</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65232</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238340</td>\n",
       "      <td>37.897769</td>\n",
       "      <td>-117.044675</td>\n",
       "      <td>1556.02</td>\n",
       "      <td>1556.43</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65233</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238340</td>\n",
       "      <td>37.899319</td>\n",
       "      <td>-117.044952</td>\n",
       "      <td>1556.19</td>\n",
       "      <td>1556.44</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65234</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238340</td>\n",
       "      <td>37.900869</td>\n",
       "      <td>-117.045230</td>\n",
       "      <td>1556.18</td>\n",
       "      <td>1556.44</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65235</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238341</td>\n",
       "      <td>37.902420</td>\n",
       "      <td>-117.045508</td>\n",
       "      <td>1556.32</td>\n",
       "      <td>1556.44</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>65236 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           decyear        ordinal        lat         lon   glas_z    dem_z  \\\n",
       "0      2003.139571  731266.943345  44.157897 -105.356562  1398.51  1400.52   \n",
       "1      2003.139571  731266.943346  44.150175 -105.358116  1387.11  1384.64   \n",
       "2      2003.139571  731266.943347  44.148632 -105.358427  1392.83  1383.49   \n",
       "3      2003.139571  731266.943347  44.147087 -105.358738  1384.24  1382.85   \n",
       "4      2003.139571  731266.943347  44.145542 -105.359048  1369.21  1380.24   \n",
       "...            ...            ...        ...         ...      ...      ...   \n",
       "65231  2009.775995  733691.238340  37.896222 -117.044399  1556.16  1556.43   \n",
       "65232  2009.775995  733691.238340  37.897769 -117.044675  1556.02  1556.43   \n",
       "65233  2009.775995  733691.238340  37.899319 -117.044952  1556.19  1556.44   \n",
       "65234  2009.775995  733691.238340  37.900869 -117.045230  1556.18  1556.44   \n",
       "65235  2009.775995  733691.238341  37.902420 -117.045508  1556.32  1556.44   \n",
       "\n",
       "       dem_z_std  lulc  \n",
       "0           0.33    31  \n",
       "1           0.43    31  \n",
       "2           0.28    31  \n",
       "3           0.84    31  \n",
       "4           1.73    31  \n",
       "...          ...   ...  \n",
       "65231       0.00    31  \n",
       "65232       0.00    31  \n",
       "65233       0.00    31  \n",
       "65234       0.00    31  \n",
       "65235       0.00    31  \n",
       "\n",
       "[65236 rows x 8 columns]"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Store output as a new Pandas DataFrame\n",
    "glas_df = pd.read_csv(csv_fn)\n",
    "glas_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas.core.frame.DataFrame"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(glas_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>decyear</th>\n",
       "      <th>ordinal</th>\n",
       "      <th>lat</th>\n",
       "      <th>lon</th>\n",
       "      <th>glas_z</th>\n",
       "      <th>dem_z</th>\n",
       "      <th>dem_z_std</th>\n",
       "      <th>lulc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943345</td>\n",
       "      <td>44.157897</td>\n",
       "      <td>-105.356562</td>\n",
       "      <td>1398.51</td>\n",
       "      <td>1400.52</td>\n",
       "      <td>0.33</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943346</td>\n",
       "      <td>44.150175</td>\n",
       "      <td>-105.358116</td>\n",
       "      <td>1387.11</td>\n",
       "      <td>1384.64</td>\n",
       "      <td>0.43</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943347</td>\n",
       "      <td>44.148632</td>\n",
       "      <td>-105.358427</td>\n",
       "      <td>1392.83</td>\n",
       "      <td>1383.49</td>\n",
       "      <td>0.28</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943347</td>\n",
       "      <td>44.147087</td>\n",
       "      <td>-105.358738</td>\n",
       "      <td>1384.24</td>\n",
       "      <td>1382.85</td>\n",
       "      <td>0.84</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943347</td>\n",
       "      <td>44.145542</td>\n",
       "      <td>-105.359048</td>\n",
       "      <td>1369.21</td>\n",
       "      <td>1380.24</td>\n",
       "      <td>1.73</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652311</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238340</td>\n",
       "      <td>37.896222</td>\n",
       "      <td>-117.044399</td>\n",
       "      <td>1556.16</td>\n",
       "      <td>1556.43</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652321</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238340</td>\n",
       "      <td>37.897769</td>\n",
       "      <td>-117.044675</td>\n",
       "      <td>1556.02</td>\n",
       "      <td>1556.43</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652331</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238340</td>\n",
       "      <td>37.899319</td>\n",
       "      <td>-117.044952</td>\n",
       "      <td>1556.19</td>\n",
       "      <td>1556.44</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652341</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238340</td>\n",
       "      <td>37.900869</td>\n",
       "      <td>-117.045230</td>\n",
       "      <td>1556.18</td>\n",
       "      <td>1556.44</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652351</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238341</td>\n",
       "      <td>37.902420</td>\n",
       "      <td>-117.045508</td>\n",
       "      <td>1556.32</td>\n",
       "      <td>1556.44</td>\n",
       "      <td>0.00</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>65236 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            decyear        ordinal        lat         lon   glas_z    dem_z  \\\n",
       "1       2003.139571  731266.943345  44.157897 -105.356562  1398.51  1400.52   \n",
       "11      2003.139571  731266.943346  44.150175 -105.358116  1387.11  1384.64   \n",
       "21      2003.139571  731266.943347  44.148632 -105.358427  1392.83  1383.49   \n",
       "31      2003.139571  731266.943347  44.147087 -105.358738  1384.24  1382.85   \n",
       "41      2003.139571  731266.943347  44.145542 -105.359048  1369.21  1380.24   \n",
       "...             ...            ...        ...         ...      ...      ...   \n",
       "652311  2009.775995  733691.238340  37.896222 -117.044399  1556.16  1556.43   \n",
       "652321  2009.775995  733691.238340  37.897769 -117.044675  1556.02  1556.43   \n",
       "652331  2009.775995  733691.238340  37.899319 -117.044952  1556.19  1556.44   \n",
       "652341  2009.775995  733691.238340  37.900869 -117.045230  1556.18  1556.44   \n",
       "652351  2009.775995  733691.238341  37.902420 -117.045508  1556.32  1556.44   \n",
       "\n",
       "        dem_z_std  lulc  \n",
       "1            0.33    31  \n",
       "11           0.43    31  \n",
       "21           0.28    31  \n",
       "31           0.84    31  \n",
       "41           1.73    31  \n",
       "...           ...   ...  \n",
       "652311       0.00    31  \n",
       "652321       0.00    31  \n",
       "652331       0.00    31  \n",
       "652341       0.00    31  \n",
       "652351       0.00    31  \n",
       "\n",
       "[65236 rows x 8 columns]"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# For demonstration purpuoses - multiply index to illustrate difference between loc and iloc\n",
    "glas_df.set_index(glas_df.index*10+1, inplace=True)\n",
    "glas_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>decyear</th>\n",
       "      <th>ordinal</th>\n",
       "      <th>lat</th>\n",
       "      <th>lon</th>\n",
       "      <th>glas_z</th>\n",
       "      <th>dem_z</th>\n",
       "      <th>dem_z_std</th>\n",
       "      <th>lulc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>65236.000000</td>\n",
       "      <td>65236.000000</td>\n",
       "      <td>65236.000000</td>\n",
       "      <td>65236.000000</td>\n",
       "      <td>65236.000000</td>\n",
       "      <td>65236.000000</td>\n",
       "      <td>65236.000000</td>\n",
       "      <td>65236.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>2005.945322</td>\n",
       "      <td>732291.890372</td>\n",
       "      <td>40.946798</td>\n",
       "      <td>-115.040612</td>\n",
       "      <td>1791.494167</td>\n",
       "      <td>1792.260964</td>\n",
       "      <td>5.504748</td>\n",
       "      <td>30.339444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.729573</td>\n",
       "      <td>631.766682</td>\n",
       "      <td>3.590476</td>\n",
       "      <td>5.465065</td>\n",
       "      <td>1037.183482</td>\n",
       "      <td>1037.925371</td>\n",
       "      <td>7.518558</td>\n",
       "      <td>3.480576</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943345</td>\n",
       "      <td>34.999455</td>\n",
       "      <td>-124.482406</td>\n",
       "      <td>-115.550000</td>\n",
       "      <td>-114.570000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>12.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>2004.444817</td>\n",
       "      <td>731743.803182</td>\n",
       "      <td>38.101451</td>\n",
       "      <td>-119.257599</td>\n",
       "      <td>1166.970000</td>\n",
       "      <td>1168.240000</td>\n",
       "      <td>0.070000</td>\n",
       "      <td>31.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>2005.846896</td>\n",
       "      <td>732256.116938</td>\n",
       "      <td>39.884541</td>\n",
       "      <td>-115.686241</td>\n",
       "      <td>1555.730000</td>\n",
       "      <td>1556.380000</td>\n",
       "      <td>1.350000</td>\n",
       "      <td>31.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>2007.223249</td>\n",
       "      <td>732758.486046</td>\n",
       "      <td>43.453565</td>\n",
       "      <td>-109.816475</td>\n",
       "      <td>2399.355000</td>\n",
       "      <td>2400.072500</td>\n",
       "      <td>9.530000</td>\n",
       "      <td>31.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>2009.775995</td>\n",
       "      <td>733691.238341</td>\n",
       "      <td>48.999727</td>\n",
       "      <td>-104.052336</td>\n",
       "      <td>4340.310000</td>\n",
       "      <td>4252.940000</td>\n",
       "      <td>49.900000</td>\n",
       "      <td>31.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            decyear        ordinal           lat           lon        glas_z  \\\n",
       "count  65236.000000   65236.000000  65236.000000  65236.000000  65236.000000   \n",
       "mean    2005.945322  732291.890372     40.946798   -115.040612   1791.494167   \n",
       "std        1.729573     631.766682      3.590476      5.465065   1037.183482   \n",
       "min     2003.139571  731266.943345     34.999455   -124.482406   -115.550000   \n",
       "25%     2004.444817  731743.803182     38.101451   -119.257599   1166.970000   \n",
       "50%     2005.846896  732256.116938     39.884541   -115.686241   1555.730000   \n",
       "75%     2007.223249  732758.486046     43.453565   -109.816475   2399.355000   \n",
       "max     2009.775995  733691.238341     48.999727   -104.052336   4340.310000   \n",
       "\n",
       "              dem_z     dem_z_std          lulc  \n",
       "count  65236.000000  65236.000000  65236.000000  \n",
       "mean    1792.260964      5.504748     30.339444  \n",
       "std     1037.925371      7.518558      3.480576  \n",
       "min     -114.570000      0.000000     12.000000  \n",
       "25%     1168.240000      0.070000     31.000000  \n",
       "50%     1556.380000      1.350000     31.000000  \n",
       "75%     2400.072500      9.530000     31.000000  \n",
       "max     4252.940000     49.900000     31.000000  "
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Awesome descriptive statistics for each column\n",
    "glas_df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Indexing and selecting\n",
    "* https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#different-choices-for-indexing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "decyear        2003.139571\n",
       "ordinal      731266.943347\n",
       "lat              44.148632\n",
       "lon            -105.358427\n",
       "glas_z         1392.830000\n",
       "dem_z          1383.490000\n",
       "dem_z_std         0.280000\n",
       "lulc             31.000000\n",
       "Name: 21, dtype: float64"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Integer indexing like NumPy\n",
    "glas_df.iloc[2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>decyear</th>\n",
       "      <th>ordinal</th>\n",
       "      <th>lat</th>\n",
       "      <th>lon</th>\n",
       "      <th>glas_z</th>\n",
       "      <th>dem_z</th>\n",
       "      <th>dem_z_std</th>\n",
       "      <th>lulc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943345</td>\n",
       "      <td>44.157897</td>\n",
       "      <td>-105.356562</td>\n",
       "      <td>1398.51</td>\n",
       "      <td>1400.52</td>\n",
       "      <td>0.33</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943346</td>\n",
       "      <td>44.150175</td>\n",
       "      <td>-105.358116</td>\n",
       "      <td>1387.11</td>\n",
       "      <td>1384.64</td>\n",
       "      <td>0.43</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943347</td>\n",
       "      <td>44.148632</td>\n",
       "      <td>-105.358427</td>\n",
       "      <td>1392.83</td>\n",
       "      <td>1383.49</td>\n",
       "      <td>0.28</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        decyear        ordinal        lat         lon   glas_z    dem_z  \\\n",
       "1   2003.139571  731266.943345  44.157897 -105.356562  1398.51  1400.52   \n",
       "11  2003.139571  731266.943346  44.150175 -105.358116  1387.11  1384.64   \n",
       "21  2003.139571  731266.943347  44.148632 -105.358427  1392.83  1383.49   \n",
       "\n",
       "    dem_z_std  lulc  \n",
       "1        0.33    31  \n",
       "11       0.43    31  \n",
       "21       0.28    31  "
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df.iloc[0:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "decyear        2003.139571\n",
       "ordinal      731266.943347\n",
       "lat              44.148632\n",
       "lon            -105.358427\n",
       "glas_z         1392.830000\n",
       "dem_z          1383.490000\n",
       "dem_z_std         0.280000\n",
       "lulc             31.000000\n",
       "Name: 21, dtype: float64"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df.loc[21]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>decyear</th>\n",
       "      <th>ordinal</th>\n",
       "      <th>lat</th>\n",
       "      <th>lon</th>\n",
       "      <th>glas_z</th>\n",
       "      <th>dem_z</th>\n",
       "      <th>dem_z_std</th>\n",
       "      <th>lulc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943345</td>\n",
       "      <td>44.157897</td>\n",
       "      <td>-105.356562</td>\n",
       "      <td>1398.51</td>\n",
       "      <td>1400.52</td>\n",
       "      <td>0.33</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943346</td>\n",
       "      <td>44.150175</td>\n",
       "      <td>-105.358116</td>\n",
       "      <td>1387.11</td>\n",
       "      <td>1384.64</td>\n",
       "      <td>0.43</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        decyear        ordinal        lat         lon   glas_z    dem_z  \\\n",
       "1   2003.139571  731266.943345  44.157897 -105.356562  1398.51  1400.52   \n",
       "11  2003.139571  731266.943346  44.150175 -105.358116  1387.11  1384.64   \n",
       "\n",
       "    dem_z_std  lulc  \n",
       "1        0.33    31  \n",
       "11       0.43    31  "
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Get labeled indices between 0 and 20\n",
    "glas_df.loc[0:20]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>decyear</th>\n",
       "      <th>ordinal</th>\n",
       "      <th>lat</th>\n",
       "      <th>lon</th>\n",
       "      <th>glas_z</th>\n",
       "      <th>dem_z</th>\n",
       "      <th>dem_z_std</th>\n",
       "      <th>lulc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943345</td>\n",
       "      <td>44.157897</td>\n",
       "      <td>-105.356562</td>\n",
       "      <td>1398.51</td>\n",
       "      <td>1400.52</td>\n",
       "      <td>0.33</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943346</td>\n",
       "      <td>44.150175</td>\n",
       "      <td>-105.358116</td>\n",
       "      <td>1387.11</td>\n",
       "      <td>1384.64</td>\n",
       "      <td>0.43</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943347</td>\n",
       "      <td>44.148632</td>\n",
       "      <td>-105.358427</td>\n",
       "      <td>1392.83</td>\n",
       "      <td>1383.49</td>\n",
       "      <td>0.28</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943347</td>\n",
       "      <td>44.147087</td>\n",
       "      <td>-105.358738</td>\n",
       "      <td>1384.24</td>\n",
       "      <td>1382.85</td>\n",
       "      <td>0.84</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943347</td>\n",
       "      <td>44.145542</td>\n",
       "      <td>-105.359048</td>\n",
       "      <td>1369.21</td>\n",
       "      <td>1380.24</td>\n",
       "      <td>1.73</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943347</td>\n",
       "      <td>44.143996</td>\n",
       "      <td>-105.359359</td>\n",
       "      <td>1366.60</td>\n",
       "      <td>1375.23</td>\n",
       "      <td>1.60</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943351</td>\n",
       "      <td>44.126969</td>\n",
       "      <td>-105.362876</td>\n",
       "      <td>1355.14</td>\n",
       "      <td>1379.38</td>\n",
       "      <td>2.17</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943360</td>\n",
       "      <td>44.074358</td>\n",
       "      <td>-105.373549</td>\n",
       "      <td>1369.53</td>\n",
       "      <td>1391.71</td>\n",
       "      <td>2.88</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>81</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943361</td>\n",
       "      <td>44.072806</td>\n",
       "      <td>-105.373864</td>\n",
       "      <td>1380.02</td>\n",
       "      <td>1387.79</td>\n",
       "      <td>0.45</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>91</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943361</td>\n",
       "      <td>44.071256</td>\n",
       "      <td>-105.374177</td>\n",
       "      <td>1391.47</td>\n",
       "      <td>1396.90</td>\n",
       "      <td>1.56</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>101</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943362</td>\n",
       "      <td>44.063515</td>\n",
       "      <td>-105.375712</td>\n",
       "      <td>1388.58</td>\n",
       "      <td>1408.54</td>\n",
       "      <td>0.24</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>111</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943363</td>\n",
       "      <td>44.061967</td>\n",
       "      <td>-105.376015</td>\n",
       "      <td>1372.55</td>\n",
       "      <td>1406.21</td>\n",
       "      <td>0.17</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>121</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943364</td>\n",
       "      <td>44.057328</td>\n",
       "      <td>-105.376934</td>\n",
       "      <td>1402.38</td>\n",
       "      <td>1406.23</td>\n",
       "      <td>0.33</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>131</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943364</td>\n",
       "      <td>44.055780</td>\n",
       "      <td>-105.377243</td>\n",
       "      <td>1401.82</td>\n",
       "      <td>1405.75</td>\n",
       "      <td>0.35</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943364</td>\n",
       "      <td>44.054231</td>\n",
       "      <td>-105.377553</td>\n",
       "      <td>1399.31</td>\n",
       "      <td>1406.05</td>\n",
       "      <td>0.68</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>151</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943366</td>\n",
       "      <td>44.046487</td>\n",
       "      <td>-105.379115</td>\n",
       "      <td>1394.22</td>\n",
       "      <td>1398.14</td>\n",
       "      <td>0.27</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>161</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943366</td>\n",
       "      <td>44.044941</td>\n",
       "      <td>-105.379430</td>\n",
       "      <td>1394.94</td>\n",
       "      <td>1400.58</td>\n",
       "      <td>0.17</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>171</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943367</td>\n",
       "      <td>44.041850</td>\n",
       "      <td>-105.380064</td>\n",
       "      <td>1386.00</td>\n",
       "      <td>1389.69</td>\n",
       "      <td>0.57</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>181</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943424</td>\n",
       "      <td>43.737000</td>\n",
       "      <td>-105.441568</td>\n",
       "      <td>1496.53</td>\n",
       "      <td>1498.16</td>\n",
       "      <td>1.52</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>191</th>\n",
       "      <td>2003.139571</td>\n",
       "      <td>731266.943429</td>\n",
       "      <td>43.706060</td>\n",
       "      <td>-105.447754</td>\n",
       "      <td>1459.99</td>\n",
       "      <td>1460.90</td>\n",
       "      <td>0.08</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         decyear        ordinal        lat         lon   glas_z    dem_z  \\\n",
       "1    2003.139571  731266.943345  44.157897 -105.356562  1398.51  1400.52   \n",
       "11   2003.139571  731266.943346  44.150175 -105.358116  1387.11  1384.64   \n",
       "21   2003.139571  731266.943347  44.148632 -105.358427  1392.83  1383.49   \n",
       "31   2003.139571  731266.943347  44.147087 -105.358738  1384.24  1382.85   \n",
       "41   2003.139571  731266.943347  44.145542 -105.359048  1369.21  1380.24   \n",
       "51   2003.139571  731266.943347  44.143996 -105.359359  1366.60  1375.23   \n",
       "61   2003.139571  731266.943351  44.126969 -105.362876  1355.14  1379.38   \n",
       "71   2003.139571  731266.943360  44.074358 -105.373549  1369.53  1391.71   \n",
       "81   2003.139571  731266.943361  44.072806 -105.373864  1380.02  1387.79   \n",
       "91   2003.139571  731266.943361  44.071256 -105.374177  1391.47  1396.90   \n",
       "101  2003.139571  731266.943362  44.063515 -105.375712  1388.58  1408.54   \n",
       "111  2003.139571  731266.943363  44.061967 -105.376015  1372.55  1406.21   \n",
       "121  2003.139571  731266.943364  44.057328 -105.376934  1402.38  1406.23   \n",
       "131  2003.139571  731266.943364  44.055780 -105.377243  1401.82  1405.75   \n",
       "141  2003.139571  731266.943364  44.054231 -105.377553  1399.31  1406.05   \n",
       "151  2003.139571  731266.943366  44.046487 -105.379115  1394.22  1398.14   \n",
       "161  2003.139571  731266.943366  44.044941 -105.379430  1394.94  1400.58   \n",
       "171  2003.139571  731266.943367  44.041850 -105.380064  1386.00  1389.69   \n",
       "181  2003.139571  731266.943424  43.737000 -105.441568  1496.53  1498.16   \n",
       "191  2003.139571  731266.943429  43.706060 -105.447754  1459.99  1460.90   \n",
       "\n",
       "     dem_z_std  lulc  \n",
       "1         0.33    31  \n",
       "11        0.43    31  \n",
       "21        0.28    31  \n",
       "31        0.84    31  \n",
       "41        1.73    31  \n",
       "51        1.60    31  \n",
       "61        2.17    31  \n",
       "71        2.88    31  \n",
       "81        0.45    31  \n",
       "91        1.56    31  \n",
       "101       0.24    31  \n",
       "111       0.17    31  \n",
       "121       0.33    31  \n",
       "131       0.35    31  \n",
       "141       0.68    31  \n",
       "151       0.27    31  \n",
       "161       0.17    31  \n",
       "171       0.57    31  \n",
       "181       1.52    31  \n",
       "191       0.08    31  "
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Get integer indices between 0 and 20\n",
    "glas_df.iloc[0:20]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Selecting columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['decyear', 'ordinal', 'lat', 'lon', 'glas_z', 'dem_z', 'dem_z_std',\n",
       "       'lulc'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1         1398.51\n",
       "11        1387.11\n",
       "21        1392.83\n",
       "31        1384.24\n",
       "41        1369.21\n",
       "           ...   \n",
       "652311    1556.16\n",
       "652321    1556.02\n",
       "652331    1556.19\n",
       "652341    1556.18\n",
       "652351    1556.32\n",
       "Name: glas_z, Length: 65236, dtype: float64"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df['glas_z']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1         1398.51\n",
       "11        1387.11\n",
       "21        1392.83\n",
       "31        1384.24\n",
       "41        1369.21\n",
       "           ...   \n",
       "652311    1556.16\n",
       "652321    1556.02\n",
       "652331    1556.19\n",
       "652341    1556.18\n",
       "652351    1556.32\n",
       "Name: glas_z, Length: 65236, dtype: float64"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df.glas_z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1         1398.51\n",
       "11        1387.11\n",
       "21        1392.83\n",
       "31        1384.24\n",
       "41        1369.21\n",
       "           ...   \n",
       "652311    1556.16\n",
       "652321    1556.02\n",
       "652331    1556.19\n",
       "652341    1556.18\n",
       "652351    1556.32\n",
       "Name: glas_z, Length: 65236, dtype: float64"
      ]
     },
     "execution_count": 109,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df.iloc[:,4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1         1398.51\n",
       "11        1387.11\n",
       "21        1392.83\n",
       "31        1384.24\n",
       "41        1369.21\n",
       "           ...   \n",
       "652311    1556.16\n",
       "652321    1556.02\n",
       "652331    1556.19\n",
       "652341    1556.18\n",
       "652351    1556.32\n",
       "Name: glas_z, Length: 65236, dtype: float64"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df.loc[:,'glas_z']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "('glas_z', 'dem_z')",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m/srv/conda/envs/notebook/lib/python3.9/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m   3360\u001b[0m             \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3361\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcasted_key\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3362\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/srv/conda/envs/notebook/lib/python3.9/site-packages/pandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32m/srv/conda/envs/notebook/lib/python3.9/site-packages/pandas/_libs/index.pyx\u001b[0m in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32mpandas/_libs/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: ('glas_z', 'dem_z')",
      "\nThe above exception was the direct cause of the following exception:\n",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m/tmp/ipykernel_512/2880611682.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;31m#Multiple columns\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mglas_df\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'glas_z'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'dem_z'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m/srv/conda/envs/notebook/lib/python3.9/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   3456\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnlevels\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3457\u001b[0m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3458\u001b[0;31m             \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3459\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mis_integer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3460\u001b[0m                 \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mindexer\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/srv/conda/envs/notebook/lib/python3.9/site-packages/pandas/core/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m   3361\u001b[0m                 \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcasted_key\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3362\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3363\u001b[0;31m                 \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3364\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   3365\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mis_scalar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0misna\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhasnans\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: ('glas_z', 'dem_z')"
     ]
    }
   ],
   "source": [
    "#Multiple columns\n",
    "glas_df['glas_z', 'dem_z']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>glas_z</th>\n",
       "      <th>dem_z</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1398.51</td>\n",
       "      <td>1400.52</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>1387.11</td>\n",
       "      <td>1384.64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>1392.83</td>\n",
       "      <td>1383.49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>1384.24</td>\n",
       "      <td>1382.85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>1369.21</td>\n",
       "      <td>1380.24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652311</th>\n",
       "      <td>1556.16</td>\n",
       "      <td>1556.43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652321</th>\n",
       "      <td>1556.02</td>\n",
       "      <td>1556.43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652331</th>\n",
       "      <td>1556.19</td>\n",
       "      <td>1556.44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652341</th>\n",
       "      <td>1556.18</td>\n",
       "      <td>1556.44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652351</th>\n",
       "      <td>1556.32</td>\n",
       "      <td>1556.44</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>65236 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "         glas_z    dem_z\n",
       "1       1398.51  1400.52\n",
       "11      1387.11  1384.64\n",
       "21      1392.83  1383.49\n",
       "31      1384.24  1382.85\n",
       "41      1369.21  1380.24\n",
       "...         ...      ...\n",
       "652311  1556.16  1556.43\n",
       "652321  1556.02  1556.43\n",
       "652331  1556.19  1556.44\n",
       "652341  1556.18  1556.44\n",
       "652351  1556.32  1556.44\n",
       "\n",
       "[65236 rows x 2 columns]"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Need to pass in a list of column names\n",
    "glas_df[['glas_z', 'dem_z']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>glas_z</th>\n",
       "      <th>dem_z</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1398.51</td>\n",
       "      <td>1400.52</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>1387.11</td>\n",
       "      <td>1384.64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>1392.83</td>\n",
       "      <td>1383.49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>1384.24</td>\n",
       "      <td>1382.85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>1369.21</td>\n",
       "      <td>1380.24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652311</th>\n",
       "      <td>1556.16</td>\n",
       "      <td>1556.43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652321</th>\n",
       "      <td>1556.02</td>\n",
       "      <td>1556.43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652331</th>\n",
       "      <td>1556.19</td>\n",
       "      <td>1556.44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652341</th>\n",
       "      <td>1556.18</td>\n",
       "      <td>1556.44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>652351</th>\n",
       "      <td>1556.32</td>\n",
       "      <td>1556.44</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>65236 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "         glas_z    dem_z\n",
       "1       1398.51  1400.52\n",
       "11      1387.11  1384.64\n",
       "21      1392.83  1383.49\n",
       "31      1384.24  1382.85\n",
       "41      1369.21  1380.24\n",
       "...         ...      ...\n",
       "652311  1556.16  1556.43\n",
       "652321  1556.02  1556.43\n",
       "652331  1556.19  1556.44\n",
       "652341  1556.18  1556.44\n",
       "652351  1556.32  1556.44\n",
       "\n",
       "[65236 rows x 2 columns]"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df.loc[:,['glas_z', 'dem_z']]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Boolean indexing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1         31\n",
       "11        31\n",
       "21        31\n",
       "31        31\n",
       "41        31\n",
       "          ..\n",
       "652311    31\n",
       "652321    31\n",
       "652331    31\n",
       "652341    31\n",
       "652351    31\n",
       "Name: lulc, Length: 65236, dtype: int64"
      ]
     },
     "execution_count": 116,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df['lulc']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "31    62968\n",
       "12     2268\n",
       "Name: lulc, dtype: int64"
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df['lulc'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1         False\n",
       "11        False\n",
       "21        False\n",
       "31        False\n",
       "41        False\n",
       "          ...  \n",
       "652311    False\n",
       "652321    False\n",
       "652331    False\n",
       "652341    False\n",
       "652351    False\n",
       "Name: lulc, Length: 65236, dtype: bool"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df['lulc'] == 12"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Boolean Series (index and single column) will be True for records with 'lulc' == 12\n",
    "idx2 = glas_df['lulc'] == 12"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas.core.series.Series"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(idx2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(65236,)"
      ]
     },
     "execution_count": 121,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "idx2.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(65236, 8)"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>decyear</th>\n",
       "      <th>ordinal</th>\n",
       "      <th>lat</th>\n",
       "      <th>lon</th>\n",
       "      <th>glas_z</th>\n",
       "      <th>dem_z</th>\n",
       "      <th>dem_z_std</th>\n",
       "      <th>lulc</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>231</th>\n",
       "      <td>2003.139573</td>\n",
       "      <td>731266.944184</td>\n",
       "      <td>39.669291</td>\n",
       "      <td>-106.225142</td>\n",
       "      <td>3505.12</td>\n",
       "      <td>3508.25</td>\n",
       "      <td>5.74</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>301</th>\n",
       "      <td>2003.139573</td>\n",
       "      <td>731266.944316</td>\n",
       "      <td>38.961190</td>\n",
       "      <td>-106.355153</td>\n",
       "      <td>4046.47</td>\n",
       "      <td>4047.25</td>\n",
       "      <td>7.14</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4891</th>\n",
       "      <td>2003.147846</td>\n",
       "      <td>731269.963718</td>\n",
       "      <td>48.587233</td>\n",
       "      <td>-113.484046</td>\n",
       "      <td>2135.76</td>\n",
       "      <td>2123.37</td>\n",
       "      <td>1.18</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4921</th>\n",
       "      <td>2003.147846</td>\n",
       "      <td>731269.963811</td>\n",
       "      <td>48.091352</td>\n",
       "      <td>-113.595790</td>\n",
       "      <td>1632.52</td>\n",
       "      <td>1615.77</td>\n",
       "      <td>11.43</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7561</th>\n",
       "      <td>2003.157366</td>\n",
       "      <td>731273.438572</td>\n",
       "      <td>43.897412</td>\n",
       "      <td>-114.457131</td>\n",
       "      <td>2886.39</td>\n",
       "      <td>2889.82</td>\n",
       "      <td>20.31</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>647241</th>\n",
       "      <td>2009.764964</td>\n",
       "      <td>733687.211708</td>\n",
       "      <td>40.689722</td>\n",
       "      <td>-105.918309</td>\n",
       "      <td>3267.33</td>\n",
       "      <td>3267.62</td>\n",
       "      <td>1.83</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>647251</th>\n",
       "      <td>2009.764964</td>\n",
       "      <td>733687.211709</td>\n",
       "      <td>40.694371</td>\n",
       "      <td>-105.919164</td>\n",
       "      <td>3235.77</td>\n",
       "      <td>3238.94</td>\n",
       "      <td>3.78</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>649831</th>\n",
       "      <td>2009.771998</td>\n",
       "      <td>733689.779258</td>\n",
       "      <td>47.910365</td>\n",
       "      <td>-123.628017</td>\n",
       "      <td>1671.86</td>\n",
       "      <td>1711.73</td>\n",
       "      <td>8.44</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>649841</th>\n",
       "      <td>2009.771998</td>\n",
       "      <td>733689.779258</td>\n",
       "      <td>47.908820</td>\n",
       "      <td>-123.628357</td>\n",
       "      <td>1737.70</td>\n",
       "      <td>1776.17</td>\n",
       "      <td>7.70</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>649851</th>\n",
       "      <td>2009.771998</td>\n",
       "      <td>733689.779258</td>\n",
       "      <td>47.907275</td>\n",
       "      <td>-123.628697</td>\n",
       "      <td>1782.52</td>\n",
       "      <td>1828.93</td>\n",
       "      <td>4.41</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2268 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            decyear        ordinal        lat         lon   glas_z    dem_z  \\\n",
       "231     2003.139573  731266.944184  39.669291 -106.225142  3505.12  3508.25   \n",
       "301     2003.139573  731266.944316  38.961190 -106.355153  4046.47  4047.25   \n",
       "4891    2003.147846  731269.963718  48.587233 -113.484046  2135.76  2123.37   \n",
       "4921    2003.147846  731269.963811  48.091352 -113.595790  1632.52  1615.77   \n",
       "7561    2003.157366  731273.438572  43.897412 -114.457131  2886.39  2889.82   \n",
       "...             ...            ...        ...         ...      ...      ...   \n",
       "647241  2009.764964  733687.211708  40.689722 -105.918309  3267.33  3267.62   \n",
       "647251  2009.764964  733687.211709  40.694371 -105.919164  3235.77  3238.94   \n",
       "649831  2009.771998  733689.779258  47.910365 -123.628017  1671.86  1711.73   \n",
       "649841  2009.771998  733689.779258  47.908820 -123.628357  1737.70  1776.17   \n",
       "649851  2009.771998  733689.779258  47.907275 -123.628697  1782.52  1828.93   \n",
       "\n",
       "        dem_z_std  lulc  \n",
       "231          5.74    12  \n",
       "301          7.14    12  \n",
       "4891         1.18    12  \n",
       "4921        11.43    12  \n",
       "7561        20.31    12  \n",
       "...           ...   ...  \n",
       "647241       1.83    12  \n",
       "647251       3.78    12  \n",
       "649831       8.44    12  \n",
       "649841       7.70    12  \n",
       "649851       4.41    12  \n",
       "\n",
       "[2268 rows x 8 columns]"
      ]
     },
     "execution_count": 123,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Use to select corresponding rows, returns a new DataFrame with all columns\n",
    "glas_df[idx2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2268, 8)"
      ]
     },
     "execution_count": 124,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df[idx2].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "decyear        2006.008627\n",
       "ordinal      732315.035881\n",
       "lat              43.065223\n",
       "lon            -112.936499\n",
       "glas_z         2918.746261\n",
       "dem_z          2920.785754\n",
       "dem_z_std         9.719951\n",
       "lulc             12.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 125,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df[idx2].mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Groupby\n",
    "* Let's consider statistics for groups of rows that share the same column attribute"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f7d7c2b2a90>"
      ]
     },
     "execution_count": 126,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df.groupby('lulc')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>decyear</th>\n",
       "      <th>ordinal</th>\n",
       "      <th>lat</th>\n",
       "      <th>lon</th>\n",
       "      <th>glas_z</th>\n",
       "      <th>dem_z</th>\n",
       "      <th>dem_z_std</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lulc</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2268</td>\n",
       "      <td>2268</td>\n",
       "      <td>2268</td>\n",
       "      <td>2268</td>\n",
       "      <td>2268</td>\n",
       "      <td>2268</td>\n",
       "      <td>2268</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>62968</td>\n",
       "      <td>62968</td>\n",
       "      <td>62968</td>\n",
       "      <td>62968</td>\n",
       "      <td>62968</td>\n",
       "      <td>62968</td>\n",
       "      <td>62968</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      decyear  ordinal    lat    lon  glas_z  dem_z  dem_z_std\n",
       "lulc                                                          \n",
       "12       2268     2268   2268   2268    2268   2268       2268\n",
       "31      62968    62968  62968  62968   62968  62968      62968"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df.groupby('lulc').count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>decyear</th>\n",
       "      <th>ordinal</th>\n",
       "      <th>lat</th>\n",
       "      <th>lon</th>\n",
       "      <th>glas_z</th>\n",
       "      <th>dem_z</th>\n",
       "      <th>dem_z_std</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lulc</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2006.008627</td>\n",
       "      <td>732315.035881</td>\n",
       "      <td>43.065223</td>\n",
       "      <td>-112.936499</td>\n",
       "      <td>2918.746261</td>\n",
       "      <td>2920.785754</td>\n",
       "      <td>9.719951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>2005.943042</td>\n",
       "      <td>732291.056710</td>\n",
       "      <td>40.870496</td>\n",
       "      <td>-115.116398</td>\n",
       "      <td>1750.892469</td>\n",
       "      <td>1751.613426</td>\n",
       "      <td>5.352924</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          decyear        ordinal        lat         lon       glas_z  \\\n",
       "lulc                                                                   \n",
       "12    2006.008627  732315.035881  43.065223 -112.936499  2918.746261   \n",
       "31    2005.943042  732291.056710  40.870496 -115.116398  1750.892469   \n",
       "\n",
       "            dem_z  dem_z_std  \n",
       "lulc                          \n",
       "12    2920.785754   9.719951  \n",
       "31    1751.613426   5.352924  "
      ]
     },
     "execution_count": 128,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df.groupby('lulc').mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">decyear</th>\n",
       "      <th colspan=\"2\" halign=\"left\">ordinal</th>\n",
       "      <th colspan=\"2\" halign=\"left\">lat</th>\n",
       "      <th colspan=\"2\" halign=\"left\">lon</th>\n",
       "      <th colspan=\"2\" halign=\"left\">glas_z</th>\n",
       "      <th colspan=\"2\" halign=\"left\">dem_z</th>\n",
       "      <th colspan=\"2\" halign=\"left\">dem_z_std</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lulc</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2006.008627</td>\n",
       "      <td>1.498488</td>\n",
       "      <td>732315.035881</td>\n",
       "      <td>547.316709</td>\n",
       "      <td>43.065223</td>\n",
       "      <td>3.569772</td>\n",
       "      <td>-112.936499</td>\n",
       "      <td>7.610318</td>\n",
       "      <td>2918.746261</td>\n",
       "      <td>772.429857</td>\n",
       "      <td>2920.785754</td>\n",
       "      <td>769.897983</td>\n",
       "      <td>9.719951</td>\n",
       "      <td>5.805685</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>2005.943042</td>\n",
       "      <td>1.737290</td>\n",
       "      <td>732291.056710</td>\n",
       "      <td>634.586821</td>\n",
       "      <td>40.870496</td>\n",
       "      <td>3.567855</td>\n",
       "      <td>-115.116398</td>\n",
       "      <td>5.356521</td>\n",
       "      <td>1750.892469</td>\n",
       "      <td>1022.544938</td>\n",
       "      <td>1751.613426</td>\n",
       "      <td>1023.340882</td>\n",
       "      <td>5.352924</td>\n",
       "      <td>7.529161</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          decyear                  ordinal                    lat            \\\n",
       "             mean       std           mean         std       mean       std   \n",
       "lulc                                                                          \n",
       "12    2006.008627  1.498488  732315.035881  547.316709  43.065223  3.569772   \n",
       "31    2005.943042  1.737290  732291.056710  634.586821  40.870496  3.567855   \n",
       "\n",
       "             lon                 glas_z                     dem_z  \\\n",
       "            mean       std         mean          std         mean   \n",
       "lulc                                                                \n",
       "12   -112.936499  7.610318  2918.746261   772.429857  2920.785754   \n",
       "31   -115.116398  5.356521  1750.892469  1022.544938  1751.613426   \n",
       "\n",
       "                  dem_z_std            \n",
       "              std      mean       std  \n",
       "lulc                                   \n",
       "12     769.897983  9.719951  5.805685  \n",
       "31    1023.340882  5.352924  7.529161  "
      ]
     },
     "execution_count": 129,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "glas_df.groupby('lulc').agg(['mean', 'std'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [],
   "source": [
    "import seaborn as sns\n",
    "planets = sns.load_dataset('planets')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>method</th>\n",
       "      <th>number</th>\n",
       "      <th>orbital_period</th>\n",
       "      <th>mass</th>\n",
       "      <th>distance</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Radial Velocity</td>\n",
       "      <td>1</td>\n",
       "      <td>269.300000</td>\n",
       "      <td>7.10</td>\n",
       "      <td>77.40</td>\n",
       "      <td>2006</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Radial Velocity</td>\n",
       "      <td>1</td>\n",
       "      <td>874.774000</td>\n",
       "      <td>2.21</td>\n",
       "      <td>56.95</td>\n",
       "      <td>2008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Radial Velocity</td>\n",
       "      <td>1</td>\n",
       "      <td>763.000000</td>\n",
       "      <td>2.60</td>\n",
       "      <td>19.84</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Radial Velocity</td>\n",
       "      <td>1</td>\n",
       "      <td>326.030000</td>\n",
       "      <td>19.40</td>\n",
       "      <td>110.62</td>\n",
       "      <td>2007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Radial Velocity</td>\n",
       "      <td>1</td>\n",
       "      <td>516.220000</td>\n",
       "      <td>10.50</td>\n",
       "      <td>119.47</td>\n",
       "      <td>2009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1030</th>\n",
       "      <td>Transit</td>\n",
       "      <td>1</td>\n",
       "      <td>3.941507</td>\n",
       "      <td>NaN</td>\n",
       "      <td>172.00</td>\n",
       "      <td>2006</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1031</th>\n",
       "      <td>Transit</td>\n",
       "      <td>1</td>\n",
       "      <td>2.615864</td>\n",
       "      <td>NaN</td>\n",
       "      <td>148.00</td>\n",
       "      <td>2007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1032</th>\n",
       "      <td>Transit</td>\n",
       "      <td>1</td>\n",
       "      <td>3.191524</td>\n",
       "      <td>NaN</td>\n",
       "      <td>174.00</td>\n",
       "      <td>2007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1033</th>\n",
       "      <td>Transit</td>\n",
       "      <td>1</td>\n",
       "      <td>4.125083</td>\n",
       "      <td>NaN</td>\n",
       "      <td>293.00</td>\n",
       "      <td>2008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1034</th>\n",
       "      <td>Transit</td>\n",
       "      <td>1</td>\n",
       "      <td>4.187757</td>\n",
       "      <td>NaN</td>\n",
       "      <td>260.00</td>\n",
       "      <td>2008</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1035 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "               method  number  orbital_period   mass  distance  year\n",
       "0     Radial Velocity       1      269.300000   7.10     77.40  2006\n",
       "1     Radial Velocity       1      874.774000   2.21     56.95  2008\n",
       "2     Radial Velocity       1      763.000000   2.60     19.84  2011\n",
       "3     Radial Velocity       1      326.030000  19.40    110.62  2007\n",
       "4     Radial Velocity       1      516.220000  10.50    119.47  2009\n",
       "...               ...     ...             ...    ...       ...   ...\n",
       "1030          Transit       1        3.941507    NaN    172.00  2006\n",
       "1031          Transit       1        2.615864    NaN    148.00  2007\n",
       "1032          Transit       1        3.191524    NaN    174.00  2007\n",
       "1033          Transit       1        4.125083    NaN    293.00  2008\n",
       "1034          Transit       1        4.187757    NaN    260.00  2008\n",
       "\n",
       "[1035 rows x 6 columns]"
      ]
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "planets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "method\n",
       "Astrometry                         631.180000\n",
       "Eclipse Timing Variations         4343.500000\n",
       "Imaging                          27500.000000\n",
       "Microlensing                      3300.000000\n",
       "Orbital Brightness Modulation        0.342887\n",
       "Pulsar Timing                       66.541900\n",
       "Pulsation Timing Variations       1170.000000\n",
       "Radial Velocity                    360.200000\n",
       "Transit                              5.714932\n",
       "Transit Timing Variations           57.011000\n",
       "Name: orbital_period, dtype: float64"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "planets.groupby('method')['orbital_period'].median()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
