{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ЛШКН День 2. Теория. Введение в Pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Ввведение в pandas"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Базовые объекты pandas это **Series** и **DataFrame** "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Series – одномерный список разнородных объектов"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0                7\n",
       "1       Heisenberg\n",
       "2             3.14\n",
       "3      -1789710578\n",
       "4    Happy Eating!\n",
       "dtype: object"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series([7, 'Heisenberg', 3.14, -1789710578, 'Happy Eating!'])\n",
    "s"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Которые можно индексировать"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A                7\n",
       "Z       Heisenberg\n",
       "C             3.14\n",
       "Y      -1789710578\n",
       "E    Happy Eating!\n",
       "dtype: object"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series([7, 'Heisenberg', 3.14, -1789710578, 'Happy Eating!'],\n",
    "              index=['A', 'Z', 'C', 'Y', 'E'])\n",
    "s"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Также инициализировать dict-ом"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Austin            450.0\n",
       "Boston              NaN\n",
       "Chicago          1000.0\n",
       "New York         1300.0\n",
       "Portland          900.0\n",
       "San Francisco    1100.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = {'Chicago': 1000, 'New York': 1300, 'Portland': 900, 'San Francisco': 1100,\n",
    "     'Austin': 450, 'Boston': None}\n",
    "cities = pd.Series(d)\n",
    "cities"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Индексация аналогичная numpy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1000.0"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cities['Chicago']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Chicago          1000.0\n",
       "Portland          900.0\n",
       "San Francisco    1100.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cities[['Chicago', 'Portland', 'San Francisco']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Austin      450.0\n",
       "Portland    900.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cities[cities < 1000]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Austin            True\n",
      "Boston           False\n",
      "Chicago          False\n",
      "New York         False\n",
      "Portland          True\n",
      "San Francisco    False\n",
      "dtype: bool\n",
      "\n",
      "\n",
      "Austin      450.0\n",
      "Portland    900.0\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "less_than_1000 = cities < 1000\n",
    "print(less_than_1000)\n",
    "print('\\n')\n",
    "print(cities[less_than_1000])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('Old value:', 1000.0)\n",
      "('New value:', 1400.0)\n"
     ]
    }
   ],
   "source": [
    "print('Old value:', cities['Chicago'])\n",
    "cities['Chicago'] = 1400\n",
    "print('New value:', cities['Chicago'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Austin            450.0\n",
      "Boston              NaN\n",
      "Chicago          1400.0\n",
      "New York         1300.0\n",
      "Portland          900.0\n",
      "San Francisco    1100.0\n",
      "dtype: float64\n",
      "\n",
      "\n",
      "Austin            750.0\n",
      "Boston              NaN\n",
      "Chicago          1400.0\n",
      "New York         1300.0\n",
      "Portland          750.0\n",
      "San Francisco    1100.0\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(cities)\n",
    "print('\\n')\n",
    "cities[cities < 1000] = 750\n",
    "\n",
    "print(cities)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Всё, что работает для dict-а *возможно* работет и для Series"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "False\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "print('Seattle' in cities)\n",
    "print('San Francisco' in cities)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Всё, что работает для np.array *возможно* работет и для Series"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Austin           250.000000\n",
       "Boston                  NaN\n",
       "Chicago          466.666667\n",
       "New York         433.333333\n",
       "Portland         250.000000\n",
       "San Francisco    366.666667\n",
       "dtype: float64"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cities / 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Austin            562500.0\n",
       "Boston                 NaN\n",
       "Chicago          1960000.0\n",
       "New York         1690000.0\n",
       "Portland          562500.0\n",
       "San Francisco    1210000.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.square(cities)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Если сложить два Series, на пересечениях произойдёт сложение, в остальных случаях будет NaN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Chicago     1400.0\n",
      "New York    1300.0\n",
      "Portland     750.0\n",
      "dtype: float64\n",
      "\n",
      "\n",
      "Austin       750.0\n",
      "New York    1300.0\n",
      "dtype: float64\n",
      "\n",
      "\n",
      "Austin         NaN\n",
      "Chicago        NaN\n",
      "New York    2600.0\n",
      "Portland       NaN\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(cities[['Chicago', 'New York', 'Portland']])\n",
    "print('\\n')\n",
    "print(cities[['Austin', 'New York']])\n",
    "print('\\n')\n",
    "print(cities[['Chicago', 'New York', 'Portland']] + cities[['Austin', 'New York']])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### DataFrame – двумерная таблица разнородных объектов"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>losses</th>\n",
       "      <th>team</th>\n",
       "      <th>wins</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5</td>\n",
       "      <td>Bears</td>\n",
       "      <td>11</td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>8</td>\n",
       "      <td>Bears</td>\n",
       "      <td>8</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>6</td>\n",
       "      <td>Bears</td>\n",
       "      <td>10</td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>Packers</td>\n",
       "      <td>15</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>Packers</td>\n",
       "      <td>11</td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>10</td>\n",
       "      <td>Lions</td>\n",
       "      <td>6</td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6</td>\n",
       "      <td>Lions</td>\n",
       "      <td>10</td>\n",
       "      <td>2011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>12</td>\n",
       "      <td>Lions</td>\n",
       "      <td>4</td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   losses     team  wins  year\n",
       "0       5    Bears    11  2010\n",
       "1       8    Bears     8  2011\n",
       "2       6    Bears    10  2012\n",
       "3       1  Packers    15  2011\n",
       "4       5  Packers    11  2012\n",
       "5      10    Lions     6  2010\n",
       "6       6    Lions    10  2011\n",
       "7      12    Lions     4  2012"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = {'year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012],\n",
    "        'team': ['Bears', 'Bears', 'Bears', 'Packers', 'Packers', 'Lions', 'Lions', 'Lions'],\n",
    "        'wins': [11, 8, 10, 15, 11, 6, 10, 4],\n",
    "        'losses': [5, 8, 6, 1, 5, 10, 6, 12]}\n",
    "football = pd.DataFrame(data)\n",
    "football"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Порядок колонок можно задать опцией columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>year</th>\n",
       "      <th>team</th>\n",
       "      <th>wins</th>\n",
       "      <th>losses</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2010</td>\n",
       "      <td>Bears</td>\n",
       "      <td>11</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2011</td>\n",
       "      <td>Bears</td>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2012</td>\n",
       "      <td>Bears</td>\n",
       "      <td>10</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2011</td>\n",
       "      <td>Packers</td>\n",
       "      <td>15</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2012</td>\n",
       "      <td>Packers</td>\n",
       "      <td>11</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2010</td>\n",
       "      <td>Lions</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2011</td>\n",
       "      <td>Lions</td>\n",
       "      <td>10</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2012</td>\n",
       "      <td>Lions</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   year     team  wins  losses\n",
       "0  2010    Bears    11       5\n",
       "1  2011    Bears     8       8\n",
       "2  2012    Bears    10       6\n",
       "3  2011  Packers    15       1\n",
       "4  2012  Packers    11       5\n",
       "5  2010    Lions     6      10\n",
       "6  2011    Lions    10       6\n",
       "7  2012    Lions     4      12"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "football = pd.DataFrame(data, columns=['year', 'team', 'wins', 'losses'])\n",
    "football"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "lens = pd.read_csv('movie_lens.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>movie_id</th>\n",
       "      <th>title</th>\n",
       "      <th>release_date</th>\n",
       "      <th>video_release_date</th>\n",
       "      <th>imdb_url</th>\n",
       "      <th>user_id</th>\n",
       "      <th>rating</th>\n",
       "      <th>unix_timestamp</th>\n",
       "      <th>age</th>\n",
       "      <th>sex</th>\n",
       "      <th>occupation</th>\n",
       "      <th>zip_code</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>99995</th>\n",
       "      <td>748</td>\n",
       "      <td>Saint, The (1997)</td>\n",
       "      <td>14-Mar-1997</td>\n",
       "      <td>NaN</td>\n",
       "      <td>http://us.imdb.com/M/title-exact?Saint%2C%20Th...</td>\n",
       "      <td>729</td>\n",
       "      <td>4</td>\n",
       "      <td>893286638</td>\n",
       "      <td>19</td>\n",
       "      <td>M</td>\n",
       "      <td>student</td>\n",
       "      <td>56567</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99996</th>\n",
       "      <td>751</td>\n",
       "      <td>Tomorrow Never Dies (1997)</td>\n",
       "      <td>01-Jan-1997</td>\n",
       "      <td>NaN</td>\n",
       "      <td>http://us.imdb.com/M/title-exact?imdb-title-12...</td>\n",
       "      <td>729</td>\n",
       "      <td>3</td>\n",
       "      <td>893286338</td>\n",
       "      <td>19</td>\n",
       "      <td>M</td>\n",
       "      <td>student</td>\n",
       "      <td>56567</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99997</th>\n",
       "      <td>879</td>\n",
       "      <td>Peacemaker, The (1997)</td>\n",
       "      <td>01-Jan-1997</td>\n",
       "      <td>NaN</td>\n",
       "      <td>http://us.imdb.com/M/title-exact?Peacemaker%2C...</td>\n",
       "      <td>729</td>\n",
       "      <td>3</td>\n",
       "      <td>893286299</td>\n",
       "      <td>19</td>\n",
       "      <td>M</td>\n",
       "      <td>student</td>\n",
       "      <td>56567</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99998</th>\n",
       "      <td>894</td>\n",
       "      <td>Home Alone 3 (1997)</td>\n",
       "      <td>01-Jan-1997</td>\n",
       "      <td>NaN</td>\n",
       "      <td>http://us.imdb.com/M/title-exact?imdb-title-11...</td>\n",
       "      <td>729</td>\n",
       "      <td>1</td>\n",
       "      <td>893286511</td>\n",
       "      <td>19</td>\n",
       "      <td>M</td>\n",
       "      <td>student</td>\n",
       "      <td>56567</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99999</th>\n",
       "      <td>901</td>\n",
       "      <td>Mr. Magoo (1997)</td>\n",
       "      <td>25-Dec-1997</td>\n",
       "      <td>NaN</td>\n",
       "      <td>http://us.imdb.com/M/title-exact?imdb-title-11...</td>\n",
       "      <td>729</td>\n",
       "      <td>1</td>\n",
       "      <td>893286491</td>\n",
       "      <td>19</td>\n",
       "      <td>M</td>\n",
       "      <td>student</td>\n",
       "      <td>56567</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       movie_id                       title release_date  video_release_date  \\\n",
       "99995       748           Saint, The (1997)  14-Mar-1997                 NaN   \n",
       "99996       751  Tomorrow Never Dies (1997)  01-Jan-1997                 NaN   \n",
       "99997       879      Peacemaker, The (1997)  01-Jan-1997                 NaN   \n",
       "99998       894         Home Alone 3 (1997)  01-Jan-1997                 NaN   \n",
       "99999       901            Mr. Magoo (1997)  25-Dec-1997                 NaN   \n",
       "\n",
       "                                                imdb_url  user_id  rating  \\\n",
       "99995  http://us.imdb.com/M/title-exact?Saint%2C%20Th...      729       4   \n",
       "99996  http://us.imdb.com/M/title-exact?imdb-title-12...      729       3   \n",
       "99997  http://us.imdb.com/M/title-exact?Peacemaker%2C...      729       3   \n",
       "99998  http://us.imdb.com/M/title-exact?imdb-title-11...      729       1   \n",
       "99999  http://us.imdb.com/M/title-exact?imdb-title-11...      729       1   \n",
       "\n",
       "       unix_timestamp  age sex occupation zip_code  \n",
       "99995       893286638   19   M    student    56567  \n",
       "99996       893286338   19   M    student    56567  \n",
       "99997       893286299   19   M    student    56567  \n",
       "99998       893286511   19   M    student    56567  \n",
       "99999       893286491   19   M    student    56567  "
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lens.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>movie_id</th>\n",
       "      <th>title</th>\n",
       "      <th>release_date</th>\n",
       "      <th>video_release_date</th>\n",
       "      <th>imdb_url</th>\n",
       "      <th>user_id</th>\n",
       "      <th>rating</th>\n",
       "      <th>unix_timestamp</th>\n",
       "      <th>age</th>\n",
       "      <th>sex</th>\n",
       "      <th>occupation</th>\n",
       "      <th>zip_code</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1001</th>\n",
       "      <td>11</td>\n",
       "      <td>Seven (Se7en) (1995)</td>\n",
       "      <td>01-Jan-1995</td>\n",
       "      <td>NaN</td>\n",
       "      <td>http://us.imdb.com/M/title-exact?Se7en%20(1995)</td>\n",
       "      <td>109</td>\n",
       "      <td>4</td>\n",
       "      <td>880572786</td>\n",
       "      <td>29</td>\n",
       "      <td>M</td>\n",
       "      <td>other</td>\n",
       "      <td>55423</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1002</th>\n",
       "      <td>12</td>\n",
       "      <td>Usual Suspects, The (1995)</td>\n",
       "      <td>14-Aug-1995</td>\n",
       "      <td>NaN</td>\n",
       "      <td>http://us.imdb.com/M/title-exact?Usual%20Suspe...</td>\n",
       "      <td>109</td>\n",
       "      <td>4</td>\n",
       "      <td>880577542</td>\n",
       "      <td>29</td>\n",
       "      <td>M</td>\n",
       "      <td>other</td>\n",
       "      <td>55423</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1003</th>\n",
       "      <td>15</td>\n",
       "      <td>Mr. Holland's Opus (1995)</td>\n",
       "      <td>29-Jan-1996</td>\n",
       "      <td>NaN</td>\n",
       "      <td>http://us.imdb.com/M/title-exact?Mr.%20Holland...</td>\n",
       "      <td>109</td>\n",
       "      <td>4</td>\n",
       "      <td>880577868</td>\n",
       "      <td>29</td>\n",
       "      <td>M</td>\n",
       "      <td>other</td>\n",
       "      <td>55423</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      movie_id                       title release_date  video_release_date  \\\n",
       "1001        11        Seven (Se7en) (1995)  01-Jan-1995                 NaN   \n",
       "1002        12  Usual Suspects, The (1995)  14-Aug-1995                 NaN   \n",
       "1003        15   Mr. Holland's Opus (1995)  29-Jan-1996                 NaN   \n",
       "\n",
       "                                               imdb_url  user_id  rating  \\\n",
       "1001    http://us.imdb.com/M/title-exact?Se7en%20(1995)      109       4   \n",
       "1002  http://us.imdb.com/M/title-exact?Usual%20Suspe...      109       4   \n",
       "1003  http://us.imdb.com/M/title-exact?Mr.%20Holland...      109       4   \n",
       "\n",
       "      unix_timestamp  age sex occupation zip_code  \n",
       "1001       880572786   29   M      other    55423  \n",
       "1002       880577542   29   M      other    55423  \n",
       "1003       880577868   29   M      other    55423  "
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lens[1001:1004]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 100000 entries, 0 to 99999\n",
      "Data columns (total 12 columns):\n",
      "movie_id              100000 non-null int64\n",
      "title                 100000 non-null object\n",
      "release_date          99991 non-null object\n",
      "video_release_date    0 non-null float64\n",
      "imdb_url              99987 non-null object\n",
      "user_id               100000 non-null int64\n",
      "rating                100000 non-null int64\n",
      "unix_timestamp        100000 non-null int64\n",
      "age                   100000 non-null int64\n",
      "sex                   100000 non-null object\n",
      "occupation            100000 non-null object\n",
      "zip_code              100000 non-null object\n",
      "dtypes: float64(1), int64(5), object(6)\n",
      "memory usage: 9.2+ MB\n"
     ]
    }
   ],
   "source": [
    "lens.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>movie_id</th>\n",
       "      <th>video_release_date</th>\n",
       "      <th>user_id</th>\n",
       "      <th>rating</th>\n",
       "      <th>unix_timestamp</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>100000.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>100000.00000</td>\n",
       "      <td>100000.000000</td>\n",
       "      <td>1.000000e+05</td>\n",
       "      <td>100000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>425.530130</td>\n",
       "      <td>NaN</td>\n",
       "      <td>462.48475</td>\n",
       "      <td>3.529860</td>\n",
       "      <td>8.835289e+08</td>\n",
       "      <td>32.969850</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>330.798356</td>\n",
       "      <td>NaN</td>\n",
       "      <td>266.61442</td>\n",
       "      <td>1.125674</td>\n",
       "      <td>5.343856e+06</td>\n",
       "      <td>11.562623</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.00000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>8.747247e+08</td>\n",
       "      <td>7.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>175.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>254.00000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>8.794487e+08</td>\n",
       "      <td>24.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>322.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>447.00000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>8.828269e+08</td>\n",
       "      <td>30.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>631.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>682.00000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>8.882600e+08</td>\n",
       "      <td>40.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1682.000000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>943.00000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>8.932866e+08</td>\n",
       "      <td>73.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            movie_id  video_release_date       user_id         rating  \\\n",
       "count  100000.000000                 0.0  100000.00000  100000.000000   \n",
       "mean      425.530130                 NaN     462.48475       3.529860   \n",
       "std       330.798356                 NaN     266.61442       1.125674   \n",
       "min         1.000000                 NaN       1.00000       1.000000   \n",
       "25%       175.000000                 NaN     254.00000       3.000000   \n",
       "50%       322.000000                 NaN     447.00000       4.000000   \n",
       "75%       631.000000                 NaN     682.00000       4.000000   \n",
       "max      1682.000000                 NaN     943.00000       5.000000   \n",
       "\n",
       "       unix_timestamp            age  \n",
       "count    1.000000e+05  100000.000000  \n",
       "mean     8.835289e+08      32.969850  \n",
       "std      5.343856e+06      11.562623  \n",
       "min      8.747247e+08       7.000000  \n",
       "25%      8.794487e+08      24.000000  \n",
       "50%      8.828269e+08      30.000000  \n",
       "75%      8.882600e+08      40.000000  \n",
       "max      8.932866e+08      73.000000  "
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lens.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>movie_id</th>\n",
       "      <th>user_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>308</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>308</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>308</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7</td>\n",
       "      <td>308</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>8</td>\n",
       "      <td>308</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   movie_id  user_id  rating\n",
       "0         1      308       4\n",
       "1         4      308       5\n",
       "2         5      308       4\n",
       "3         7      308       4\n",
       "4         8      308       5"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "columns_to_use = ['movie_id', 'user_id', 'rating']\n",
    "lens[columns_to_use].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x10240d3d0>"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAEACAYAAABGYoqtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHmZJREFUeJzt3XGMXeWd3vHvgyk02QCGUpjIDhlWEC1Ujibu4rYiWs+G\nwLJbLSZRAe9GwhMl1cqGbhJVVcyqlavVKo6RkkJVpattnNpOyboIaYvZODZL4FZKlhiL+K5J7OKp\nUhNM8SgKmF2SLQrw6x/zDvcwzPWcuXPunPfdeT7SiHPee87Mc35nPO/c93fnoojAzMxsLue0HcDM\nzPLlScLMzPryJGFmZn15kjAzs748SZiZWV+eJMzMrK95JwlJ50s6JOmIpB9K+kIa3ybplKTvp4+b\nK+fcI2lS0nFJN1XG10o6KumEpPsq4+dJ2pvOeVLSFU1fqJmZLdy8k0REvAb8ekR8CPgg8BFJ16eH\nvxwRa9PHAQBJ1wC3A9cAvwl8RZLS8f8Z+FREfAD4gKTfSOOfAl6KiKuB+4B7G7o+MzNbhFrLTRHx\n87R5fjrn5bSvOQ7fAOyNiNcj4iQwCayTNAJcEBGH03F7gFsr5+xO2w8BNyzkIszMbDhqTRKSzpF0\nBDgNdCLiWHrobkldSV+VdFEaWwU8Xzn9hTS2CjhVGT+Vxt52TkS8AZyRdMkgF2RmZs2p+0zizbTc\ntBr4NUnrga8AvxwRY0xPHl9qMNdcz1DMzGyJnbuQgyPiryV9E/jViPiflYf+C/BI2n4BeF/lsdVp\nrN949Zz/K2kFcGFEvDT760vyG02ZmQ0gIgb65bvOq5sunVlKkvQu4Eagm3oMMz4O/CBt7wM2plcs\nXQlcBTwVEaeBVyStS43sO4GHK+dsStu3AY/3yxMR2X9s27at9QzO6YzO6ZwzH4tR55nEe4Hd6Qf7\nOcDXI+LbkvZIGgPeBE4Cv5d+iB+T9CBwDPgFsCV6Ke8CdgF/H9gf6RVRwE7g65ImgZ8CGxd1VS07\nefJk2xFqcc7mlJARnLNppeRcjHkniYh4Blg7x/idZzlnO7B9jvGngTVzjL/G9MtmzcwsI/6L6yGY\nmJhoO0ItztmcEjKCczatlJyLocWuVy0lSVFSXrPlaGRklKmp59qOweWXv5/Tp0+2HSMLkohhNa5t\n4TqdTtsRanHO5pSQEZYm5/QEEYv8eGLRn2MpJqpS7vtieJIwM7O+vNxkZo2afiFkDv9OteiXf/5d\n4eUmMzMbCk8SQ1DKOqVzNqeEjFBOTui0HaCWcuo5OE8SZmbWl3sSZtYo9yTy456EmZkNhSeJIShl\nndI5m1NCRignp3sS+fAkYWZmfbknYWaNck8iP+5JmJnZUHiSGIJS1imdszklZIRycronkQ9PEmZm\n1pd7EmbWKPck8uOehJmZDYUniSEoZZ3SOZtTQkYoJ6d7EvnwJGFmZn25J2FmjXJPIj/uSZiZ2VB4\nkhiCUtYpnbM5JWSEcnK6J5GPeScJSedLOiTpiKQfSvpCGr9Y0qOSnpV0UNJFlXPukTQp6bikmyrj\nayUdlXRC0n2V8fMk7U3nPCnpiqYv1MzMFq5WT0LSuyPi55JWAN8F/jVwC/DTiLhX0ueBiyNiq6Rr\ngQeA64DVwGPA1RERkg4Bd0fEYUn7gfsj4qCkzcCaiNgi6Q7gYxGxcY4c7kmYZc49ifwMvScRET9P\nm+enc14GNgC70/hu4Na0fQuwNyJej4iTwCSwTtIIcEFEHE7H7amcU/1cDwE3DHIxZmbWrFqThKRz\nJB0BTgOdiDgGXB4RUwARcRq4LB2+Cni+cvoLaWwVcKoyfiqNve2ciHgDOCPpkoGuKAOlrFM6Z3NK\nyAjl5HRPIh/n1jkoIt4EPiTpQuCgpHHe+Xyyyed1fZ8WTUxMMDo6CsDKlSsZGxtjfHwc6N2wtvdn\n5JKn3363280qT+n1LGG/2+0u2f3q/aAfb2l/OlPp9Rxkv9PpsGvXLoC3fl4OasF/JyHp3wF/C3wK\nGI+IqbSU9EREXCNpKxARsSMdfwDYBjw3c0wa3wisj4jNM8dExKHU93gxIi6b42u7J2GWOfck8jPU\nnoSkS2deuSTpXcCNwBFgHzCRDtsEPJy29wEb0yuWrgSuAp5KS1KvSFqn6e+iO2edsylt3wY8PsjF\nmJlZs+r0JN4LPJF6Et8D9kXEt4EdwI2SnmW60fxFgNSveBA4BuwHtlR+/b8L2AmcACYj4kAa3wlc\nKmkS+CywtYmLa8s7n3bnyTmbU0JGKCenexL5mLcnERHPAGvnGH8J+Gifc7YD2+cYfxpYM8f4a8Dt\nNfKamdkS8ns3mVmj3JPIj9+7yczMhsKTxBCUsk7pnM0pISOUk9M9iXx4kjAzs77ckzCzRrknkR/3\nJMzMbCg8SQxBKeuUztmcEjJCOTndk8iHJwkzM+vLPQkza5R7EvlxT8LMzIbCk8QQlLJO6ZzNKSEj\nlJPTPYl8eJIwM7O+3JMws0a5J5Ef9yTMzGwoPEkMQSnrlM7ZnEsuGUFS6x8jI6NnzVlCLad12g5Q\nSzn1HFyt/8e1mZ3dyy9PkcMSy9TUQCsKZn25J2HWAK/DVxK4FtlxT8LMzIbCk8QQlLJO6ZzLTzm1\n7LQdoJZy6jk4TxJmZtaXexJmDfA6fCWBa5Ed9yTMzGwoPEkMQSnrlM65/JRTy07bAWopp56Dm3eS\nkLRa0uOSfijpGUn/Ko1vk3RK0vfTx82Vc+6RNCnpuKSbKuNrJR2VdELSfZXx8yTtTec8KemKpi/U\nzMwWbt6ehKQRYCQiupLeAzwNbADuAP4mIr486/hrgG8A1wGrgceAqyMiJB0C7o6Iw5L2A/dHxEFJ\nm4E1EbFF0h3AxyJi4xxZ3JOwLHkdvpLAtcjOUHsSEXE6Irpp+1XgOLBq5mvPccoGYG9EvB4RJ4FJ\nYF2abC6IiMPpuD3ArZVzdqfth4AbBrgWMzNr2IJ6EpJGgTHgUBq6W1JX0lclXZTGVgHPV057IY2t\nAk5Vxk/Rm2zeOici3gDOSLpkIdlyUso6pXMuP+XUstN2gFrKqefgar93U1pqegj4TES8KukrwB+m\nZaQ/Ar4EfLqhXH2fFk1MTDA6OgrAypUrGRsbY3x8HOjdsLb3Z+SSp99+t9vNKk/p9ez9YGt7n755\nu93ukt2v9usxnWmY17sU9Rxkv9PpsGvXLoC3fl4OqtbfSUg6F/hz4FsRcf8cj78feCQiPihpKxAR\nsSM9dgDYBjwHPBER16TxjcD6iNg8c0xEHJK0AngxIi6b4+u4J2FZ8jp8JYFrkZ2l+DuJrwHHqhNE\n6jHM+Djwg7S9D9iYXrF0JXAV8FREnAZekbRO099FdwIPV87ZlLZvAx4f5GLMzKxZdV4Cez3wCeAj\nko5UXu56b3o5axdYD3wOICKOAQ8Cx4D9wJbKr/93ATuBE8BkRBxI4zuBSyVNAp8FtjZ2hS1459Pu\nPDnn8lNOLTttB6ilnHoObt6eRER8F1gxx0MH5hibOWc7sH2O8aeBNXOMvwbcPl8WMzNbWn7vJrMG\neB2+ksC1yI7fu8nMzIbCk8QQlLJO6ZzLTzm17LQdoJZy6jk4TxJmZtaXexJmDfA6fCWBa5Ed9yTM\nzGwoPEkMQSnrlM65/JRTy07bAWopp56D8yRhZmZ9uSdh1gCvw1cSuBbZcU/CzMyGwpPEEJSyTumc\ny085tey0HaCWcuo5OE8SZmbWl3sSZg3wOnwlgWuRHfckzMxsKDxJDEEp65TOufyUU8tO2wFqKaee\ng/MkYWZmfbknYdYAr8NXErgW2XFPwszMhsKTxBCUsk7pnMtPObXstB2glnLqOThPEmZm1pd7EmYN\n8Dp8JYFr8ZaRkVGmpp5rNcOMQXsSniTMGuAfjJUErkUvQV61cOM6F6WsUzrn8lNOLTttB6ilnHoO\nbt5JQtJqSY9L+qGkZyT9fhq/WNKjkp6VdFDSRZVz7pE0Kem4pJsq42slHZV0QtJ9lfHzJO1N5zwp\n6YqmL9TMzBZu3uUmSSPASER0Jb0HeBrYAHwS+GlE3Cvp88DFEbFV0rXAA8B1wGrgMeDqiAhJh4C7\nI+KwpP3A/RFxUNJmYE1EbJF0B/CxiNg4RxYvN1mWMltWaDeBa9FLkFcthrPcFBGnI6Kbtl8FjjP9\nw38DsDsdthu4NW3fAuyNiNcj4iQwCaxLk80FEXE4Hbenck71cz0E3DDIxZiZWbMW1JOQNAqMAd8D\nLo+IKZieSIDL0mGrgOcrp72QxlYBpyrjp9LY286JiDeAM5IuWUi2nJSyTumcy085tey0HaCWcuo5\nuHPrHpiWmh4CPhMRr0qa/RyqyedUfZ8WTUxMMDo6CsDKlSsZGxtjfHwc6N2wtvdn5JKn3363280q\nT+n17P1ga3ufvnm73e6S3a/26zGdaZjXW6eePYu9noXsd4BdaX+Uxaj1ElhJ5wJ/DnwrIu5PY8eB\n8YiYSktJT0TENZK2AhERO9JxB4BtwHMzx6TxjcD6iNg8c0xEHJK0AngxIi6bI4d7EpalzNae203g\nWvQS5FWLob4E9mvAsZkJItkHTKTtTcDDlfGN6RVLVwJXAU+lJalXJK3TdOXunHXOprR9G/D4IBdj\nZmbNqvMS2OuBTwAfkXRE0vcl3QzsAG6U9CzTjeYvAkTEMeBB4BiwH9hS+fX/LmAncAKYjIgDaXwn\ncKmkSeCzwNamLrANpaxTOufyU04tO20HqKWceg5u3p5ERHwXWNHn4Y/2OWc7sH2O8aeBNXOMvwbc\nPl8WMzNbWn5bDrMGZLb23G4C16KXIK9a+G05zMysWZ4khqCUdUrnXH7KqWWn7QC1lFPPwXmSMDOz\nvtyTMGtAZmvP7SZwLXoJ8qqFexJmZtYsTxJDUMo6pXMuP+XUstN2gFrKqefgPEmYmVlf7kmYNSCz\nted2E7gWvQR51cI9CTMza5YniSEoZZ3SOZefcmrZaTtALeXUc3CeJMzMrC/3JMwakNnac7sJXIte\ngrxq4Z6EmZk1y5PEEJSyTumcy085tey0HaCWcuo5OE8SZmbWl3sSZg3IbO253QSuRS9BXrVwT8LM\nzJrlSWIISlmndM7lp5xadtoOUEs59RycJwkzM+vLPQmzBmS29txuAteilyCvWrgnYWZmzfIkMQSl\nrFM65/JTTi07bQeopZx6Dm7eSULSTklTko5WxrZJOiXp++nj5spj90ialHRc0k2V8bWSjko6Iem+\nyvh5kvamc56UdEWTF2hmZoObtych6cPAq8CeiPhgGtsG/E1EfHnWsdcA3wCuA1YDjwFXR0RIOgTc\nHRGHJe0H7o+Ig5I2A2siYoukO4CPRcTGPlnck7AsZbb23G4C16KXIK9aDKcnERHfAV6e86u+0wZg\nb0S8HhEngUlgnaQR4IKIOJyO2wPcWjlnd9p+CLihfnwzMxumxfQk7pbUlfRVSRelsVXA85VjXkhj\nq4BTlfFTaext50TEG8AZSZcsIlfrSlmndM7lp5xadtoOUEs59RzcuQOe9xXgD9My0h8BXwI+3VCm\nsz4lmpiYYHR0FICVK1cyNjbG+Pg40Lthbe/PyCVPv/1ut5tVntLr2fvB1vY+ffN2u90lu1/t12M6\n0zCvt049exZ7PQvZ7wC70v4oi1Hr7yQkvR94ZKYn0e8xSVuBiIgd6bEDwDbgOeCJiLgmjW8E1kfE\n5pljIuKQpBXAixFxWZ8c7klYljJbe243gWvRS5BXLYb6dxKi8ht+6jHM+Djwg7S9D9iYXrF0JXAV\n8FREnAZekbRO01W7E3i4cs6mtH0b8PggF2JmZs2r8xLYbwB/CXxA0o8lfRK4N72ctQusBz4HEBHH\ngAeBY8B+YEvlV/+7gJ3ACWAyIg6k8Z3ApZImgc8CWxu7upaUsk7pnMtPObXstB2glnLqObh5exIR\n8btzDP/Xsxy/Hdg+x/jTwJo5xl8Dbp8vh5mZLT2/d5NZAzJbe243gWvRS5BXLfzeTWZm1ixPEkNQ\nyjqlcy4/5dSy03aAWsqp5+A8SZiZWV/uSZg1ILO153YTuBa9BHnVwj0JMzNrlieJIShlndI5l59y\natlpO0At5dRzcJ4kzMysL/ckzBqQ2dpzuwlci16CvGrhnoSZmTXLk8QQlLJO6ZzLTzm17LQdoJZy\n6jk4TxJmZtaXexJmDchs7bndBK5FL0FetXBPwszMmuVJYghKWad0zuWnnFp22g5QSzn1HJwnCTMz\n68s9CbMGZLb23G4C16KXIK9auCdhZmbN8iQxBEuxTjkyMoqk1j9GRkaHfq3LYd13qZRTy07bAWop\np56D8yRRqKmp55h+GruYjycW/Tmmc5jZ31XuSRQqs7XOtkO0zvejksC16CXIqxbuSZiZWbM8SQxB\nOeuUnbYD1FJOPfNXTi07bQeopZx6Dm7eSULSTklTko5Wxi6W9KikZyUdlHRR5bF7JE1KOi7ppsr4\nWklHJZ2QdF9l/DxJe9M5T0q6oskLNDOzwc3bk5D0YeBVYE9EfDCN7QB+GhH3Svo8cHFEbJV0LfAA\ncB2wGngMuDoiQtIh4O6IOCxpP3B/RByUtBlYExFbJN0BfCwiNvbJ4p5EktlaZ9shWuf7UUngWvQS\n5FWL4fQkIuI7wMuzhjcAu9P2buDWtH0LsDciXo+Ik8AksE7SCHBBRBxOx+2pnFP9XA8BNwxwHWZm\nNgSD9iQui4gpgIg4DVyWxlcBz1eOeyGNrQJOVcZPpbG3nRMRbwBnJF0yYK4slLNO2Wk7QC3l1DN/\n5dSy03aAWsqp5+DObejzNPl86qxPiSYmJhgdHQVg5cqVjI2NMT4+DvRuWNv7M4b99Xr/kAbd7y7y\n/Jl9auXNvZ7t34+m9umbt9vtLtn3f/v1mM40zOutU8+exV7PQvY7wK60P8pi1Po7CUnvBx6p9CSO\nA+MRMZWWkp6IiGskbQUiInak4w4A24DnZo5J4xuB9RGxeeaYiDgkaQXwYkRc9s4U7klUZbbW2XaI\n1vl+VBK4Fr0EedViqH8nId7+G/4+YCJtbwIeroxvTK9YuhK4CngqLUm9Immdpqt256xzNqXt24DH\nB7kQMzNrXp2XwH4D+EvgA5J+LOmTwBeBGyU9y3Sj+YsAEXEMeBA4BuwHtlR+9b8L2AmcACYj4kAa\n3wlcKmkS+CywtamLa0s565SdtgPUUk4981dOLTttB6ilnHoObt6eRET8bp+HPtrn+O3A9jnGnwbW\nzDH+GnD7fDnMzGzp+b2bCpXZWmfbIVrn+1FJ4Fr0EuRVC793k5mZNcuTxBCUs07ZaTtALeXUM3/l\n1LLTdoBayqnn4DxJmJlZX+5JFCqztc62Q7TO96OSwLXoJcirFu5JmJlZszxJDEE565SdtgPUUk49\n81dOLTttB6ilnHoOzpOEmZn15Z5EoTJb62w7ROt8PyoJXItegrxq4Z6EmZk1y5PEEJSzTtlpO0At\n5dQzf+XUstN2gFrKqefgPEmYmVlf7kkUKrO1zrZDtM73o5LAteglyKsW7kmYmVmzPEkMQTnrlJ22\nA9RSTj3zV04tO20HqKWceg7Ok4SZmfXlnkShMlvrbDtE63w/Kglci16CvGrhnoSZmTXLk8QQlLNO\n2Wk7QC3l1DN/5dSy03aAWsqp5+Dm/X9c5+bmm9v932G/733v5Y//+MusWLGi1RxmZkuhuJ4E/PdW\nM6xYsYmXXpriwgsvbDVHZmudbYdone9HJYFr0UuQVy0G6kkUOEm0m/e88y7kJz855UniLe3/Q8yB\n70clgWvRS5BXLdy4zkU565SdtgPUUk4981dOLTttB6ilnHoOblGThKSTkv5K0hFJT6WxiyU9KulZ\nSQclXVQ5/h5Jk5KOS7qpMr5W0lFJJyTdt5hMZmbWnEUtN0n6EfCPI+LlytgO4KcRca+kzwMXR8RW\nSdcCDwDXAauBx4CrIyIkHQLujojDkvYD90fEwTm+npebksyexrYdonW+H5UErkUvQV61aGW5SXN8\njg3A7rS9G7g1bd8C7I2I1yPiJDAJrJM0AlwQEYfTcXsq55iZWYsWO0kE8BeSDkv6dBq7PCKmACLi\nNHBZGl8FPF8594U0tgo4VRk/lcaKVc46ZaftALWUU8/8lVPLTtsBaimnnoNb7N9JXB8RL0r6h8Cj\nkp7lnc+tGn6uNQGMpu2VwBgwnvY76b/D23/zzdffSjLzDTI+Pv62/fkeb2p/8dfTXeT5M/vUyjvo\n/rA/fz73o6l9+ubtdrtDr0clQUPXM+j+dKZhXm+devYs9noWst8BdqX9URajsZfAStoGvAp8GhiP\niKm0lPRERFwjaSsQEbEjHX8A2AY8N3NMGt8IrI+IzXN8DfckkszWOtsO0Trfj0oC16KXIK9aLG1P\nQtK7Jb0nbf8ScBPwDLCP6V/3ATYBD6ftfcBGSedJuhK4CngqLUm9Immdpit6Z+UcMzNr0WJ6EpcD\n35F0BPge8EhEPArsAG5MS083AF8EiIhjwIPAMWA/sKXylq53ATuBE8BkRBxYRK7WlbNO2Wk7QC3l\n1DN/5dSy03aAWsqp5+AG7klExP9huiEwe/wl4KN9ztkObJ9j/GlgzaBZzMxsOPy2HAvknsRs7a/7\n5sD3o5LAteglyKsWflsOMzNrlieJIShnnbLTdoBayqln/sqpZaftALWUU8/BeZIwM7O+3JNYIPck\nZmt/3TcHvh+VBK5FL0FetXBPwszMmuVJYgjKWafstB2glnLqmb9yatlpO0At5dRzcJ4kzMysL/ck\nFsg9idnaX/fNge9HJYFr0UuQVy3ckzAzs2Z5khiCctYpO20HqKWceuavnFp22g5QSzn1HJwnCTMz\n68s9iQVyT2K29td9c+D7UUngWvQS5FUL9yTMzKxZniSGoJx1yk7bAWopp575K6eWnbYD1FJOPQfn\nScLMzPpyT2KB3JOYrf113xz4flQSuBa9BHnVwj0JMzNrlieJIShnnbLTdoBayqln/sqpZaftALWU\nU8/BeZIwM7O+3JNYIPckZmt/3TcHvh+VBK5FL0FetXBPwszMmpXNJCHpZkn/S9IJSZ9vO89ilLNO\n2Wk7QC3l1DN/5dSy03aAWsqp5+CymCQknQP8J+A3gH8E/I6kX2k31eC63W7bEWoqI2c59cxfObUs\nI2c59RxcFpMEsA6YjIjnIuIXwF5gQ8uZBnbmzJm2I9RURs5y6pm/cmpZRs5y6jm4XCaJVcDzlf1T\naczMzFp0btsBFurCC3+71a//s5/9P8455+xz68mTJ5cmzKKdbDtALeXUM3/l1PJk2wFqKaeeg8vi\nJbCS/inw7yPi5rS/FYiI2DHruPbDmpkVaNCXwOYySawAngVuAF4EngJ+JyKOtxrMzGyZy2K5KSLe\nkHQ38CjTfZKdniDMzNqXxTMJMzPLUy6vbnqLpJ2SpiQdPcsx/1HSpKSupLGlzFfJcNacktZLOiPp\n++nj3y51xpRjtaTHJf1Q0jOSfr/Pca3VtE7GHOop6XxJhyQdSVm/0Oe4Vr8/6+TMoZ6VLOekDPv6\nPJ7Dv/e+GTOr5UlJf5Xu/VN9jllYPSMiqw/gw8AYcLTP478JfDNt/xPge5nmXA/sy6CeI8BY2n4P\n072fX8mppjUz5lLPd6f/rgC+B1yfUy0XkDOLeqYsnwP+21x5Mqrn2TLmVMsfARef5fEF1zO7ZxIR\n8R3g5bMcsgHYk449BFwk6fKlyFZVIyfAQK8maFJEnI6Ibtp+FTjOO/8GpdWa1swIedTz52nzfKaf\nic/+Hsjl+3O+nJBBPSWtBn4L+GqfQ1qvZ42MkEEtE3H2FaIF1zO7SaKG2X949wL5/uHdP0tP6b4p\n6dq2w0gaZfrZz6FZD2VT07NkhAzqmZYdjgCngU5EHJt1SBa1rJETMqgn8B+Af0P/t0rNoZ7zZYQ8\nagnTGf9C0mFJ/3KOxxdczxIniVI8DVwREWNMvy/V/2gzjKT3AA8Bn0m/rWdnnoxZ1DMi3oyIDwGr\ngV+TtL6NHPOpkbP1ekr658BUehYp8vlt/C01M7Zey4rrI2It08987pL04cV+whIniReA91X2V6ex\nrETEqzNP+SPiW8Dfk3RJG1kkncv0D9+vR8TDcxzSek3ny5hTPVOGvwa+CfzqrIdar2VVv5yZ1PN6\n4BZJPwL+FPh1SXtmHdN2PefNmEktZ7K8mP77E+DPmH5fvKoF1zPXSeJsv1XsA+6Et/5S+0xETC1V\nsFn65qyu80lax/TLjV9aqmCzfA04FhH393k8h5qeNWMO9ZR0qaSL0va7gBt559uVtl7LOjlzqGdE\n/EFEXBERvwxsBB6PiDtnHdZqPetkzKGW6Wu/Oz0bR9IvATcBP5h12ILrmcUf01VJ+gYwDvwDST8G\ntgHnMf02HX8SEfsl/Zak/w38DPhkjjmBfyFpM/AL4G+BO1rKeT3wCeCZtEYdwB8A7yeTmtbJSB71\nfC+wW9JMc/DrEfFtSb9HJrWsm5M86jmnDOv5DpnW8nLgzzT99kXnAg9ExKOLraf/mM7MzPrKdbnJ\nzMwy4EnCzMz68iRhZmZ9eZIwM7O+PEmYmVlfniTMzKwvTxJmZtaXJwkzM+vr/wNefz4zwMCQXgAA\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x107cac990>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "lens.rating.hist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x108d75c90>"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\ntL1H0rskfWLKKVnMs0VOKYN5aj3DrB190vNM/eZpm39B6ylNXgw5+JX6adNnbb8zdRjbi1p/VvLg\nppuymumMnFLimdZP6x+WdFxSFRFHNp2SxSxb5JTy+P78S0l/qOlvJ5nFPNWcU8pjniHpi7a/bvt3\nJ9x+0vNMvfBL8Q1Jb4mIJa2/R9A/pgxj+wxJn5b0kfon6Cw15Ew+04j4UUT8nKQ9kn7V9iXbnaGN\nFjmTz9L2b0paq5/ZWXn8hPwqLXMmn2ftooj4ea0/G/kD2xd3/YKpF/5Tkt48dn1PfSwrEfH8iafV\nEfFPkk61/eMpstjeofUlekdE3DvhlCxm2pQzp5lGxH9J+qykX9x0UxazPGFazkxmeZGkq2w/Lukf\nJP2a7ds3nZPDPBtzZjJPRcTT9X//U9Jn9Oq3pznpeW7Hwp/1t/0hSR+QXv7t3OciYm0bMk0yNed4\nL2b7Qq2/nPX72xVsk09KOhIRH59yey4znZkz9Uxt/6TtM+vLPybpcr36bR2Tz7JNztSzlKSIuDki\n3hIRPyPpaklfiYjN752SfJ5tcuYwT9un18+QZfsNkq6Q9K1Np530POf6Xjq275K0LOknbH9X0j5J\np2n9bRb+NiI+Z/tdtv9N0v9Ium6eebaaU9Jv2f59SS9KekHSbyfKeZGk90t6tO50Q9LNks5RRjNt\nk1PpZ/rTkg7aPvEPY3dExJdt/54ymmWbnEo/y6kynOdEGc5zt6TPeP0taHZIujMi7u86T37xCgAG\nInWHDwDYJix8ABgIFj4ADAQLHwAGgoUPAAPBwgeAgWDhA8BAsPABYCD+H2TgxF58tZnsAAAAAElF\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x107caced0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "lens[lens['user_id'] == 308].rating.hist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "lens_308 = lens[lens['user_id'] == 308].copy()\n",
    "lens_308.sort_values(by='unix_timestamp', inplace=True)\n",
    "lens_308.reset_index(inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1024bee10>"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n9f8BjvzJJDeNSAQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1092cf310>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "lens_308.rating.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x10959d950>"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1096a3dd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "smoothed_ratings = lens_308.rating.rolling(window=50).mean()\n",
    "smoothed_ratings.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Чистка данных с помощью pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PLAYER</th>\n",
       "      <th>SALARY</th>\n",
       "      <th>GP</th>\n",
       "      <th>G</th>\n",
       "      <th>A</th>\n",
       "      <th>SOT</th>\n",
       "      <th>PPG</th>\n",
       "      <th>P</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Sergio Agüero\\n Forward — Manchester City</td>\n",
       "      <td>$19.2m</td>\n",
       "      <td>16.0</td>\n",
       "      <td>14</td>\n",
       "      <td>3.0</td>\n",
       "      <td>34</td>\n",
       "      <td>13.12</td>\n",
       "      <td>209.98</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Eden Hazard\\n Midfield — Chelsea</td>\n",
       "      <td>$18.9m</td>\n",
       "      <td>21.0</td>\n",
       "      <td>8</td>\n",
       "      <td>4.0</td>\n",
       "      <td>17</td>\n",
       "      <td>13.05</td>\n",
       "      <td>274.04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Alexis Sánchez\\n Forward — Arsenal</td>\n",
       "      <td>$17.6m</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12</td>\n",
       "      <td>7.0</td>\n",
       "      <td>29</td>\n",
       "      <td>11.19</td>\n",
       "      <td>223.86</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Yaya Touré\\n Midfield — Manchester City</td>\n",
       "      <td>$16.6m</td>\n",
       "      <td>18.0</td>\n",
       "      <td>7</td>\n",
       "      <td>1.0</td>\n",
       "      <td>19</td>\n",
       "      <td>10.99</td>\n",
       "      <td>197.91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Ángel Di María\\n Midfield — Manchester United</td>\n",
       "      <td>$15.0m</td>\n",
       "      <td>13.0</td>\n",
       "      <td>3</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13</td>\n",
       "      <td>10.17</td>\n",
       "      <td>132.23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Santiago Cazorla\\n Midfield — Arsenal</td>\n",
       "      <td>$14.8m</td>\n",
       "      <td>20.0</td>\n",
       "      <td>4</td>\n",
       "      <td>NaN</td>\n",
       "      <td>20</td>\n",
       "      <td>9.97</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>David Silva\\n Midfield — Manchester City</td>\n",
       "      <td>$14.3m</td>\n",
       "      <td>15.0</td>\n",
       "      <td>6</td>\n",
       "      <td>2.0</td>\n",
       "      <td>11</td>\n",
       "      <td>10.35</td>\n",
       "      <td>155.26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Cesc Fàbregas\\n Midfield — Chelsea</td>\n",
       "      <td>$14.0m</td>\n",
       "      <td>20.0</td>\n",
       "      <td>2</td>\n",
       "      <td>14.0</td>\n",
       "      <td>10</td>\n",
       "      <td>10.47</td>\n",
       "      <td>209.49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Saido Berahino\\n Forward — West Brom</td>\n",
       "      <td>$13.8m</td>\n",
       "      <td>21.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>7.02</td>\n",
       "      <td>147.43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Steven Gerrard\\n Midfield — Liverpool</td>\n",
       "      <td>$13.8m</td>\n",
       "      <td>20.0</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>11</td>\n",
       "      <td>7.50</td>\n",
       "      <td>150.01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                          PLAYER  SALARY    GP   G     A  SOT  \\\n",
       "0      Sergio Agüero\\n Forward — Manchester City  $19.2m  16.0  14   3.0   34   \n",
       "1               Eden Hazard\\n Midfield — Chelsea  $18.9m  21.0   8   4.0   17   \n",
       "2             Alexis Sánchez\\n Forward — Arsenal  $17.6m   NaN  12   7.0   29   \n",
       "3        Yaya Touré\\n Midfield — Manchester City  $16.6m  18.0   7   1.0   19   \n",
       "4  Ángel Di María\\n Midfield — Manchester United  $15.0m  13.0   3   NaN   13   \n",
       "5          Santiago Cazorla\\n Midfield — Arsenal  $14.8m  20.0   4   NaN   20   \n",
       "6       David Silva\\n Midfield — Manchester City  $14.3m  15.0   6   2.0   11   \n",
       "7             Cesc Fàbregas\\n Midfield — Chelsea  $14.0m  20.0   2  14.0   10   \n",
       "8           Saido Berahino\\n Forward — West Brom  $13.8m  21.0   9   0.0   20   \n",
       "9          Steven Gerrard\\n Midfield — Liverpool  $13.8m  20.0   5   1.0   11   \n",
       "\n",
       "     PPG       P  \n",
       "0  13.12  209.98  \n",
       "1  13.05  274.04  \n",
       "2  11.19  223.86  \n",
       "3  10.99  197.91  \n",
       "4  10.17  132.23  \n",
       "5   9.97     NaN  \n",
       "6  10.35  155.26  \n",
       "7  10.47  209.49  \n",
       "8   7.02  147.43  \n",
       "9   7.50  150.01  "
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('https://raw.githubusercontent.com/rasbt/python_reference/master/Data/some_soccer_data.csv')\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>player</th>\n",
       "      <th>salary</th>\n",
       "      <th>gp</th>\n",
       "      <th>g</th>\n",
       "      <th>a</th>\n",
       "      <th>sot</th>\n",
       "      <th>ppg</th>\n",
       "      <th>p</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Cesc Fàbregas\\n Midfield — Chelsea</td>\n",
       "      <td>$14.0m</td>\n",
       "      <td>20.0</td>\n",
       "      <td>2</td>\n",
       "      <td>14.0</td>\n",
       "      <td>10</td>\n",
       "      <td>10.47</td>\n",
       "      <td>209.49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Saido Berahino\\n Forward — West Brom</td>\n",
       "      <td>$13.8m</td>\n",
       "      <td>21.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>7.02</td>\n",
       "      <td>147.43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Steven Gerrard\\n Midfield — Liverpool</td>\n",
       "      <td>$13.8m</td>\n",
       "      <td>20.0</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>11</td>\n",
       "      <td>7.50</td>\n",
       "      <td>150.01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                  player  salary    gp  g     a  sot    ppg  \\\n",
       "7     Cesc Fàbregas\\n Midfield — Chelsea  $14.0m  20.0  2  14.0   10  10.47   \n",
       "8   Saido Berahino\\n Forward — West Brom  $13.8m  21.0  9   0.0   20   7.02   \n",
       "9  Steven Gerrard\\n Midfield — Liverpool  $13.8m  20.0  5   1.0   11   7.50   \n",
       "\n",
       "        p  \n",
       "7  209.49  \n",
       "8  147.43  \n",
       "9  150.01  "
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.columns = [c.lower() for c in df.columns]\n",
    "df.tail(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>player</th>\n",
       "      <th>salary</th>\n",
       "      <th>games</th>\n",
       "      <th>goals</th>\n",
       "      <th>assists</th>\n",
       "      <th>shots_on_target</th>\n",
       "      <th>points_per_game</th>\n",
       "      <th>points</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Cesc Fàbregas\\n Midfield — Chelsea</td>\n",
       "      <td>$14.0m</td>\n",
       "      <td>20.0</td>\n",
       "      <td>2</td>\n",
       "      <td>14.0</td>\n",
       "      <td>10</td>\n",
       "      <td>10.47</td>\n",
       "      <td>209.49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Saido Berahino\\n Forward — West Brom</td>\n",
       "      <td>$13.8m</td>\n",
       "      <td>21.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>7.02</td>\n",
       "      <td>147.43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Steven Gerrard\\n Midfield — Liverpool</td>\n",
       "      <td>$13.8m</td>\n",
       "      <td>20.0</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>11</td>\n",
       "      <td>7.50</td>\n",
       "      <td>150.01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                  player  salary  games  goals  assists  \\\n",
       "7     Cesc Fàbregas\\n Midfield — Chelsea  $14.0m   20.0      2     14.0   \n",
       "8   Saido Berahino\\n Forward — West Brom  $13.8m   21.0      9      0.0   \n",
       "9  Steven Gerrard\\n Midfield — Liverpool  $13.8m   20.0      5      1.0   \n",
       "\n",
       "   shots_on_target  points_per_game  points  \n",
       "7               10            10.47  209.49  \n",
       "8               20             7.02  147.43  \n",
       "9               11             7.50  150.01  "
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = df.rename(columns={'p': 'points', \n",
    "                        'gp': 'games',\n",
    "                        'sot': 'shots_on_target',\n",
    "                        'g': 'goals',\n",
    "                        'ppg': 'points_per_game',\n",
    "                        'a': 'assists',})\n",
    "\n",
    "df.tail(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>player</th>\n",
       "      <th>salary</th>\n",
       "      <th>games</th>\n",
       "      <th>goals</th>\n",
       "      <th>assists</th>\n",
       "      <th>shots_on_target</th>\n",
       "      <th>points_per_game</th>\n",
       "      <th>points</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Santiago Cazorla\\n Midfield — Arsenal</td>\n",
       "      <td>14.8</td>\n",
       "      <td>20.0</td>\n",
       "      <td>4</td>\n",
       "      <td>NaN</td>\n",
       "      <td>20</td>\n",
       "      <td>9.97</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>David Silva\\n Midfield — Manchester City</td>\n",
       "      <td>14.3</td>\n",
       "      <td>15.0</td>\n",
       "      <td>6</td>\n",
       "      <td>2.0</td>\n",
       "      <td>11</td>\n",
       "      <td>10.35</td>\n",
       "      <td>155.26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Cesc Fàbregas\\n Midfield — Chelsea</td>\n",
       "      <td>14.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>2</td>\n",
       "      <td>14.0</td>\n",
       "      <td>10</td>\n",
       "      <td>10.47</td>\n",
       "      <td>209.49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Saido Berahino\\n Forward — West Brom</td>\n",
       "      <td>13.8</td>\n",
       "      <td>21.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>7.02</td>\n",
       "      <td>147.43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Steven Gerrard\\n Midfield — Liverpool</td>\n",
       "      <td>13.8</td>\n",
       "      <td>20.0</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>11</td>\n",
       "      <td>7.50</td>\n",
       "      <td>150.01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                     player  salary  games  goals  assists  \\\n",
       "5     Santiago Cazorla\\n Midfield — Arsenal    14.8   20.0      4      NaN   \n",
       "6  David Silva\\n Midfield — Manchester City    14.3   15.0      6      2.0   \n",
       "7        Cesc Fàbregas\\n Midfield — Chelsea    14.0   20.0      2     14.0   \n",
       "8      Saido Berahino\\n Forward — West Brom    13.8   21.0      9      0.0   \n",
       "9     Steven Gerrard\\n Midfield — Liverpool    13.8   20.0      5      1.0   \n",
       "\n",
       "   shots_on_target  points_per_game  points  \n",
       "5               20             9.97     NaN  \n",
       "6               11            10.35  155.26  \n",
       "7               10            10.47  209.49  \n",
       "8               20             7.02  147.43  \n",
       "9               11             7.50  150.01  "
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['salary'] = df['salary'].apply(lambda x: x.strip('$m'))\n",
    "df['salary'] = df['salary'].astype(float)\n",
    "df.tail()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Два разных способа вставить колонку"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>player</th>\n",
       "      <th>salary</th>\n",
       "      <th>games</th>\n",
       "      <th>goals</th>\n",
       "      <th>assists</th>\n",
       "      <th>shots_on_target</th>\n",
       "      <th>points_per_game</th>\n",
       "      <th>points</th>\n",
       "      <th>position</th>\n",
       "      <th>team</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Cesc Fàbregas\\n Midfield — Chelsea</td>\n",
       "      <td>14.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>2</td>\n",
       "      <td>14.0</td>\n",
       "      <td>10</td>\n",
       "      <td>10.47</td>\n",
       "      <td>209.49</td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Saido Berahino\\n Forward — West Brom</td>\n",
       "      <td>13.8</td>\n",
       "      <td>21.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>7.02</td>\n",
       "      <td>147.43</td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Steven Gerrard\\n Midfield — Liverpool</td>\n",
       "      <td>13.8</td>\n",
       "      <td>20.0</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>11</td>\n",
       "      <td>7.50</td>\n",
       "      <td>150.01</td>\n",
       "      <td></td>\n",
       "      <td></td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                  player  salary  games  goals  assists  \\\n",
       "7     Cesc Fàbregas\\n Midfield — Chelsea    14.0   20.0      2     14.0   \n",
       "8   Saido Berahino\\n Forward — West Brom    13.8   21.0      9      0.0   \n",
       "9  Steven Gerrard\\n Midfield — Liverpool    13.8   20.0      5      1.0   \n",
       "\n",
       "   shots_on_target  points_per_game  points position team  \n",
       "7               10            10.47  209.49                \n",
       "8               20             7.02  147.43                \n",
       "9               11             7.50  150.01                "
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['team'] = pd.Series('', index=df.index)\n",
    "df.insert(loc=8, column='position', value='') \n",
    "df.tail(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>player</th>\n",
       "      <th>salary</th>\n",
       "      <th>games</th>\n",
       "      <th>goals</th>\n",
       "      <th>assists</th>\n",
       "      <th>shots_on_target</th>\n",
       "      <th>points_per_game</th>\n",
       "      <th>points</th>\n",
       "      <th>position</th>\n",
       "      <th>team</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Cesc Fàbregas</td>\n",
       "      <td>14.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>2</td>\n",
       "      <td>14.0</td>\n",
       "      <td>10</td>\n",
       "      <td>10.47</td>\n",
       "      <td>209.49</td>\n",
       "      <td>Midfield</td>\n",
       "      <td>Chelsea</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Saido Berahino</td>\n",
       "      <td>13.8</td>\n",
       "      <td>21.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>7.02</td>\n",
       "      <td>147.43</td>\n",
       "      <td>Forward</td>\n",
       "      <td>West Brom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Steven Gerrard</td>\n",
       "      <td>13.8</td>\n",
       "      <td>20.0</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>11</td>\n",
       "      <td>7.50</td>\n",
       "      <td>150.01</td>\n",
       "      <td>Midfield</td>\n",
       "      <td>Liverpool</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           player  salary  games  goals  assists  shots_on_target  \\\n",
       "7   Cesc Fàbregas    14.0   20.0      2     14.0               10   \n",
       "8  Saido Berahino    13.8   21.0      9      0.0               20   \n",
       "9  Steven Gerrard    13.8   20.0      5      1.0               11   \n",
       "\n",
       "   points_per_game  points  position       team  \n",
       "7            10.47  209.49  Midfield    Chelsea  \n",
       "8             7.02  147.43   Forward  West Brom  \n",
       "9             7.50  150.01  Midfield  Liverpool  "
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def process_player_col(text):\n",
    "    name, rest = text.split('\\n')\n",
    "    position, team = [x.strip() for x in rest.split(' — ')]\n",
    "    return pd.Series([name, team, position])\n",
    "\n",
    "df[['player', 'team', 'position']] = df.player.apply(process_player_col)    \n",
    "df.tail(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>player</th>\n",
       "      <th>salary</th>\n",
       "      <th>games</th>\n",
       "      <th>goals</th>\n",
       "      <th>assists</th>\n",
       "      <th>shots_on_target</th>\n",
       "      <th>points_per_game</th>\n",
       "      <th>points</th>\n",
       "      <th>position</th>\n",
       "      <th>team</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>sergio agüero</td>\n",
       "      <td>19.2</td>\n",
       "      <td>16.0</td>\n",
       "      <td>14</td>\n",
       "      <td>3.0</td>\n",
       "      <td>34</td>\n",
       "      <td>13.12</td>\n",
       "      <td>209.98</td>\n",
       "      <td>forward</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>eden hazard</td>\n",
       "      <td>18.9</td>\n",
       "      <td>21.0</td>\n",
       "      <td>8</td>\n",
       "      <td>4.0</td>\n",
       "      <td>17</td>\n",
       "      <td>13.05</td>\n",
       "      <td>274.04</td>\n",
       "      <td>midfield</td>\n",
       "      <td>chelsea</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>alexis sánchez</td>\n",
       "      <td>17.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12</td>\n",
       "      <td>7.0</td>\n",
       "      <td>29</td>\n",
       "      <td>11.19</td>\n",
       "      <td>223.86</td>\n",
       "      <td>forward</td>\n",
       "      <td>arsenal</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>yaya touré</td>\n",
       "      <td>16.6</td>\n",
       "      <td>18.0</td>\n",
       "      <td>7</td>\n",
       "      <td>1.0</td>\n",
       "      <td>19</td>\n",
       "      <td>10.99</td>\n",
       "      <td>197.91</td>\n",
       "      <td>midfield</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Ángel di maría</td>\n",
       "      <td>15.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>3</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13</td>\n",
       "      <td>10.17</td>\n",
       "      <td>132.23</td>\n",
       "      <td>midfield</td>\n",
       "      <td>manchester united</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           player  salary  games  goals  assists  shots_on_target  \\\n",
       "0   sergio agüero    19.2   16.0     14      3.0               34   \n",
       "1     eden hazard    18.9   21.0      8      4.0               17   \n",
       "2  alexis sánchez    17.6    NaN     12      7.0               29   \n",
       "3      yaya touré    16.6   18.0      7      1.0               19   \n",
       "4  Ángel di maría    15.0   13.0      3      NaN               13   \n",
       "\n",
       "   points_per_game  points  position               team  \n",
       "0            13.12  209.98   forward    manchester city  \n",
       "1            13.05  274.04  midfield            chelsea  \n",
       "2            11.19  223.86   forward            arsenal  \n",
       "3            10.99  197.91  midfield    manchester city  \n",
       "4            10.17  132.23  midfield  manchester united  "
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cols = ['player', 'position', 'team']\n",
    "df[cols] = df[cols].applymap(lambda x: x.lower())\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Сколько строк содержит nan?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3 rows have missing values\n"
     ]
    }
   ],
   "source": [
    "nans = df.shape[0] - df.dropna().shape[0]\n",
    "print('%d rows have missing values' % nans)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Какие строки содержат NaN в assists?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>player</th>\n",
       "      <th>salary</th>\n",
       "      <th>games</th>\n",
       "      <th>goals</th>\n",
       "      <th>assists</th>\n",
       "      <th>shots_on_target</th>\n",
       "      <th>points_per_game</th>\n",
       "      <th>points</th>\n",
       "      <th>position</th>\n",
       "      <th>team</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Ángel di maría</td>\n",
       "      <td>15.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>3</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13</td>\n",
       "      <td>10.17</td>\n",
       "      <td>132.23</td>\n",
       "      <td>midfield</td>\n",
       "      <td>manchester united</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>santiago cazorla</td>\n",
       "      <td>14.8</td>\n",
       "      <td>20.0</td>\n",
       "      <td>4</td>\n",
       "      <td>NaN</td>\n",
       "      <td>20</td>\n",
       "      <td>9.97</td>\n",
       "      <td>NaN</td>\n",
       "      <td>midfield</td>\n",
       "      <td>arsenal</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             player  salary  games  goals  assists  shots_on_target  \\\n",
       "4    Ángel di maría    15.0   13.0      3      NaN               13   \n",
       "5  santiago cazorla    14.8   20.0      4      NaN               20   \n",
       "\n",
       "   points_per_game  points  position               team  \n",
       "4            10.17  132.23  midfield  manchester united  \n",
       "5             9.97     NaN  midfield            arsenal  "
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[df['assists'].isnull()]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Оставим только их"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>player</th>\n",
       "      <th>salary</th>\n",
       "      <th>games</th>\n",
       "      <th>goals</th>\n",
       "      <th>assists</th>\n",
       "      <th>shots_on_target</th>\n",
       "      <th>points_per_game</th>\n",
       "      <th>points</th>\n",
       "      <th>position</th>\n",
       "      <th>team</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>sergio agüero</td>\n",
       "      <td>19.2</td>\n",
       "      <td>16.0</td>\n",
       "      <td>14</td>\n",
       "      <td>3.0</td>\n",
       "      <td>34</td>\n",
       "      <td>13.12</td>\n",
       "      <td>209.98</td>\n",
       "      <td>forward</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>eden hazard</td>\n",
       "      <td>18.9</td>\n",
       "      <td>21.0</td>\n",
       "      <td>8</td>\n",
       "      <td>4.0</td>\n",
       "      <td>17</td>\n",
       "      <td>13.05</td>\n",
       "      <td>274.04</td>\n",
       "      <td>midfield</td>\n",
       "      <td>chelsea</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>alexis sánchez</td>\n",
       "      <td>17.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12</td>\n",
       "      <td>7.0</td>\n",
       "      <td>29</td>\n",
       "      <td>11.19</td>\n",
       "      <td>223.86</td>\n",
       "      <td>forward</td>\n",
       "      <td>arsenal</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>yaya touré</td>\n",
       "      <td>16.6</td>\n",
       "      <td>18.0</td>\n",
       "      <td>7</td>\n",
       "      <td>1.0</td>\n",
       "      <td>19</td>\n",
       "      <td>10.99</td>\n",
       "      <td>197.91</td>\n",
       "      <td>midfield</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>david silva</td>\n",
       "      <td>14.3</td>\n",
       "      <td>15.0</td>\n",
       "      <td>6</td>\n",
       "      <td>2.0</td>\n",
       "      <td>11</td>\n",
       "      <td>10.35</td>\n",
       "      <td>155.26</td>\n",
       "      <td>midfield</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>cesc fàbregas</td>\n",
       "      <td>14.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>2</td>\n",
       "      <td>14.0</td>\n",
       "      <td>10</td>\n",
       "      <td>10.47</td>\n",
       "      <td>209.49</td>\n",
       "      <td>midfield</td>\n",
       "      <td>chelsea</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>saido berahino</td>\n",
       "      <td>13.8</td>\n",
       "      <td>21.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>7.02</td>\n",
       "      <td>147.43</td>\n",
       "      <td>forward</td>\n",
       "      <td>west brom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>steven gerrard</td>\n",
       "      <td>13.8</td>\n",
       "      <td>20.0</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>11</td>\n",
       "      <td>7.50</td>\n",
       "      <td>150.01</td>\n",
       "      <td>midfield</td>\n",
       "      <td>liverpool</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           player  salary  games  goals  assists  shots_on_target  \\\n",
       "0   sergio agüero    19.2   16.0     14      3.0               34   \n",
       "1     eden hazard    18.9   21.0      8      4.0               17   \n",
       "2  alexis sánchez    17.6    NaN     12      7.0               29   \n",
       "3      yaya touré    16.6   18.0      7      1.0               19   \n",
       "6     david silva    14.3   15.0      6      2.0               11   \n",
       "7   cesc fàbregas    14.0   20.0      2     14.0               10   \n",
       "8  saido berahino    13.8   21.0      9      0.0               20   \n",
       "9  steven gerrard    13.8   20.0      5      1.0               11   \n",
       "\n",
       "   points_per_game  points  position             team  \n",
       "0            13.12  209.98   forward  manchester city  \n",
       "1            13.05  274.04  midfield          chelsea  \n",
       "2            11.19  223.86   forward          arsenal  \n",
       "3            10.99  197.91  midfield  manchester city  \n",
       "6            10.35  155.26  midfield  manchester city  \n",
       "7            10.47  209.49  midfield          chelsea  \n",
       "8             7.02  147.43   forward        west brom  \n",
       "9             7.50  150.01  midfield        liverpool  "
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[df['assists'].notnull()]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "А отсутствующие игры заполним нулями:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>player</th>\n",
       "      <th>salary</th>\n",
       "      <th>games</th>\n",
       "      <th>goals</th>\n",
       "      <th>assists</th>\n",
       "      <th>shots_on_target</th>\n",
       "      <th>points_per_game</th>\n",
       "      <th>points</th>\n",
       "      <th>position</th>\n",
       "      <th>team</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>sergio agüero</td>\n",
       "      <td>19.2</td>\n",
       "      <td>16.0</td>\n",
       "      <td>14</td>\n",
       "      <td>3.0</td>\n",
       "      <td>34</td>\n",
       "      <td>13.12</td>\n",
       "      <td>209.98</td>\n",
       "      <td>forward</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>eden hazard</td>\n",
       "      <td>18.9</td>\n",
       "      <td>21.0</td>\n",
       "      <td>8</td>\n",
       "      <td>4.0</td>\n",
       "      <td>17</td>\n",
       "      <td>13.05</td>\n",
       "      <td>274.04</td>\n",
       "      <td>midfield</td>\n",
       "      <td>chelsea</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>alexis sánchez</td>\n",
       "      <td>17.6</td>\n",
       "      <td>0.0</td>\n",
       "      <td>12</td>\n",
       "      <td>7.0</td>\n",
       "      <td>29</td>\n",
       "      <td>11.19</td>\n",
       "      <td>223.86</td>\n",
       "      <td>forward</td>\n",
       "      <td>arsenal</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>yaya touré</td>\n",
       "      <td>16.6</td>\n",
       "      <td>18.0</td>\n",
       "      <td>7</td>\n",
       "      <td>1.0</td>\n",
       "      <td>19</td>\n",
       "      <td>10.99</td>\n",
       "      <td>197.91</td>\n",
       "      <td>midfield</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Ángel di maría</td>\n",
       "      <td>15.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>13</td>\n",
       "      <td>10.17</td>\n",
       "      <td>132.23</td>\n",
       "      <td>midfield</td>\n",
       "      <td>manchester united</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>santiago cazorla</td>\n",
       "      <td>14.8</td>\n",
       "      <td>20.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>9.97</td>\n",
       "      <td>0.00</td>\n",
       "      <td>midfield</td>\n",
       "      <td>arsenal</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>david silva</td>\n",
       "      <td>14.3</td>\n",
       "      <td>15.0</td>\n",
       "      <td>6</td>\n",
       "      <td>2.0</td>\n",
       "      <td>11</td>\n",
       "      <td>10.35</td>\n",
       "      <td>155.26</td>\n",
       "      <td>midfield</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>cesc fàbregas</td>\n",
       "      <td>14.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>2</td>\n",
       "      <td>14.0</td>\n",
       "      <td>10</td>\n",
       "      <td>10.47</td>\n",
       "      <td>209.49</td>\n",
       "      <td>midfield</td>\n",
       "      <td>chelsea</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>saido berahino</td>\n",
       "      <td>13.8</td>\n",
       "      <td>21.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>7.02</td>\n",
       "      <td>147.43</td>\n",
       "      <td>forward</td>\n",
       "      <td>west brom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>steven gerrard</td>\n",
       "      <td>13.8</td>\n",
       "      <td>20.0</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>11</td>\n",
       "      <td>7.50</td>\n",
       "      <td>150.01</td>\n",
       "      <td>midfield</td>\n",
       "      <td>liverpool</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             player  salary  games  goals  assists  shots_on_target  \\\n",
       "0     sergio agüero    19.2   16.0     14      3.0               34   \n",
       "1       eden hazard    18.9   21.0      8      4.0               17   \n",
       "2    alexis sánchez    17.6    0.0     12      7.0               29   \n",
       "3        yaya touré    16.6   18.0      7      1.0               19   \n",
       "4    Ángel di maría    15.0   13.0      3      0.0               13   \n",
       "5  santiago cazorla    14.8   20.0      4      0.0               20   \n",
       "6       david silva    14.3   15.0      6      2.0               11   \n",
       "7     cesc fàbregas    14.0   20.0      2     14.0               10   \n",
       "8    saido berahino    13.8   21.0      9      0.0               20   \n",
       "9    steven gerrard    13.8   20.0      5      1.0               11   \n",
       "\n",
       "   points_per_game  points  position               team  \n",
       "0            13.12  209.98   forward    manchester city  \n",
       "1            13.05  274.04  midfield            chelsea  \n",
       "2            11.19  223.86   forward            arsenal  \n",
       "3            10.99  197.91  midfield    manchester city  \n",
       "4            10.17  132.23  midfield  manchester united  \n",
       "5             9.97    0.00  midfield            arsenal  \n",
       "6            10.35  155.26  midfield    manchester city  \n",
       "7            10.47  209.49  midfield            chelsea  \n",
       "8             7.02  147.43   forward          west brom  \n",
       "9             7.50  150.01  midfield          liverpool  "
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.fillna(value=0, inplace=True)\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Отсортируем по полю goals"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>player</th>\n",
       "      <th>salary</th>\n",
       "      <th>games</th>\n",
       "      <th>goals</th>\n",
       "      <th>assists</th>\n",
       "      <th>shots_on_target</th>\n",
       "      <th>points_per_game</th>\n",
       "      <th>points</th>\n",
       "      <th>position</th>\n",
       "      <th>team</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>sergio agüero</td>\n",
       "      <td>19.2</td>\n",
       "      <td>16.0</td>\n",
       "      <td>14</td>\n",
       "      <td>3.0</td>\n",
       "      <td>34</td>\n",
       "      <td>13.12</td>\n",
       "      <td>209.98</td>\n",
       "      <td>forward</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>alexis sánchez</td>\n",
       "      <td>17.6</td>\n",
       "      <td>0.0</td>\n",
       "      <td>12</td>\n",
       "      <td>7.0</td>\n",
       "      <td>29</td>\n",
       "      <td>11.19</td>\n",
       "      <td>223.86</td>\n",
       "      <td>forward</td>\n",
       "      <td>arsenal</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>saido berahino</td>\n",
       "      <td>13.8</td>\n",
       "      <td>21.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>7.02</td>\n",
       "      <td>147.43</td>\n",
       "      <td>forward</td>\n",
       "      <td>west brom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>eden hazard</td>\n",
       "      <td>18.9</td>\n",
       "      <td>21.0</td>\n",
       "      <td>8</td>\n",
       "      <td>4.0</td>\n",
       "      <td>17</td>\n",
       "      <td>13.05</td>\n",
       "      <td>274.04</td>\n",
       "      <td>midfield</td>\n",
       "      <td>chelsea</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>yaya touré</td>\n",
       "      <td>16.6</td>\n",
       "      <td>18.0</td>\n",
       "      <td>7</td>\n",
       "      <td>1.0</td>\n",
       "      <td>19</td>\n",
       "      <td>10.99</td>\n",
       "      <td>197.91</td>\n",
       "      <td>midfield</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           player  salary  games  goals  assists  shots_on_target  \\\n",
       "0   sergio agüero    19.2   16.0     14      3.0               34   \n",
       "2  alexis sánchez    17.6    0.0     12      7.0               29   \n",
       "8  saido berahino    13.8   21.0      9      0.0               20   \n",
       "1     eden hazard    18.9   21.0      8      4.0               17   \n",
       "3      yaya touré    16.6   18.0      7      1.0               19   \n",
       "\n",
       "   points_per_game  points  position             team  \n",
       "0            13.12  209.98   forward  manchester city  \n",
       "2            11.19  223.86   forward          arsenal  \n",
       "8             7.02  147.43   forward        west brom  \n",
       "1            13.05  274.04  midfield          chelsea  \n",
       "3            10.99  197.91  midfield  manchester city  "
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_values(by='goals', ascending=False, inplace=True)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "И поменяем индексы"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>player</th>\n",
       "      <th>salary</th>\n",
       "      <th>games</th>\n",
       "      <th>goals</th>\n",
       "      <th>assists</th>\n",
       "      <th>shots_on_target</th>\n",
       "      <th>points_per_game</th>\n",
       "      <th>points</th>\n",
       "      <th>position</th>\n",
       "      <th>team</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>sergio agüero</td>\n",
       "      <td>19.2</td>\n",
       "      <td>16.0</td>\n",
       "      <td>14</td>\n",
       "      <td>3.0</td>\n",
       "      <td>34</td>\n",
       "      <td>13.12</td>\n",
       "      <td>209.98</td>\n",
       "      <td>forward</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>alexis sánchez</td>\n",
       "      <td>17.6</td>\n",
       "      <td>0.0</td>\n",
       "      <td>12</td>\n",
       "      <td>7.0</td>\n",
       "      <td>29</td>\n",
       "      <td>11.19</td>\n",
       "      <td>223.86</td>\n",
       "      <td>forward</td>\n",
       "      <td>arsenal</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>saido berahino</td>\n",
       "      <td>13.8</td>\n",
       "      <td>21.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>7.02</td>\n",
       "      <td>147.43</td>\n",
       "      <td>forward</td>\n",
       "      <td>west brom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>eden hazard</td>\n",
       "      <td>18.9</td>\n",
       "      <td>21.0</td>\n",
       "      <td>8</td>\n",
       "      <td>4.0</td>\n",
       "      <td>17</td>\n",
       "      <td>13.05</td>\n",
       "      <td>274.04</td>\n",
       "      <td>midfield</td>\n",
       "      <td>chelsea</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>yaya touré</td>\n",
       "      <td>16.6</td>\n",
       "      <td>18.0</td>\n",
       "      <td>7</td>\n",
       "      <td>1.0</td>\n",
       "      <td>19</td>\n",
       "      <td>10.99</td>\n",
       "      <td>197.91</td>\n",
       "      <td>midfield</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           player  salary  games  goals  assists  shots_on_target  \\\n",
       "1   sergio agüero    19.2   16.0     14      3.0               34   \n",
       "2  alexis sánchez    17.6    0.0     12      7.0               29   \n",
       "3  saido berahino    13.8   21.0      9      0.0               20   \n",
       "4     eden hazard    18.9   21.0      8      4.0               17   \n",
       "5      yaya touré    16.6   18.0      7      1.0               19   \n",
       "\n",
       "   points_per_game  points  position             team  \n",
       "1            13.12  209.98   forward  manchester city  \n",
       "2            11.19  223.86   forward          arsenal  \n",
       "3             7.02  147.43   forward        west brom  \n",
       "4            13.05  274.04  midfield          chelsea  \n",
       "5            10.99  197.91  midfield  manchester city  "
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.index = range(1,len(df.index)+1)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Индексами могут быть строки"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>salary</th>\n",
       "      <th>games</th>\n",
       "      <th>goals</th>\n",
       "      <th>assists</th>\n",
       "      <th>shots_on_target</th>\n",
       "      <th>points_per_game</th>\n",
       "      <th>points</th>\n",
       "      <th>position</th>\n",
       "      <th>team</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>player</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>sergio agüero</th>\n",
       "      <td>19.2</td>\n",
       "      <td>16.0</td>\n",
       "      <td>14</td>\n",
       "      <td>3.0</td>\n",
       "      <td>34</td>\n",
       "      <td>13.12</td>\n",
       "      <td>209.98</td>\n",
       "      <td>forward</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>alexis sánchez</th>\n",
       "      <td>17.6</td>\n",
       "      <td>0.0</td>\n",
       "      <td>12</td>\n",
       "      <td>7.0</td>\n",
       "      <td>29</td>\n",
       "      <td>11.19</td>\n",
       "      <td>223.86</td>\n",
       "      <td>forward</td>\n",
       "      <td>arsenal</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>saido berahino</th>\n",
       "      <td>13.8</td>\n",
       "      <td>21.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>7.02</td>\n",
       "      <td>147.43</td>\n",
       "      <td>forward</td>\n",
       "      <td>west brom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>eden hazard</th>\n",
       "      <td>18.9</td>\n",
       "      <td>21.0</td>\n",
       "      <td>8</td>\n",
       "      <td>4.0</td>\n",
       "      <td>17</td>\n",
       "      <td>13.05</td>\n",
       "      <td>274.04</td>\n",
       "      <td>midfield</td>\n",
       "      <td>chelsea</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>yaya touré</th>\n",
       "      <td>16.6</td>\n",
       "      <td>18.0</td>\n",
       "      <td>7</td>\n",
       "      <td>1.0</td>\n",
       "      <td>19</td>\n",
       "      <td>10.99</td>\n",
       "      <td>197.91</td>\n",
       "      <td>midfield</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                salary  games  goals  assists  shots_on_target  \\\n",
       "player                                                           \n",
       "sergio agüero     19.2   16.0     14      3.0               34   \n",
       "alexis sánchez    17.6    0.0     12      7.0               29   \n",
       "saido berahino    13.8   21.0      9      0.0               20   \n",
       "eden hazard       18.9   21.0      8      4.0               17   \n",
       "yaya touré        16.6   18.0      7      1.0               19   \n",
       "\n",
       "                points_per_game  points  position             team  \n",
       "player                                                              \n",
       "sergio agüero             13.12  209.98   forward  manchester city  \n",
       "alexis sánchez            11.19  223.86   forward          arsenal  \n",
       "saido berahino             7.02  147.43   forward        west brom  \n",
       "eden hazard               13.05  274.04  midfield          chelsea  \n",
       "yaya touré                10.99  197.91  midfield  manchester city  "
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.set_index('player', inplace=True)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Вернём назад"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>player</th>\n",
       "      <th>salary</th>\n",
       "      <th>games</th>\n",
       "      <th>goals</th>\n",
       "      <th>assists</th>\n",
       "      <th>shots_on_target</th>\n",
       "      <th>points_per_game</th>\n",
       "      <th>points</th>\n",
       "      <th>position</th>\n",
       "      <th>team</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>sergio agüero</td>\n",
       "      <td>19.2</td>\n",
       "      <td>16.0</td>\n",
       "      <td>14</td>\n",
       "      <td>3.0</td>\n",
       "      <td>34</td>\n",
       "      <td>13.12</td>\n",
       "      <td>209.98</td>\n",
       "      <td>forward</td>\n",
       "      <td>manchester city</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>alexis sánchez</td>\n",
       "      <td>17.6</td>\n",
       "      <td>0.0</td>\n",
       "      <td>12</td>\n",
       "      <td>7.0</td>\n",
       "      <td>29</td>\n",
       "      <td>11.19</td>\n",
       "      <td>223.86</td>\n",
       "      <td>forward</td>\n",
       "      <td>arsenal</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>saido berahino</td>\n",
       "      <td>13.8</td>\n",
       "      <td>21.0</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>7.02</td>\n",
       "      <td>147.43</td>\n",
       "      <td>forward</td>\n",
       "      <td>west brom</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           player  salary  games  goals  assists  shots_on_target  \\\n",
       "0   sergio agüero    19.2   16.0     14      3.0               34   \n",
       "1  alexis sánchez    17.6    0.0     12      7.0               29   \n",
       "2  saido berahino    13.8   21.0      9      0.0               20   \n",
       "\n",
       "   points_per_game  points position             team  \n",
       "0            13.12  209.98  forward  manchester city  \n",
       "1            11.19  223.86  forward          arsenal  \n",
       "2             7.02  147.43  forward        west brom  "
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.reset_index(inplace=True)\n",
    "df.head(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Слайсинг по нескольким условиям"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>player</th>\n",
       "      <th>salary</th>\n",
       "      <th>games</th>\n",
       "      <th>goals</th>\n",
       "      <th>assists</th>\n",
       "      <th>shots_on_target</th>\n",
       "      <th>points_per_game</th>\n",
       "      <th>points</th>\n",
       "      <th>position</th>\n",
       "      <th>team</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>alexis sánchez</td>\n",
       "      <td>17.6</td>\n",
       "      <td>0.0</td>\n",
       "      <td>12</td>\n",
       "      <td>7.0</td>\n",
       "      <td>29</td>\n",
       "      <td>11.19</td>\n",
       "      <td>223.86</td>\n",
       "      <td>forward</td>\n",
       "      <td>arsenal</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>eden hazard</td>\n",
       "      <td>18.9</td>\n",
       "      <td>21.0</td>\n",
       "      <td>8</td>\n",
       "      <td>4.0</td>\n",
       "      <td>17</td>\n",
       "      <td>13.05</td>\n",
       "      <td>274.04</td>\n",
       "      <td>midfield</td>\n",
       "      <td>chelsea</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>santiago cazorla</td>\n",
       "      <td>14.8</td>\n",
       "      <td>20.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>9.97</td>\n",
       "      <td>0.00</td>\n",
       "      <td>midfield</td>\n",
       "      <td>arsenal</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>cesc fàbregas</td>\n",
       "      <td>14.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>2</td>\n",
       "      <td>14.0</td>\n",
       "      <td>10</td>\n",
       "      <td>10.47</td>\n",
       "      <td>209.49</td>\n",
       "      <td>midfield</td>\n",
       "      <td>chelsea</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             player  salary  games  goals  assists  shots_on_target  \\\n",
       "1    alexis sánchez    17.6    0.0     12      7.0               29   \n",
       "3       eden hazard    18.9   21.0      8      4.0               17   \n",
       "7  santiago cazorla    14.8   20.0      4      0.0               20   \n",
       "9     cesc fàbregas    14.0   20.0      2     14.0               10   \n",
       "\n",
       "   points_per_game  points  position     team  \n",
       "1            11.19  223.86   forward  arsenal  \n",
       "3            13.05  274.04  midfield  chelsea  \n",
       "7             9.97    0.00  midfield  arsenal  \n",
       "9            10.47  209.49  midfield  chelsea  "
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[ (df['team'] == 'arsenal') | (df['team'] == 'chelsea') ]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>player</th>\n",
       "      <th>salary</th>\n",
       "      <th>games</th>\n",
       "      <th>goals</th>\n",
       "      <th>assists</th>\n",
       "      <th>shots_on_target</th>\n",
       "      <th>points_per_game</th>\n",
       "      <th>points</th>\n",
       "      <th>position</th>\n",
       "      <th>team</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>alexis sánchez</td>\n",
       "      <td>17.6</td>\n",
       "      <td>0.0</td>\n",
       "      <td>12</td>\n",
       "      <td>7.0</td>\n",
       "      <td>29</td>\n",
       "      <td>11.19</td>\n",
       "      <td>223.86</td>\n",
       "      <td>forward</td>\n",
       "      <td>arsenal</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           player  salary  games  goals  assists  shots_on_target  \\\n",
       "1  alexis sánchez    17.6    0.0     12      7.0               29   \n",
       "\n",
       "   points_per_game  points position     team  \n",
       "1            11.19  223.86  forward  arsenal  "
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[ (df['team'] == 'arsenal') & (df['position'] == 'forward') ]"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
