Commits

Hernan Rojas committed c5fe31a

added lesson 11

  • Participants
  • Parent commits dcbca02

Comments (0)

Files changed (1)

File lessons/11 - Lesson.ipynb

+{
+ "metadata": {
+  "name": "11 - Lesson"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+  {
+   "cells": [
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "# Lesson 11  \n",
+      "\n",
+      "Grab data from multiple excel files and merge them into a single dataframe."
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "from pandas import DataFrame, ExcelFile\n",
+      "import pandas as pd\n",
+      "import os"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [],
+     "prompt_number": 1
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "print 'Pandas version: ' + pd.__version__"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "Pandas version: 0.10.1\n"
+       ]
+      }
+     ],
+     "prompt_number": 2
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "# Ctreate 3 excel files"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Create DataFrame\n",
+      "d = {'Channel':[1], 'Number':[255]}\n",
+      "df = DataFrame(d)\n",
+      "df"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "html": [
+        "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
+        "<table border=\"1\" class=\"dataframe\">\n",
+        "  <thead>\n",
+        "    <tr style=\"text-align: right;\">\n",
+        "      <th></th>\n",
+        "      <th>Channel</th>\n",
+        "      <th>Number</th>\n",
+        "    </tr>\n",
+        "  </thead>\n",
+        "  <tbody>\n",
+        "    <tr>\n",
+        "      <th>0</th>\n",
+        "      <td> 1</td>\n",
+        "      <td> 255</td>\n",
+        "    </tr>\n",
+        "  </tbody>\n",
+        "</table>\n",
+        "</div>"
+       ],
+       "output_type": "pyout",
+       "prompt_number": 3,
+       "text": [
+        "   Channel  Number\n",
+        "0        1     255"
+       ]
+      }
+     ],
+     "prompt_number": 3
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Export to Excel\n",
+      "\n",
+      "df.to_excel('test1.xlsx', sheet_name = 'test1', index = False)\n",
+      "df.to_excel('test2.xlsx', sheet_name = 'test2', index = False)\n",
+      "df.to_excel('test3.xlsx', sheet_name = 'test3', index = False)\n",
+      "print 'Done'"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "Done\n"
+       ]
+      }
+     ],
+     "prompt_number": 4
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "# Place all three Excel files into a DataFrame"
+     ]
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "Get a list of file names"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# List to hold file names\n",
+      "FileNames = []\n",
+      "\n",
+      "# Your path will be different, please modify the path below.\n",
+      "os.chdir(\"C:\\Users\\David\\.xy\\startups\")\n",
+      "\n",
+      "# Find any file that ends with \".xlsx\"\n",
+      "for files in os.listdir(\".\"):\n",
+      "    if files.endswith(\".xlsx\"):\n",
+      "        FileNames.append(files)\n",
+      "        \n",
+      "FileNames"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "pyout",
+       "prompt_number": 5,
+       "text": [
+        "['test1.xlsx', 'test2.xlsx', 'test3.xlsx']"
+       ]
+      }
+     ],
+     "prompt_number": 5
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "Create a function to process all of the excel files."
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "def GetFile(fnombre):\n",
+      "\n",
+      "    # Path to excel file\n",
+      "    # Your path will be different, please modify the path below.\n",
+      "    location = r'C:\\Users\\David\\.xy\\startups\\\\' + fnombre\n",
+      "    \n",
+      "    # Create ExcelFile object\n",
+      "    xls = ExcelFile(location)\n",
+      "    \n",
+      "    # Parse the excel file\n",
+      "    # xls.sheet_names[0] = first sheet\n",
+      "    df = xls.parse(xls.sheet_names[0])\n",
+      "    \n",
+      "    # Tag record to file name\n",
+      "    df['File'] = fnombre\n",
+      "    \n",
+      "    # Make the \"File\" column the index of the df\n",
+      "    return df.set_index(['File'])"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [],
+     "prompt_number": 18
+    },
+    {
+     "cell_type": "markdown",
+     "metadata": {},
+     "source": [
+      "Go through each file name, create a dataframe, and add it to a list.  \n",
+      "\n",
+      "i.e.  \n",
+      "df_list = [df, df, df]"
+     ]
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Create a list of dataframes\n",
+      "df_list = [GetFile(fname) for fname in FileNames]\n",
+      "df_list"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "pyout",
+       "prompt_number": 21,
+       "text": [
+        "[            Channel  Number\n",
+        "File                       \n",
+        "test1.xlsx        1     255,\n",
+        "             Channel  Number\n",
+        "File                       \n",
+        "test2.xlsx        1     255,\n",
+        "             Channel  Number\n",
+        "File                       \n",
+        "test3.xlsx        1     255]"
+       ]
+      }
+     ],
+     "prompt_number": 21
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Combine all of the dataframes into one\n",
+      "big_df = pd.concat(df_list)\n",
+      "big_df"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "html": [
+        "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
+        "<table border=\"1\" class=\"dataframe\">\n",
+        "  <thead>\n",
+        "    <tr style=\"text-align: right;\">\n",
+        "      <th></th>\n",
+        "      <th>Channel</th>\n",
+        "      <th>Number</th>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>File</th>\n",
+        "      <th></th>\n",
+        "      <th></th>\n",
+        "    </tr>\n",
+        "  </thead>\n",
+        "  <tbody>\n",
+        "    <tr>\n",
+        "      <th>test1.xlsx</th>\n",
+        "      <td> 1</td>\n",
+        "      <td> 255</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>test2.xlsx</th>\n",
+        "      <td> 1</td>\n",
+        "      <td> 255</td>\n",
+        "    </tr>\n",
+        "    <tr>\n",
+        "      <th>test3.xlsx</th>\n",
+        "      <td> 1</td>\n",
+        "      <td> 255</td>\n",
+        "    </tr>\n",
+        "  </tbody>\n",
+        "</table>\n",
+        "</div>"
+       ],
+       "output_type": "pyout",
+       "prompt_number": 22,
+       "text": [
+        "            Channel  Number\n",
+        "File                       \n",
+        "test1.xlsx        1     255\n",
+        "test2.xlsx        1     255\n",
+        "test3.xlsx        1     255"
+       ]
+      }
+     ],
+     "prompt_number": 22
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "big_df.dtypes"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "pyout",
+       "prompt_number": 23,
+       "text": [
+        "Channel    float64\n",
+        "Number     float64"
+       ]
+      }
+     ],
+     "prompt_number": 23
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Correct data types\n",
+      "big_df['Channel'] = big_df['Channel'].astype('int')\n",
+      "big_df['Number'] = big_df['Number'].astype('int')\n",
+      "big_df.dtypes"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "pyout",
+       "prompt_number": 24,
+       "text": [
+        "Channel    int64\n",
+        "Number     int64"
+       ]
+      }
+     ],
+     "prompt_number": 24
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "# Plot it!\n",
+      "big_df.plot(kind='bar')"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "pyout",
+       "prompt_number": 34,
+       "text": [
+        "<matplotlib.axes.AxesSubplot at 0x5e71430>"
+       ]
+      },
+      {
+       "output_type": "display_data",
+       "png": "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\nuDmdTv3lL3/RxYsXtXz5cu3Zs+eGjvHBBx+ouLhYtbW1mj17tkaOHCmn06kJEyaorKxMK1euVF1d\nnerq6rRt2zZ99913kpqexfDG5XI1yEpvrhnkdXV1mjRpkqZMmaKJEydKkmJiYjwfGMyYMcMzfeJ0\nOhv8tjp48KDn3nQAbh7RkZGteKO3S89/vebMmdPgnPI33nhDL774onr06KHS0tIGHzL6ciu3q9c9\n/PDDys3NVffu3bV9+3atXLlSkhQZGanCwkKtWbNGTqdTvXv31qxZs1RbW9vssfzF663ebNtWdna2\nunfvrpdfftmzvKKiQr1795Ykvfzyy9q2bZtWrVql0tJSTZ48WSUlJXK73Ro3bpy+//77Rve0a+lv\nppuJZVkK1VdvqeWjhpsJvfFy/Db+cxtI13OrN69z5MXFxVq5cqVuv/12JScnS5Lmz5+v1atXa8eO\nHbIsS7fccouWLl0q6dKNTDMzM5WUlKSwsDAtWbIkJP8KCgBuJtx8OcAY9YUueuPl+G385zaQrmdE\nzl92AoDhfD79EEDbFR0dzTRpgERHR7d4H6ZWAoz/vocuehO66A1TKwBwUyPIAcBwBDkAGI4gBwDD\nEeQAYDiCHAAMR5ADgOEIcgAwHEEOAIYjyAHAcAQ5ABiOIAcAwxHkAGA4ghwADEeQA4DhCHIAMBxB\nDgCGI8gBwHAEOQAYjiAHAMMR5ABgOIIcAAxHkAOA4QhyADAcQQ4AhvMa5OXl5RozZowGDhyoQYMG\n6ZVXXpEkVVZWKi0tTf3799f48eN18uRJzz4LFixQQkKCEhMTVVhY2LrVAwBk2bZtN7fy8OHDOnz4\nsIYMGaKamhoNGzZM69ev15tvvqkePXro+eef18KFC1VVVaW8vDyVlpZq8uTJ2rZtm9xut8aNG6ey\nsjK1a/e/3xeWZcnLIW96lmUpVF+9JdGbYBfRDHpDb7xlp9cRea9evTRkyBBJUufOnXXbbbfJ7XZr\n48aNys7OliRlZ2dr/fr1kqQNGzYoKytL4eHhiouLU3x8vEpKSvz5WgAAVwnzdcN9+/Zp+/btuvPO\nO3XkyBE5HA5JksPh0JEjRyRJhw4d0ogRIzz7xMbGyu12N3qunJwcz9cul0sul+s6yweAm1NRUZGK\niop82tanIK+pqdGkSZOUn5+vyMjIBussy5JlWc3u29S6K4McANDY1YPc3NzcZre95lkrdXV1mjRp\n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\nAAAASUVORK5CYII=\n"
+      }
+     ],
+     "prompt_number": 34
+    }
+   ],
+   "metadata": {}
+  }
+ ]
+}