{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#coding:utf8\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>body {\n",
       "    margin: 0;\n",
       "    font-family: Helvetica;\n",
       "}\n",
       "table.dataframe {\n",
       "    border-collapse: collapse;\n",
       "    border: none;\n",
       "}\n",
       "table.dataframe tr {\n",
       "    border: none;\n",
       "}\n",
       "table.dataframe td, table.dataframe th {\n",
       "    margin: 0;\n",
       "    border: 1px solid white;\n",
       "    padding-left: 0.25em;\n",
       "    padding-right: 0.25em;\n",
       "}\n",
       "table.dataframe th:not(:empty) {\n",
       "    background-color: #fec;\n",
       "    text-align: left;\n",
       "    font-weight: normal;\n",
       "}\n",
       "table.dataframe tr:nth-child(2) th:empty {\n",
       "    border-left: none;\n",
       "    border-right: 1px dashed #888;\n",
       "}\n",
       "table.dataframe td {\n",
       "    border: 2px solid #ccf;\n",
       "    background-color: #f4f4ff;\n",
       "}\n",
       "h1 {\n",
       "    color: white;\n",
       "    background-color: black;\n",
       "    padding: 0.5em;   \n",
       "    font-size: 12pt\n",
       "}\n",
       "h2 {\n",
       "    color: white;\n",
       "    background-color: black;\n",
       "    padding: 0.5em;   \n",
       "    font-size:8pt\n",
       "}\n",
       "div.text_cell_render{\n",
       "    background-color:gray;\n",
       "}\n",
       "</style>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.core.display import HTML\n",
    "css = open('style-table.css').read() + open('style-notebook.css').read()\n",
    "HTML('<style>{}</style>'.format(css))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这个一篇针对pandas新手的简短入门,想要了解更多复杂的内容,参阅[*Cookbook*](http://pandas.pydata.org/pandas-docs/stable/cookbook.html#cookbook)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通常,我们首先要导入以下几个库:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 创建对象"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过传递一个list来创建**Series**,pandas会默认创建整型索引:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     1\n",
       "1     3\n",
       "2     5\n",
       "3   NaN\n",
       "4     6\n",
       "5     8\n",
       "dtype: float64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series([1,3,5,np.nan,6,8])\n",
    "s"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过传递一个numpy array,日期索引以及列标签来创建一个**DataFrame**:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',\n",
       "               '2013-01-05', '2013-01-06'],\n",
       "              dtype='datetime64[ns]', freq='D')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dates = pd.date_range('20130101', periods=6)\n",
    "dates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.797290</td>\n",
       "      <td>-0.251394</td>\n",
       "      <td>-0.479293</td>\n",
       "      <td>-1.258262</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>1.017688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.158869</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>1.460285</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.204613</td>\n",
       "      <td>-0.581628</td>\n",
       "      <td>-0.232023</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.889528</td>\n",
       "      <td>0.803676</td>\n",
       "      <td>-0.986617</td>\n",
       "      <td>0.256299</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-01 -0.797290 -0.251394 -0.479293 -1.258262\n",
       "2013-01-02  2.570323  0.269388  0.560123  1.017688\n",
       "2013-01-03  0.512782  1.312247  0.651444  1.158869\n",
       "2013-01-04 -0.687212 -1.906938 -1.895192  1.460285\n",
       "2013-01-05  0.490081  0.204613 -0.581628 -0.232023\n",
       "2013-01-06  0.889528  0.803676 -0.986617  0.256299"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过传递一个能够被转换为类似series的dict对象来创建一个**DataFrame**:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>test</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>train</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>test</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>train</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   A          B  C  D      E    F\n",
       "0  1 2013-01-02  1  3   test  foo\n",
       "1  1 2013-01-02  1  3  train  foo\n",
       "2  1 2013-01-02  1  3   test  foo\n",
       "3  1 2013-01-02  1  3  train  foo"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = pd.DataFrame({ 'A' : 1.,\n",
    "                     'B' : pd.Timestamp('20130102'),\n",
    "                     'C' : pd.Series(1,index=list(range(4)),dtype='float32'),\n",
    "                     'D' : np.array([3]*4,dtype='int32'),\n",
    "                     'E' : pd.Categorical([\"test\",\"train\",\"test\",\"train\"]),\n",
    "                     'F' : 'foo' })\n",
    "df2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到各列的数据类型为:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A           float64\n",
       "B    datetime64[ns]\n",
       "C           float32\n",
       "D             int32\n",
       "E          category\n",
       "F            object\n",
       "dtype: object"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.dtypes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 查看数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看frame中头部和尾部的几行:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.797290</td>\n",
       "      <td>-0.251394</td>\n",
       "      <td>-0.479293</td>\n",
       "      <td>-1.258262</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>1.017688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.158869</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>1.460285</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.204613</td>\n",
       "      <td>-0.581628</td>\n",
       "      <td>-0.232023</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-01 -0.797290 -0.251394 -0.479293 -1.258262\n",
       "2013-01-02  2.570323  0.269388  0.560123  1.017688\n",
       "2013-01-03  0.512782  1.312247  0.651444  1.158869\n",
       "2013-01-04 -0.687212 -1.906938 -1.895192  1.460285\n",
       "2013-01-05  0.490081  0.204613 -0.581628 -0.232023"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>1.460285</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.204613</td>\n",
       "      <td>-0.581628</td>\n",
       "      <td>-0.232023</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.889528</td>\n",
       "      <td>0.803676</td>\n",
       "      <td>-0.986617</td>\n",
       "      <td>0.256299</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-04 -0.687212 -1.906938 -1.895192  1.460285\n",
       "2013-01-05  0.490081  0.204613 -0.581628 -0.232023\n",
       "2013-01-06  0.889528  0.803676 -0.986617  0.256299"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.tail(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "显示索引、列名以及底层的numpy数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',\n",
       "               '2013-01-05', '2013-01-06'],\n",
       "              dtype='datetime64[ns]', freq='D')"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index([u'A', u'B', u'C', u'D'], dtype='object')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.79728972, -0.25139407, -0.47929318, -1.25826194],\n",
       "       [ 2.57032272,  0.26938806,  0.56012338,  1.01768776],\n",
       "       [ 0.51278197,  1.31224685,  0.65144361,  1.15886932],\n",
       "       [-0.68721203, -1.90693793, -1.89519175,  1.46028525],\n",
       "       [ 0.49008072,  0.20461343, -0.58162821, -0.23202324],\n",
       "       [ 0.88952831,  0.80367591, -0.98661684,  0.25629939]])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "describe()能对数据做一个快速统计汇总"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.496369</td>\n",
       "      <td>0.071932</td>\n",
       "      <td>-0.455194</td>\n",
       "      <td>0.400476</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.227240</td>\n",
       "      <td>1.109134</td>\n",
       "      <td>0.962090</td>\n",
       "      <td>1.024847</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-0.797290</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>-1.258262</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-0.392889</td>\n",
       "      <td>-0.137392</td>\n",
       "      <td>-0.885370</td>\n",
       "      <td>-0.109943</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.501431</td>\n",
       "      <td>0.237001</td>\n",
       "      <td>-0.530461</td>\n",
       "      <td>0.636994</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.795342</td>\n",
       "      <td>0.670104</td>\n",
       "      <td>0.300269</td>\n",
       "      <td>1.123574</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.460285</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              A         B         C         D\n",
       "count  6.000000  6.000000  6.000000  6.000000\n",
       "mean   0.496369  0.071932 -0.455194  0.400476\n",
       "std    1.227240  1.109134  0.962090  1.024847\n",
       "min   -0.797290 -1.906938 -1.895192 -1.258262\n",
       "25%   -0.392889 -0.137392 -0.885370 -0.109943\n",
       "50%    0.501431  0.237001 -0.530461  0.636994\n",
       "75%    0.795342  0.670104  0.300269  1.123574\n",
       "max    2.570323  1.312247  0.651444  1.460285"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对数据做转置:"
   ]
  },
  {
   "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>2013-01-01 00:00:00</th>\n",
       "      <th>2013-01-02 00:00:00</th>\n",
       "      <th>2013-01-03 00:00:00</th>\n",
       "      <th>2013-01-04 00:00:00</th>\n",
       "      <th>2013-01-05 00:00:00</th>\n",
       "      <th>2013-01-06 00:00:00</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>-0.797290</td>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.512782</td>\n",
       "      <td>-0.687212</td>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.889528</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>-0.251394</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>0.204613</td>\n",
       "      <td>0.803676</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>-0.479293</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>-0.581628</td>\n",
       "      <td>-0.986617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>-1.258262</td>\n",
       "      <td>1.017688</td>\n",
       "      <td>1.158869</td>\n",
       "      <td>1.460285</td>\n",
       "      <td>-0.232023</td>\n",
       "      <td>0.256299</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   2013-01-01  2013-01-02  2013-01-03  2013-01-04  2013-01-05  2013-01-06\n",
       "A   -0.797290    2.570323    0.512782   -0.687212    0.490081    0.889528\n",
       "B   -0.251394    0.269388    1.312247   -1.906938    0.204613    0.803676\n",
       "C   -0.479293    0.560123    0.651444   -1.895192   -0.581628   -0.986617\n",
       "D   -1.258262    1.017688    1.158869    1.460285   -0.232023    0.256299"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.T"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "按轴进行排序:"
   ]
  },
  {
   "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>D</th>\n",
       "      <th>C</th>\n",
       "      <th>B</th>\n",
       "      <th>A</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-1.258262</td>\n",
       "      <td>-0.479293</td>\n",
       "      <td>-0.251394</td>\n",
       "      <td>-0.797290</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>1.017688</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>2.570323</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>1.158869</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.512782</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>1.460285</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-0.687212</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.232023</td>\n",
       "      <td>-0.581628</td>\n",
       "      <td>0.204613</td>\n",
       "      <td>0.490081</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.256299</td>\n",
       "      <td>-0.986617</td>\n",
       "      <td>0.803676</td>\n",
       "      <td>0.889528</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   D         C         B         A\n",
       "2013-01-01 -1.258262 -0.479293 -0.251394 -0.797290\n",
       "2013-01-02  1.017688  0.560123  0.269388  2.570323\n",
       "2013-01-03  1.158869  0.651444  1.312247  0.512782\n",
       "2013-01-04  1.460285 -1.895192 -1.906938 -0.687212\n",
       "2013-01-05 -0.232023 -0.581628  0.204613  0.490081\n",
       "2013-01-06  0.256299 -0.986617  0.803676  0.889528"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_index(axis=1, ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "按值进行排序 :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>1.460285</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.797290</td>\n",
       "      <td>-0.251394</td>\n",
       "      <td>-0.479293</td>\n",
       "      <td>-1.258262</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.204613</td>\n",
       "      <td>-0.581628</td>\n",
       "      <td>-0.232023</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>1.017688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.889528</td>\n",
       "      <td>0.803676</td>\n",
       "      <td>-0.986617</td>\n",
       "      <td>0.256299</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.158869</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-04 -0.687212 -1.906938 -1.895192  1.460285\n",
       "2013-01-01 -0.797290 -0.251394 -0.479293 -1.258262\n",
       "2013-01-05  0.490081  0.204613 -0.581628 -0.232023\n",
       "2013-01-02  2.570323  0.269388  0.560123  1.017688\n",
       "2013-01-06  0.889528  0.803676 -0.986617  0.256299\n",
       "2013-01-03  0.512782  1.312247  0.651444  1.158869"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_values(by='B')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据选择"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "注意:虽然标准的Python/Numpy的表达式能完成选择与赋值等功能,但我们仍推荐使用优化过的pandas数据访问方法:.at,.iat,.loc,.iloc和.ix"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 选取"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "选择某一列数据,它会返回一个**Series**,等同于**df.A**:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2013-01-01   -0.797290\n",
       "2013-01-02    2.570323\n",
       "2013-01-03    0.512782\n",
       "2013-01-04   -0.687212\n",
       "2013-01-05    0.490081\n",
       "2013-01-06    0.889528\n",
       "Freq: D, Name: A, dtype: float64"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['A']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过使用**[ ]**进行切片选取:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.797290</td>\n",
       "      <td>-0.251394</td>\n",
       "      <td>-0.479293</td>\n",
       "      <td>-1.258262</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>1.017688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.158869</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-01 -0.797290 -0.251394 -0.479293 -1.258262\n",
       "2013-01-02  2.570323  0.269388  0.560123  1.017688\n",
       "2013-01-03  0.512782  1.312247  0.651444  1.158869"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[0:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>1.017688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.158869</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>1.460285</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-02  2.570323  0.269388  0.560123  1.017688\n",
       "2013-01-03  0.512782  1.312247  0.651444  1.158869\n",
       "2013-01-04 -0.687212 -1.906938 -1.895192  1.460285"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['20130102':'20130104']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 通过标签选取"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过标签进行交叉选取:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A   -0.797290\n",
       "B   -0.251394\n",
       "C   -0.479293\n",
       "D   -1.258262\n",
       "Name: 2013-01-01 00:00:00, dtype: float64"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[dates[0]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用标签对多个轴进行选取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.797290</td>\n",
       "      <td>-0.251394</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.204613</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.889528</td>\n",
       "      <td>0.803676</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B\n",
       "2013-01-01 -0.797290 -0.251394\n",
       "2013-01-02  2.570323  0.269388\n",
       "2013-01-03  0.512782  1.312247\n",
       "2013-01-04 -0.687212 -1.906938\n",
       "2013-01-05  0.490081  0.204613\n",
       "2013-01-06  0.889528  0.803676"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[:,['A','B']]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "进行标签切片,包含两个端点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B\n",
       "2013-01-02  2.570323  0.269388\n",
       "2013-01-03  0.512782  1.312247\n",
       "2013-01-04 -0.687212 -1.906938"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc['20130102':'20130104',['A','B']]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于返回的对象进行降维处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    2.570323\n",
       "B    0.269388\n",
       "Name: 2013-01-02 00:00:00, dtype: float64"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc['20130102',['A','B']]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "获取一个标量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.79728972181227264"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[dates[0],'A']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "快速获取标量(与上面的方法等价)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.79728972181227264"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.at[dates[0],'A']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 通过位置选取"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过传递整型的位置进行选取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A   -0.687212\n",
       "B   -1.906938\n",
       "C   -1.895192\n",
       "D    1.460285\n",
       "Name: 2013-01-04 00:00:00, dtype: float64"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过整型的位置切片进行选取,与python/numpy形式相同"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.204613</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B\n",
       "2013-01-04 -0.687212 -1.906938\n",
       "2013-01-05  0.490081  0.204613"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[3:5,0:2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "只对行进行切片"
   ]
  },
  {
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>1.017688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.158869</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-02  2.570323  0.269388  0.560123  1.017688\n",
       "2013-01-03  0.512782  1.312247  0.651444  1.158869"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[1:3,:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "只对列进行切片"
   ]
  },
  {
   "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>B</th>\n",
       "      <th>C</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.251394</td>\n",
       "      <td>-0.479293</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.204613</td>\n",
       "      <td>-0.581628</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.803676</td>\n",
       "      <td>-0.986617</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   B         C\n",
       "2013-01-01 -0.251394 -0.479293\n",
       "2013-01-02  0.269388  0.560123\n",
       "2013-01-03  1.312247  0.651444\n",
       "2013-01-04 -1.906938 -1.895192\n",
       "2013-01-05  0.204613 -0.581628\n",
       "2013-01-06  0.803676 -0.986617"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[:,1:3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "只获取某个值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.26938806116429348"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[1,1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "快速获取某个值(与上面的方法等价)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.26938806116429348"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iat[1,1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 布尔索引"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用某列的值来选取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>1.017688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.158869</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.204613</td>\n",
       "      <td>-0.581628</td>\n",
       "      <td>-0.232023</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.889528</td>\n",
       "      <td>0.803676</td>\n",
       "      <td>-0.986617</td>\n",
       "      <td>0.256299</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-02  2.570323  0.269388  0.560123  1.017688\n",
       "2013-01-03  0.512782  1.312247  0.651444  1.158869\n",
       "2013-01-05  0.490081  0.204613 -0.581628 -0.232023\n",
       "2013-01-06  0.889528  0.803676 -0.986617  0.256299"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[df.A > 0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用**where**操作来选取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>1.017688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.158869</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.460285</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.204613</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.889528</td>\n",
       "      <td>0.803676</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.256299</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-01       NaN       NaN       NaN       NaN\n",
       "2013-01-02  2.570323  0.269388  0.560123  1.017688\n",
       "2013-01-03  0.512782  1.312247  0.651444  1.158869\n",
       "2013-01-04       NaN       NaN       NaN  1.460285\n",
       "2013-01-05  0.490081  0.204613       NaN       NaN\n",
       "2013-01-06  0.889528  0.803676       NaN  0.256299"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[df > 0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用**isin()**方法来过滤数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df2 = df.copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.797290</td>\n",
       "      <td>-0.251394</td>\n",
       "      <td>-0.479293</td>\n",
       "      <td>-1.258262</td>\n",
       "      <td>one</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>1.017688</td>\n",
       "      <td>one</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.158869</td>\n",
       "      <td>two</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>1.460285</td>\n",
       "      <td>three</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.204613</td>\n",
       "      <td>-0.581628</td>\n",
       "      <td>-0.232023</td>\n",
       "      <td>four</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.889528</td>\n",
       "      <td>0.803676</td>\n",
       "      <td>-0.986617</td>\n",
       "      <td>0.256299</td>\n",
       "      <td>three</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D      E\n",
       "2013-01-01 -0.797290 -0.251394 -0.479293 -1.258262    one\n",
       "2013-01-02  2.570323  0.269388  0.560123  1.017688    one\n",
       "2013-01-03  0.512782  1.312247  0.651444  1.158869    two\n",
       "2013-01-04 -0.687212 -1.906938 -1.895192  1.460285  three\n",
       "2013-01-05  0.490081  0.204613 -0.581628 -0.232023   four\n",
       "2013-01-06  0.889528  0.803676 -0.986617  0.256299  three"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2['E'] = ['one', 'one', 'two', 'three', 'four', 'three']\n",
    "df2"
   ]
  },
  {
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.158869</td>\n",
       "      <td>two</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.204613</td>\n",
       "      <td>-0.581628</td>\n",
       "      <td>-0.232023</td>\n",
       "      <td>four</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D     E\n",
       "2013-01-03  0.512782  1.312247  0.651444  1.158869   two\n",
       "2013-01-05  0.490081  0.204613 -0.581628 -0.232023  four"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2[df2['E'].isin(['two', 'four'])]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 赋值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "赋值一个新的列,通过索引来自动对齐数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2013-01-02    1\n",
       "2013-01-03    2\n",
       "2013-01-04    3\n",
       "2013-01-05    4\n",
       "2013-01-06    5\n",
       "2013-01-07    6\n",
       "Freq: D, dtype: int64"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130102',periods=6))\n",
    "s1"
   ]
  },
  {
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.797290</td>\n",
       "      <td>-0.251394</td>\n",
       "      <td>-0.479293</td>\n",
       "      <td>-1.258262</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>1.017688</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.158869</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>1.460285</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.204613</td>\n",
       "      <td>-0.581628</td>\n",
       "      <td>-0.232023</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.889528</td>\n",
       "      <td>0.803676</td>\n",
       "      <td>-0.986617</td>\n",
       "      <td>0.256299</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D   F\n",
       "2013-01-01 -0.797290 -0.251394 -0.479293 -1.258262 NaN\n",
       "2013-01-02  2.570323  0.269388  0.560123  1.017688   1\n",
       "2013-01-03  0.512782  1.312247  0.651444  1.158869   2\n",
       "2013-01-04 -0.687212 -1.906938 -1.895192  1.460285   3\n",
       "2013-01-05  0.490081  0.204613 -0.581628 -0.232023   4\n",
       "2013-01-06  0.889528  0.803676 -0.986617  0.256299   5"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['F'] = s1\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过标签赋值"
   ]
  },
  {
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.251394</td>\n",
       "      <td>-0.479293</td>\n",
       "      <td>-1.258262</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>1.017688</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.158869</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>1.460285</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.204613</td>\n",
       "      <td>-0.581628</td>\n",
       "      <td>-0.232023</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.889528</td>\n",
       "      <td>0.803676</td>\n",
       "      <td>-0.986617</td>\n",
       "      <td>0.256299</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D   F\n",
       "2013-01-01  0.000000 -0.251394 -0.479293 -1.258262 NaN\n",
       "2013-01-02  2.570323  0.269388  0.560123  1.017688   1\n",
       "2013-01-03  0.512782  1.312247  0.651444  1.158869   2\n",
       "2013-01-04 -0.687212 -1.906938 -1.895192  1.460285   3\n",
       "2013-01-05  0.490081  0.204613 -0.581628 -0.232023   4\n",
       "2013-01-06  0.889528  0.803676 -0.986617  0.256299   5"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.at[dates[0], 'A'] = 0\n",
    "df"
   ]
  },
  {
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.479293</td>\n",
       "      <td>-1.258262</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>1.017688</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>1.158869</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>1.460285</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.204613</td>\n",
       "      <td>-0.581628</td>\n",
       "      <td>-0.232023</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.889528</td>\n",
       "      <td>0.803676</td>\n",
       "      <td>-0.986617</td>\n",
       "      <td>0.256299</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D   F\n",
       "2013-01-01  0.000000  0.000000 -0.479293 -1.258262 NaN\n",
       "2013-01-02  2.570323  0.269388  0.560123  1.017688   1\n",
       "2013-01-03  0.512782  1.312247  0.651444  1.158869   2\n",
       "2013-01-04 -0.687212 -1.906938 -1.895192  1.460285   3\n",
       "2013-01-05  0.490081  0.204613 -0.581628 -0.232023   4\n",
       "2013-01-06  0.889528  0.803676 -0.986617  0.256299   5"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iat[0,1] = 0\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过传递numpy array赋值"
   ]
  },
  {
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.479293</td>\n",
       "      <td>5</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.490081</td>\n",
       "      <td>0.204613</td>\n",
       "      <td>-0.581628</td>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.889528</td>\n",
       "      <td>0.803676</td>\n",
       "      <td>-0.986617</td>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D   F\n",
       "2013-01-01  0.000000  0.000000 -0.479293  5 NaN\n",
       "2013-01-02  2.570323  0.269388  0.560123  5   1\n",
       "2013-01-03  0.512782  1.312247  0.651444  5   2\n",
       "2013-01-04 -0.687212 -1.906938 -1.895192  5   3\n",
       "2013-01-05  0.490081  0.204613 -0.581628  5   4\n",
       "2013-01-06  0.889528  0.803676 -0.986617  5   5"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[:,'D'] = np.array([5] * len(df))\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过**where**操作来赋值"
   ]
  },
  {
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.479293</td>\n",
       "      <td>-5</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-2.570323</td>\n",
       "      <td>-0.269388</td>\n",
       "      <td>-0.560123</td>\n",
       "      <td>-5</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.512782</td>\n",
       "      <td>-1.312247</td>\n",
       "      <td>-0.651444</td>\n",
       "      <td>-5</td>\n",
       "      <td>-2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>-5</td>\n",
       "      <td>-3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-0.490081</td>\n",
       "      <td>-0.204613</td>\n",
       "      <td>-0.581628</td>\n",
       "      <td>-5</td>\n",
       "      <td>-4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>-0.889528</td>\n",
       "      <td>-0.803676</td>\n",
       "      <td>-0.986617</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D   F\n",
       "2013-01-01  0.000000  0.000000 -0.479293 -5 NaN\n",
       "2013-01-02 -2.570323 -0.269388 -0.560123 -5  -1\n",
       "2013-01-03 -0.512782 -1.312247 -0.651444 -5  -2\n",
       "2013-01-04 -0.687212 -1.906938 -1.895192 -5  -3\n",
       "2013-01-05 -0.490081 -0.204613 -0.581628 -5  -4\n",
       "2013-01-06 -0.889528 -0.803676 -0.986617 -5  -5"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = df.copy()\n",
    "df2[df2 > 0] = -df2\n",
    "df2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 缺失值处理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在pandas中,用**np.nan**来代表缺失值,这些值默认不会参与运算。\n",
    "\n",
    "reindex()允许你修改、增加、删除指定轴上的索引,并返回一个数据副本。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.479293</td>\n",
       "      <td>5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D   F   E\n",
       "2013-01-01  0.000000  0.000000 -0.479293  5 NaN   1\n",
       "2013-01-02  2.570323  0.269388  0.560123  5   1   1\n",
       "2013-01-03  0.512782  1.312247  0.651444  5   2 NaN\n",
       "2013-01-04 -0.687212 -1.906938 -1.895192  5   3 NaN"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1 = df.reindex(index=dates[0:4], columns=list(df.columns)+['E'])\n",
    "df1.loc[dates[0]:dates[1],'E'] = 1\n",
    "df1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "剔除所有包含缺失值的行数据"
   ]
  },
  {
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D  F  E\n",
       "2013-01-02  2.570323  0.269388  0.560123  5  1  1"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1.dropna(how='any')"
   ]
  },
  {
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.479293</td>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.560123</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.512782</td>\n",
       "      <td>1.312247</td>\n",
       "      <td>0.651444</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.687212</td>\n",
       "      <td>-1.906938</td>\n",
       "      <td>-1.895192</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D  F  E\n",
       "2013-01-01  0.000000  0.000000 -0.479293  5  5  1\n",
       "2013-01-02  2.570323  0.269388  0.560123  5  1  1\n",
       "2013-01-03  0.512782  1.312247  0.651444  5  2  5\n",
       "2013-01-04 -0.687212 -1.906938 -1.895192  5  3  5"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1.fillna(value=5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "获取值是否为**nan**的布尔标记"
   ]
  },
  {
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                A      B      C      D      F      E\n",
       "2013-01-01  False  False  False  False   True  False\n",
       "2013-01-02  False  False  False  False  False  False\n",
       "2013-01-03  False  False  False  False  False   True\n",
       "2013-01-04  False  False  False  False  False   True"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.isnull(df1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 运算"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 统计"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运算过程中,通常不包含缺失值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "进行描述性统计"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    0.629250\n",
       "B    0.113831\n",
       "C   -0.455194\n",
       "D    5.000000\n",
       "F    3.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对其他轴进行同样的运算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2013-01-01    1.130177\n",
       "2013-01-02    1.879967\n",
       "2013-01-03    1.895294\n",
       "2013-01-04    0.702132\n",
       "2013-01-05    1.822613\n",
       "2013-01-06    2.141317\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.mean(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于拥有不同维度的对象进行运算时需要对齐。除此之外,pandas会自动沿着指定维度计算。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2013-01-01   NaN\n",
       "2013-01-02   NaN\n",
       "2013-01-03     1\n",
       "2013-01-04     3\n",
       "2013-01-05     5\n",
       "2013-01-06   NaN\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series([1,3,5,np.nan,6,8], index=dates).shift(2)\n",
    "s"
   ]
  },
  {
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.487218</td>\n",
       "      <td>0.312247</td>\n",
       "      <td>-0.348556</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-3.687212</td>\n",
       "      <td>-4.906938</td>\n",
       "      <td>-4.895192</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-4.509919</td>\n",
       "      <td>-4.795387</td>\n",
       "      <td>-5.581628</td>\n",
       "      <td>0</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C   D   F\n",
       "2013-01-01       NaN       NaN       NaN NaN NaN\n",
       "2013-01-02       NaN       NaN       NaN NaN NaN\n",
       "2013-01-03 -0.487218  0.312247 -0.348556   4   1\n",
       "2013-01-04 -3.687212 -4.906938 -4.895192   2   0\n",
       "2013-01-05 -4.509919 -4.795387 -5.581628   0  -1\n",
       "2013-01-06       NaN       NaN       NaN NaN NaN"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sub(s, axis='index')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Apply 函数作用"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过apply()对函数作用"
   ]
  },
  {
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.479293</td>\n",
       "      <td>5</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>2.570323</td>\n",
       "      <td>0.269388</td>\n",
       "      <td>0.080830</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>3.083105</td>\n",
       "      <td>1.581635</td>\n",
       "      <td>0.732274</td>\n",
       "      <td>15</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>2.395893</td>\n",
       "      <td>-0.325303</td>\n",
       "      <td>-1.162918</td>\n",
       "      <td>20</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>2.885973</td>\n",
       "      <td>-0.120690</td>\n",
       "      <td>-1.744546</td>\n",
       "      <td>25</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>3.775502</td>\n",
       "      <td>0.682986</td>\n",
       "      <td>-2.731163</td>\n",
       "      <td>30</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C   D   F\n",
       "2013-01-01  0.000000  0.000000 -0.479293   5 NaN\n",
       "2013-01-02  2.570323  0.269388  0.080830  10   1\n",
       "2013-01-03  3.083105  1.581635  0.732274  15   3\n",
       "2013-01-04  2.395893 -0.325303 -1.162918  20   6\n",
       "2013-01-05  2.885973 -0.120690 -1.744546  25  10\n",
       "2013-01-06  3.775502  0.682986 -2.731163  30  15"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.apply(np.cumsum)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    3.257535\n",
       "B    3.219185\n",
       "C    2.546635\n",
       "D    0.000000\n",
       "F    4.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.apply(lambda x:x.max()-x.min())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 频数统计"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    5\n",
       "1    6\n",
       "2    3\n",
       "3    5\n",
       "4    3\n",
       "5    3\n",
       "6    4\n",
       "7    4\n",
       "8    0\n",
       "9    0\n",
       "dtype: int32"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series(np.random.randint(0, 7, size=10))\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3    3\n",
       "5    2\n",
       "4    2\n",
       "0    2\n",
       "6    1\n",
       "dtype: int64"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 字符串方法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于Series对象,在其str属性中有着一系列的字符串处理方法。就如同下段代码一样,能很方便的对array中各个元素进行运算。值得注意的是,在str属性中的模式匹配默认使用正则表达式。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       a\n",
       "1       b\n",
       "2       c\n",
       "3    aaba\n",
       "4    baca\n",
       "5     NaN\n",
       "6    caba\n",
       "7     dog\n",
       "8     cat\n",
       "dtype: object"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])\n",
    "s.str.lower()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 合并"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Concat 连接"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "pandas中提供了大量的方法能够轻松对Series,DataFrame和Panel对象进行不同满足逻辑关系的合并操作"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过**concat()**来连接pandas对象"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "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>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.358328</td>\n",
       "      <td>-0.917267</td>\n",
       "      <td>-0.713872</td>\n",
       "      <td>-0.991957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1.002017</td>\n",
       "      <td>0.952365</td>\n",
       "      <td>-0.279115</td>\n",
       "      <td>-1.172856</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.227910</td>\n",
       "      <td>-0.156482</td>\n",
       "      <td>3.245353</td>\n",
       "      <td>0.067354</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.237094</td>\n",
       "      <td>0.309711</td>\n",
       "      <td>-0.863719</td>\n",
       "      <td>-1.871049</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.401347</td>\n",
       "      <td>0.226986</td>\n",
       "      <td>-0.672437</td>\n",
       "      <td>-0.166693</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1.108645</td>\n",
       "      <td>0.272753</td>\n",
       "      <td>-1.281637</td>\n",
       "      <td>0.726997</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.244444</td>\n",
       "      <td>-2.211821</td>\n",
       "      <td>1.943479</td>\n",
       "      <td>-1.098533</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-0.620943</td>\n",
       "      <td>0.710649</td>\n",
       "      <td>-0.180102</td>\n",
       "      <td>-1.144573</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.140132</td>\n",
       "      <td>0.783428</td>\n",
       "      <td>-0.542937</td>\n",
       "      <td>0.177039</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>-1.221415</td>\n",
       "      <td>-0.059672</td>\n",
       "      <td>-2.288082</td>\n",
       "      <td>1.727063</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3\n",
       "0 -0.358328 -0.917267 -0.713872 -0.991957\n",
       "1 -1.002017  0.952365 -0.279115 -1.172856\n",
       "2  1.227910 -0.156482  3.245353  0.067354\n",
       "3  1.237094  0.309711 -0.863719 -1.871049\n",
       "4 -0.401347  0.226986 -0.672437 -0.166693\n",
       "5  1.108645  0.272753 -1.281637  0.726997\n",
       "6  0.244444 -2.211821  1.943479 -1.098533\n",
       "7 -0.620943  0.710649 -0.180102 -1.144573\n",
       "8  0.140132  0.783428 -0.542937  0.177039\n",
       "9 -1.221415 -0.059672 -2.288082  1.727063"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(10,4))\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[          0         1         2         3\n",
       " 0 -0.358328 -0.917267 -0.713872 -0.991957\n",
       " 1 -1.002017  0.952365 -0.279115 -1.172856\n",
       " 2  1.227910 -0.156482  3.245353  0.067354,\n",
       "           0         1         2         3\n",
       " 3  1.237094  0.309711 -0.863719 -1.871049\n",
       " 4 -0.401347  0.226986 -0.672437 -0.166693\n",
       " 5  1.108645  0.272753 -1.281637  0.726997\n",
       " 6  0.244444 -2.211821  1.943479 -1.098533,\n",
       "           0         1         2         3\n",
       " 7 -0.620943  0.710649 -0.180102 -1.144573\n",
       " 8  0.140132  0.783428 -0.542937  0.177039\n",
       " 9 -1.221415 -0.059672 -2.288082  1.727063]"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#break it into pieces\n",
    "pieces = [df[:3], df[3:7], df[7:]]\n",
    "pieces"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "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>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.358328</td>\n",
       "      <td>-0.917267</td>\n",
       "      <td>-0.713872</td>\n",
       "      <td>-0.991957</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1.002017</td>\n",
       "      <td>0.952365</td>\n",
       "      <td>-0.279115</td>\n",
       "      <td>-1.172856</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.227910</td>\n",
       "      <td>-0.156482</td>\n",
       "      <td>3.245353</td>\n",
       "      <td>0.067354</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.237094</td>\n",
       "      <td>0.309711</td>\n",
       "      <td>-0.863719</td>\n",
       "      <td>-1.871049</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.401347</td>\n",
       "      <td>0.226986</td>\n",
       "      <td>-0.672437</td>\n",
       "      <td>-0.166693</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1.108645</td>\n",
       "      <td>0.272753</td>\n",
       "      <td>-1.281637</td>\n",
       "      <td>0.726997</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.244444</td>\n",
       "      <td>-2.211821</td>\n",
       "      <td>1.943479</td>\n",
       "      <td>-1.098533</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-0.620943</td>\n",
       "      <td>0.710649</td>\n",
       "      <td>-0.180102</td>\n",
       "      <td>-1.144573</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.140132</td>\n",
       "      <td>0.783428</td>\n",
       "      <td>-0.542937</td>\n",
       "      <td>0.177039</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>-1.221415</td>\n",
       "      <td>-0.059672</td>\n",
       "      <td>-2.288082</td>\n",
       "      <td>1.727063</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3\n",
       "0 -0.358328 -0.917267 -0.713872 -0.991957\n",
       "1 -1.002017  0.952365 -0.279115 -1.172856\n",
       "2  1.227910 -0.156482  3.245353  0.067354\n",
       "3  1.237094  0.309711 -0.863719 -1.871049\n",
       "4 -0.401347  0.226986 -0.672437 -0.166693\n",
       "5  1.108645  0.272753 -1.281637  0.726997\n",
       "6  0.244444 -2.211821  1.943479 -1.098533\n",
       "7 -0.620943  0.710649 -0.180102 -1.144573\n",
       "8  0.140132  0.783428 -0.542937  0.177039\n",
       "9 -1.221415 -0.059672 -2.288082  1.727063"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.concat(pieces)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Join 合并"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "类似于SQL中的合并(merge)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "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>key</th>\n",
       "      <th>lval</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>foo</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   key  lval\n",
       "0  foo     1\n",
       "1  foo     2"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "left = pd.DataFrame({'key':['foo', 'foo'], 'lval':[1,2]})\n",
    "left"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "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>key</th>\n",
       "      <th>lval</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>foo</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   key  lval\n",
       "0  foo     4\n",
       "1  foo     5"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "right = pd.DataFrame({'key':['foo', 'foo'], 'lval':[4,5]})\n",
    "right"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "      <th>lval_x</th>\n",
       "      <th>lval_y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>foo</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>foo</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>foo</td>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   key  lval_x  lval_y\n",
       "0  foo       1       4\n",
       "1  foo       1       5\n",
       "2  foo       2       4\n",
       "3  foo       2       5"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.merge(left, right, on='key')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Append 添加"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将若干行添加到dataFrame后面"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.547356</td>\n",
       "      <td>-0.885905</td>\n",
       "      <td>-1.791742</td>\n",
       "      <td>1.908368</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.961259</td>\n",
       "      <td>0.825907</td>\n",
       "      <td>1.074854</td>\n",
       "      <td>0.093868</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.782033</td>\n",
       "      <td>-0.914023</td>\n",
       "      <td>1.559572</td>\n",
       "      <td>0.616944</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.353374</td>\n",
       "      <td>-0.484523</td>\n",
       "      <td>-1.730823</td>\n",
       "      <td>2.503638</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.495378</td>\n",
       "      <td>-0.664738</td>\n",
       "      <td>1.192463</td>\n",
       "      <td>-0.900465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.446744</td>\n",
       "      <td>-0.456149</td>\n",
       "      <td>-0.088171</td>\n",
       "      <td>1.450870</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.422372</td>\n",
       "      <td>-2.207023</td>\n",
       "      <td>-1.007185</td>\n",
       "      <td>-0.304415</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2.183043</td>\n",
       "      <td>0.069862</td>\n",
       "      <td>-0.376567</td>\n",
       "      <td>1.403847</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          A         B         C         D\n",
       "0 -0.547356 -0.885905 -1.791742  1.908368\n",
       "1  0.961259  0.825907  1.074854  0.093868\n",
       "2  0.782033 -0.914023  1.559572  0.616944\n",
       "3  0.353374 -0.484523 -1.730823  2.503638\n",
       "4  0.495378 -0.664738  1.192463 -0.900465\n",
       "5  0.446744 -0.456149 -0.088171  1.450870\n",
       "6  0.422372 -2.207023 -1.007185 -0.304415\n",
       "7  2.183043  0.069862 -0.376567  1.403847"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(8, 4), columns=['A', 'B', 'C', 'D'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    0.353374\n",
       "B   -0.484523\n",
       "C   -1.730823\n",
       "D    2.503638\n",
       "Name: 3, dtype: float64"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = df.iloc[3]\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.547356</td>\n",
       "      <td>-0.885905</td>\n",
       "      <td>-1.791742</td>\n",
       "      <td>1.908368</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.961259</td>\n",
       "      <td>0.825907</td>\n",
       "      <td>1.074854</td>\n",
       "      <td>0.093868</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.782033</td>\n",
       "      <td>-0.914023</td>\n",
       "      <td>1.559572</td>\n",
       "      <td>0.616944</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.353374</td>\n",
       "      <td>-0.484523</td>\n",
       "      <td>-1.730823</td>\n",
       "      <td>2.503638</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.495378</td>\n",
       "      <td>-0.664738</td>\n",
       "      <td>1.192463</td>\n",
       "      <td>-0.900465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.446744</td>\n",
       "      <td>-0.456149</td>\n",
       "      <td>-0.088171</td>\n",
       "      <td>1.450870</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.422372</td>\n",
       "      <td>-2.207023</td>\n",
       "      <td>-1.007185</td>\n",
       "      <td>-0.304415</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2.183043</td>\n",
       "      <td>0.069862</td>\n",
       "      <td>-0.376567</td>\n",
       "      <td>1.403847</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.353374</td>\n",
       "      <td>-0.484523</td>\n",
       "      <td>-1.730823</td>\n",
       "      <td>2.503638</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          A         B         C         D\n",
       "0 -0.547356 -0.885905 -1.791742  1.908368\n",
       "1  0.961259  0.825907  1.074854  0.093868\n",
       "2  0.782033 -0.914023  1.559572  0.616944\n",
       "3  0.353374 -0.484523 -1.730823  2.503638\n",
       "4  0.495378 -0.664738  1.192463 -0.900465\n",
       "5  0.446744 -0.456149 -0.088171  1.450870\n",
       "6  0.422372 -2.207023 -1.007185 -0.304415\n",
       "7  2.183043  0.069862 -0.376567  1.403847\n",
       "8  0.353374 -0.484523 -1.730823  2.503638"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.append(s, ignore_index=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 分组"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于“group by”操作,我们通常是指以下一个或几个步骤:\n",
    "* **划分** 按照某些标准将数据分为不同的组\n",
    "* **应用** 对每组数据分别执行一个函数\n",
    "* **组合** 将结果组合到一个数据结构"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>one</td>\n",
       "      <td>1.511832</td>\n",
       "      <td>0.323650</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>bar</td>\n",
       "      <td>one</td>\n",
       "      <td>1.135199</td>\n",
       "      <td>2.046447</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>foo</td>\n",
       "      <td>two</td>\n",
       "      <td>0.048247</td>\n",
       "      <td>-0.250839</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>bar</td>\n",
       "      <td>three</td>\n",
       "      <td>0.232861</td>\n",
       "      <td>-0.827749</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>foo</td>\n",
       "      <td>two</td>\n",
       "      <td>-1.502759</td>\n",
       "      <td>-0.869657</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>bar</td>\n",
       "      <td>two</td>\n",
       "      <td>1.604747</td>\n",
       "      <td>0.072619</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>foo</td>\n",
       "      <td>one</td>\n",
       "      <td>-0.553633</td>\n",
       "      <td>0.388030</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>bar</td>\n",
       "      <td>three</td>\n",
       "      <td>-2.580702</td>\n",
       "      <td>0.546721</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     A      B         C         D\n",
       "0  foo    one  1.511832  0.323650\n",
       "1  bar    one  1.135199  2.046447\n",
       "2  foo    two  0.048247 -0.250839\n",
       "3  bar  three  0.232861 -0.827749\n",
       "4  foo    two -1.502759 -0.869657\n",
       "5  bar    two  1.604747  0.072619\n",
       "6  foo    one -0.553633  0.388030\n",
       "7  bar  three -2.580702  0.546721"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', \n",
    "                          'foo', 'bar', 'foo', 'bar'],\n",
    "                   'B' : ['one', 'one', 'two', 'three', \n",
    "                          'two', 'two', 'one', 'three'],\n",
    "                   'C' : np.random.randn(8),\n",
    "                   'D' : np.random.randn(8)})\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "分组并对每个分组应用sum函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "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>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>bar</th>\n",
       "      <td>0.392104</td>\n",
       "      <td>1.838039</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>foo</th>\n",
       "      <td>-0.496312</td>\n",
       "      <td>-0.408816</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            C         D\n",
       "A                      \n",
       "bar  0.392104  1.838039\n",
       "foo -0.496312 -0.408816"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby('A').sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "按多个列分组形成层级索引,然后应用函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "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></th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">bar</th>\n",
       "      <th>one</th>\n",
       "      <td>1.135199</td>\n",
       "      <td>2.046447</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>three</th>\n",
       "      <td>-2.347841</td>\n",
       "      <td>-0.281028</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>1.604747</td>\n",
       "      <td>0.072619</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">foo</th>\n",
       "      <th>one</th>\n",
       "      <td>0.958199</td>\n",
       "      <td>0.711681</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-1.454511</td>\n",
       "      <td>-1.120496</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  C         D\n",
       "A   B                        \n",
       "bar one    1.135199  2.046447\n",
       "    three -2.347841 -0.281028\n",
       "    two    1.604747  0.072619\n",
       "foo one    0.958199  0.711681\n",
       "    two   -1.454511 -1.120496"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(['A','B']).sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 变形"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 堆叠"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "tuples = list(zip(*[['bar', 'bar', 'baz', 'baz',\n",
    "                     'foo', 'foo', 'qux', 'qux'],\n",
    "                    ['one', 'two', 'one', 'two',\n",
    "                     'one', 'two', 'one', 'two']]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "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></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>first</th>\n",
       "      <th>second</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">bar</th>\n",
       "      <th>one</th>\n",
       "      <td>-0.305811</td>\n",
       "      <td>-0.539703</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>0.214511</td>\n",
       "      <td>0.514641</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">baz</th>\n",
       "      <th>one</th>\n",
       "      <td>-0.208686</td>\n",
       "      <td>-0.686508</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-0.565780</td>\n",
       "      <td>0.945584</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     A         B\n",
       "first second                    \n",
       "bar   one    -0.305811 -0.539703\n",
       "      two     0.214511  0.514641\n",
       "baz   one    -0.208686 -0.686508\n",
       "      two    -0.565780  0.945584"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = df[:4]\n",
    "df2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**stack()**方法对DataFrame的列“压缩”一个层级"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "first  second   \n",
       "bar    one     A   -0.305811\n",
       "               B   -0.539703\n",
       "       two     A    0.214511\n",
       "               B    0.514641\n",
       "baz    one     A   -0.208686\n",
       "               B   -0.686508\n",
       "       two     A   -0.565780\n",
       "               B    0.945584\n",
       "dtype: float64"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stacked = df2.stack()\n",
    "stacked"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于一个“堆叠过的”DataFrame或者Series(拥有MultiIndex作为索引),**stack()**的逆操作是**unstack()**,默认反堆叠到上一个层级"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "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></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>first</th>\n",
       "      <th>second</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">bar</th>\n",
       "      <th>one</th>\n",
       "      <td>-0.305811</td>\n",
       "      <td>-0.539703</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>0.214511</td>\n",
       "      <td>0.514641</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">baz</th>\n",
       "      <th>one</th>\n",
       "      <td>-0.208686</td>\n",
       "      <td>-0.686508</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-0.565780</td>\n",
       "      <td>0.945584</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     A         B\n",
       "first second                    \n",
       "bar   one    -0.305811 -0.539703\n",
       "      two     0.214511  0.514641\n",
       "baz   one    -0.208686 -0.686508\n",
       "      two    -0.565780  0.945584"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stacked.unstack()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "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>second</th>\n",
       "      <th>one</th>\n",
       "      <th>two</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>first</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">bar</th>\n",
       "      <th>A</th>\n",
       "      <td>-0.305811</td>\n",
       "      <td>0.214511</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>-0.539703</td>\n",
       "      <td>0.514641</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">baz</th>\n",
       "      <th>A</th>\n",
       "      <td>-0.208686</td>\n",
       "      <td>-0.565780</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>-0.686508</td>\n",
       "      <td>0.945584</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "second        one       two\n",
       "first                      \n",
       "bar   A -0.305811  0.214511\n",
       "      B -0.539703  0.514641\n",
       "baz   A -0.208686 -0.565780\n",
       "      B -0.686508  0.945584"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stacked.unstack(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "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>first</th>\n",
       "      <th>bar</th>\n",
       "      <th>baz</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>second</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">one</th>\n",
       "      <th>A</th>\n",
       "      <td>-0.305811</td>\n",
       "      <td>-0.208686</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>-0.539703</td>\n",
       "      <td>-0.686508</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">two</th>\n",
       "      <th>A</th>\n",
       "      <td>0.214511</td>\n",
       "      <td>-0.565780</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0.514641</td>\n",
       "      <td>0.945584</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "first          bar       baz\n",
       "second                      \n",
       "one    A -0.305811 -0.208686\n",
       "       B -0.539703 -0.686508\n",
       "two    A  0.214511 -0.565780\n",
       "       B  0.514641  0.945584"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stacked.unstack(0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据透视表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>one</td>\n",
       "      <td>A</td>\n",
       "      <td>foo</td>\n",
       "      <td>-0.560128</td>\n",
       "      <td>0.607515</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>one</td>\n",
       "      <td>B</td>\n",
       "      <td>foo</td>\n",
       "      <td>0.749692</td>\n",
       "      <td>-0.470557</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>two</td>\n",
       "      <td>C</td>\n",
       "      <td>foo</td>\n",
       "      <td>1.239602</td>\n",
       "      <td>1.378625</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>three</td>\n",
       "      <td>A</td>\n",
       "      <td>bar</td>\n",
       "      <td>0.706071</td>\n",
       "      <td>-0.614495</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>one</td>\n",
       "      <td>B</td>\n",
       "      <td>bar</td>\n",
       "      <td>1.304376</td>\n",
       "      <td>-1.128074</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>one</td>\n",
       "      <td>C</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.901451</td>\n",
       "      <td>-0.220037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>two</td>\n",
       "      <td>A</td>\n",
       "      <td>foo</td>\n",
       "      <td>-0.685465</td>\n",
       "      <td>-0.174906</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>three</td>\n",
       "      <td>B</td>\n",
       "      <td>foo</td>\n",
       "      <td>-0.224895</td>\n",
       "      <td>0.156997</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>one</td>\n",
       "      <td>C</td>\n",
       "      <td>foo</td>\n",
       "      <td>-1.722116</td>\n",
       "      <td>0.761828</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>one</td>\n",
       "      <td>A</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.337629</td>\n",
       "      <td>1.093555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>two</td>\n",
       "      <td>B</td>\n",
       "      <td>bar</td>\n",
       "      <td>-1.343353</td>\n",
       "      <td>0.797256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>three</td>\n",
       "      <td>C</td>\n",
       "      <td>bar</td>\n",
       "      <td>0.573971</td>\n",
       "      <td>-0.930710</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        A  B    C         D         E\n",
       "0     one  A  foo -0.560128  0.607515\n",
       "1     one  B  foo  0.749692 -0.470557\n",
       "2     two  C  foo  1.239602  1.378625\n",
       "3   three  A  bar  0.706071 -0.614495\n",
       "4     one  B  bar  1.304376 -1.128074\n",
       "5     one  C  bar -0.901451 -0.220037\n",
       "6     two  A  foo -0.685465 -0.174906\n",
       "7   three  B  foo -0.224895  0.156997\n",
       "8     one  C  foo -1.722116  0.761828\n",
       "9     one  A  bar -0.337629  1.093555\n",
       "10    two  B  bar -1.343353  0.797256\n",
       "11  three  C  bar  0.573971 -0.930710"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 3,\n",
    "                   'B' : ['A', 'B', 'C'] * 4,\n",
    "                   'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,\n",
    "                   'D' : np.random.randn(12),\n",
    "                   'E' : np.random.randn(12)})\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " 我们可以轻松地从这个数据得到透视表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "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>C</th>\n",
       "      <th>bar</th>\n",
       "      <th>foo</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">one</th>\n",
       "      <th>A</th>\n",
       "      <td>-0.337629</td>\n",
       "      <td>-0.560128</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>1.304376</td>\n",
       "      <td>0.749692</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>-0.901451</td>\n",
       "      <td>-1.722116</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">three</th>\n",
       "      <th>A</th>\n",
       "      <td>0.706071</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.224895</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>0.573971</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">two</th>\n",
       "      <th>A</th>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.685465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>-1.343353</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>NaN</td>\n",
       "      <td>1.239602</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "C             bar       foo\n",
       "A     B                    \n",
       "one   A -0.337629 -0.560128\n",
       "      B  1.304376  0.749692\n",
       "      C -0.901451 -1.722116\n",
       "three A  0.706071       NaN\n",
       "      B       NaN -0.224895\n",
       "      C  0.573971       NaN\n",
       "two   A       NaN -0.685465\n",
       "      B -1.343353       NaN\n",
       "      C       NaN  1.239602"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 时间序列"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "pandas在对频率转换进行重新采样时拥有着简单,强大而且高效的功能(例如把按秒采样的数据转换为按5分钟采样的数据)。这在金融领域很常见,但又不限于此。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2012-01-01 00:00:00', '2012-01-01 00:00:01',\n",
       "               '2012-01-01 00:00:02', '2012-01-01 00:00:03',\n",
       "               '2012-01-01 00:00:04', '2012-01-01 00:00:05',\n",
       "               '2012-01-01 00:00:06', '2012-01-01 00:00:07',\n",
       "               '2012-01-01 00:00:08', '2012-01-01 00:00:09',\n",
       "               '2012-01-01 00:00:10', '2012-01-01 00:00:11',\n",
       "               '2012-01-01 00:00:12', '2012-01-01 00:00:13',\n",
       "               '2012-01-01 00:00:14', '2012-01-01 00:00:15',\n",
       "               '2012-01-01 00:00:16', '2012-01-01 00:00:17',\n",
       "               '2012-01-01 00:00:18', '2012-01-01 00:00:19',\n",
       "               '2012-01-01 00:00:20', '2012-01-01 00:00:21',\n",
       "               '2012-01-01 00:00:22', '2012-01-01 00:00:23',\n",
       "               '2012-01-01 00:00:24', '2012-01-01 00:00:25',\n",
       "               '2012-01-01 00:00:26', '2012-01-01 00:00:27',\n",
       "               '2012-01-01 00:00:28', '2012-01-01 00:00:29',\n",
       "               '2012-01-01 00:00:30', '2012-01-01 00:00:31',\n",
       "               '2012-01-01 00:00:32', '2012-01-01 00:00:33',\n",
       "               '2012-01-01 00:00:34', '2012-01-01 00:00:35',\n",
       "               '2012-01-01 00:00:36', '2012-01-01 00:00:37',\n",
       "               '2012-01-01 00:00:38', '2012-01-01 00:00:39',\n",
       "               '2012-01-01 00:00:40', '2012-01-01 00:00:41',\n",
       "               '2012-01-01 00:00:42', '2012-01-01 00:00:43',\n",
       "               '2012-01-01 00:00:44', '2012-01-01 00:00:45',\n",
       "               '2012-01-01 00:00:46', '2012-01-01 00:00:47',\n",
       "               '2012-01-01 00:00:48', '2012-01-01 00:00:49',\n",
       "               '2012-01-01 00:00:50', '2012-01-01 00:00:51',\n",
       "               '2012-01-01 00:00:52', '2012-01-01 00:00:53',\n",
       "               '2012-01-01 00:00:54', '2012-01-01 00:00:55',\n",
       "               '2012-01-01 00:00:56', '2012-01-01 00:00:57',\n",
       "               '2012-01-01 00:00:58', '2012-01-01 00:00:59',\n",
       "               '2012-01-01 00:01:00', '2012-01-01 00:01:01',\n",
       "               '2012-01-01 00:01:02', '2012-01-01 00:01:03',\n",
       "               '2012-01-01 00:01:04', '2012-01-01 00:01:05',\n",
       "               '2012-01-01 00:01:06', '2012-01-01 00:01:07',\n",
       "               '2012-01-01 00:01:08', '2012-01-01 00:01:09',\n",
       "               '2012-01-01 00:01:10', '2012-01-01 00:01:11',\n",
       "               '2012-01-01 00:01:12', '2012-01-01 00:01:13',\n",
       "               '2012-01-01 00:01:14', '2012-01-01 00:01:15',\n",
       "               '2012-01-01 00:01:16', '2012-01-01 00:01:17',\n",
       "               '2012-01-01 00:01:18', '2012-01-01 00:01:19',\n",
       "               '2012-01-01 00:01:20', '2012-01-01 00:01:21',\n",
       "               '2012-01-01 00:01:22', '2012-01-01 00:01:23',\n",
       "               '2012-01-01 00:01:24', '2012-01-01 00:01:25',\n",
       "               '2012-01-01 00:01:26', '2012-01-01 00:01:27',\n",
       "               '2012-01-01 00:01:28', '2012-01-01 00:01:29',\n",
       "               '2012-01-01 00:01:30', '2012-01-01 00:01:31',\n",
       "               '2012-01-01 00:01:32', '2012-01-01 00:01:33',\n",
       "               '2012-01-01 00:01:34', '2012-01-01 00:01:35',\n",
       "               '2012-01-01 00:01:36', '2012-01-01 00:01:37',\n",
       "               '2012-01-01 00:01:38', '2012-01-01 00:01:39'],\n",
       "              dtype='datetime64[ns]', freq='S')"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng = pd.date_range('1/1/2012', periods=100, freq='S')\n",
    "rng"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-01-01 00:00:00    292\n",
       "2012-01-01 00:00:01     28\n",
       "2012-01-01 00:00:02    195\n",
       "2012-01-01 00:00:03    340\n",
       "2012-01-01 00:00:04    256\n",
       "2012-01-01 00:00:05    169\n",
       "2012-01-01 00:00:06    362\n",
       "2012-01-01 00:00:07    197\n",
       "2012-01-01 00:00:08    164\n",
       "2012-01-01 00:00:09    437\n",
       "2012-01-01 00:00:10    467\n",
       "2012-01-01 00:00:11     16\n",
       "2012-01-01 00:00:12      2\n",
       "2012-01-01 00:00:13     36\n",
       "2012-01-01 00:00:14    127\n",
       "2012-01-01 00:00:15    171\n",
       "2012-01-01 00:00:16    208\n",
       "2012-01-01 00:00:17    216\n",
       "2012-01-01 00:00:18    487\n",
       "2012-01-01 00:00:19    377\n",
       "2012-01-01 00:00:20     13\n",
       "2012-01-01 00:00:21    444\n",
       "2012-01-01 00:00:22    180\n",
       "2012-01-01 00:00:23    262\n",
       "2012-01-01 00:00:24    422\n",
       "2012-01-01 00:00:25    297\n",
       "2012-01-01 00:00:26    234\n",
       "2012-01-01 00:00:27    252\n",
       "2012-01-01 00:00:28     31\n",
       "2012-01-01 00:00:29    303\n",
       "                      ... \n",
       "2012-01-01 00:01:10    483\n",
       "2012-01-01 00:01:11    410\n",
       "2012-01-01 00:01:12    254\n",
       "2012-01-01 00:01:13    357\n",
       "2012-01-01 00:01:14    468\n",
       "2012-01-01 00:01:15    243\n",
       "2012-01-01 00:01:16    458\n",
       "2012-01-01 00:01:17    446\n",
       "2012-01-01 00:01:18    310\n",
       "2012-01-01 00:01:19    276\n",
       "2012-01-01 00:01:20    223\n",
       "2012-01-01 00:01:21    231\n",
       "2012-01-01 00:01:22    340\n",
       "2012-01-01 00:01:23    355\n",
       "2012-01-01 00:01:24    227\n",
       "2012-01-01 00:01:25    172\n",
       "2012-01-01 00:01:26    111\n",
       "2012-01-01 00:01:27     33\n",
       "2012-01-01 00:01:28    138\n",
       "2012-01-01 00:01:29    150\n",
       "2012-01-01 00:01:30    313\n",
       "2012-01-01 00:01:31    278\n",
       "2012-01-01 00:01:32    126\n",
       "2012-01-01 00:01:33    119\n",
       "2012-01-01 00:01:34    409\n",
       "2012-01-01 00:01:35      5\n",
       "2012-01-01 00:01:36    307\n",
       "2012-01-01 00:01:37    397\n",
       "2012-01-01 00:01:38    142\n",
       "2012-01-01 00:01:39    236\n",
       "Freq: S, dtype: int32"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = pd.Series(np.random.randint(0,500,len(rng)), index=rng)\n",
    "ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-01-01    25778\n",
       "Freq: 5T, dtype: int32"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.resample('5Min', how='sum')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "时区表示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2012-03-06', '2012-03-07', '2012-03-08', '2012-03-09',\n",
       "               '2012-03-10'],\n",
       "              dtype='datetime64[ns]', freq='D')"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng = pd.date_range('3/6/2012', periods=5, freq='D')\n",
    "rng"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-03-06    1.883053\n",
       "2012-03-07    1.657763\n",
       "2012-03-08    0.676596\n",
       "2012-03-09    0.477890\n",
       "2012-03-10   -0.566615\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = pd.Series(np.random.randn(len(rng)), index=rng)\n",
    "ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-03-06 00:00:00+00:00    1.883053\n",
       "2012-03-07 00:00:00+00:00    1.657763\n",
       "2012-03-08 00:00:00+00:00    0.676596\n",
       "2012-03-09 00:00:00+00:00    0.477890\n",
       "2012-03-10 00:00:00+00:00   -0.566615\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts_utc = ts.tz_localize('UTC')\n",
    "ts_utc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "时区转换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-03-05 19:00:00-05:00    1.883053\n",
       "2012-03-06 19:00:00-05:00    1.657763\n",
       "2012-03-07 19:00:00-05:00    0.676596\n",
       "2012-03-08 19:00:00-05:00    0.477890\n",
       "2012-03-09 19:00:00-05:00   -0.566615\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts_utc.tz_convert('US/Eastern')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "时间跨度转换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2012-01-31', '2012-02-29', '2012-03-31', '2012-04-30',\n",
       "               '2012-05-31'],\n",
       "              dtype='datetime64[ns]', freq='M')"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng = pd.date_range('1/1/2012', periods=5, freq='M')\n",
    "rng"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-01-31    0.569720\n",
       "2012-02-29    2.055821\n",
       "2012-03-31   -0.850667\n",
       "2012-04-30    1.895128\n",
       "2012-05-31    2.204973\n",
       "Freq: M, dtype: float64"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = pd.Series(np.random.randn(len(rng)), index=rng)\n",
    "ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-01    0.569720\n",
       "2012-02    2.055821\n",
       "2012-03   -0.850667\n",
       "2012-04    1.895128\n",
       "2012-05    2.204973\n",
       "Freq: M, dtype: float64"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ps = ts.to_period()\n",
    "ps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-01-01    0.569720\n",
       "2012-02-01    2.055821\n",
       "2012-03-01   -0.850667\n",
       "2012-04-01    1.895128\n",
       "2012-05-01    2.204973\n",
       "Freq: MS, dtype: float64"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ps.to_timestamp()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "日期与时间戳之间的转换使得可以使用一些方便的算术函数。例如,我们把以11月为年底的季度数据转换为当前季度末月底为始的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PeriodIndex(['1990Q1', '1990Q2', '1990Q3', '1990Q4', '1991Q1', '1991Q2',\n",
       "             '1991Q3', '1991Q4', '1992Q1', '1992Q2', '1992Q3', '1992Q4',\n",
       "             '1993Q1', '1993Q2', '1993Q3', '1993Q4', '1994Q1', '1994Q2',\n",
       "             '1994Q3', '1994Q4', '1995Q1', '1995Q2', '1995Q3', '1995Q4',\n",
       "             '1996Q1', '1996Q2', '1996Q3', '1996Q4', '1997Q1', '1997Q2',\n",
       "             '1997Q3', '1997Q4', '1998Q1', '1998Q2', '1998Q3', '1998Q4',\n",
       "             '1999Q1', '1999Q2', '1999Q3', '1999Q4', '2000Q1', '2000Q2',\n",
       "             '2000Q3', '2000Q4'],\n",
       "            dtype='int64', freq='Q-NOV')"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prng = pd.period_range('1990Q1', '2000Q4', freq='Q-NOV')\n",
    "prng"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1990Q1    1.219483\n",
       "1990Q2    0.295619\n",
       "1990Q3    2.177954\n",
       "1990Q4    0.437791\n",
       "1991Q1   -1.150226\n",
       "1991Q2   -0.155793\n",
       "1991Q3   -0.899163\n",
       "1991Q4    1.108673\n",
       "1992Q1   -0.189505\n",
       "1992Q2   -0.919934\n",
       "1992Q3   -2.593031\n",
       "1992Q4    0.184326\n",
       "1993Q1    0.822122\n",
       "1993Q2   -2.534715\n",
       "1993Q3   -0.482651\n",
       "1993Q4    0.234846\n",
       "1994Q1   -1.038624\n",
       "1994Q2   -1.985862\n",
       "1994Q3    1.445492\n",
       "1994Q4    1.325495\n",
       "1995Q1   -0.823989\n",
       "1995Q2   -0.633812\n",
       "1995Q3   -0.572880\n",
       "1995Q4    0.426740\n",
       "1996Q1    0.411217\n",
       "1996Q2   -0.676600\n",
       "1996Q3   -1.350879\n",
       "1996Q4   -1.557402\n",
       "1997Q1   -0.302270\n",
       "1997Q2    1.077077\n",
       "1997Q3   -0.187689\n",
       "1997Q4   -0.102634\n",
       "1998Q1    0.038094\n",
       "1998Q2   -1.321694\n",
       "1998Q3   -2.049545\n",
       "1998Q4    0.205804\n",
       "1999Q1    0.627608\n",
       "1999Q2    2.099334\n",
       "1999Q3    1.490896\n",
       "1999Q4   -0.652193\n",
       "2000Q1    0.408912\n",
       "2000Q2   -1.426349\n",
       "2000Q3    0.038938\n",
       "2000Q4   -1.118917\n",
       "Freq: Q-NOV, dtype: float64"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = pd.Series(np.random.randn(len(prng)), index = prng)\n",
    "ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1990-02-01 09:00    1.219483\n",
       "1990-05-01 09:00    0.295619\n",
       "1990-08-01 09:00    2.177954\n",
       "1990-11-01 09:00    0.437791\n",
       "1991-02-01 09:00   -1.150226\n",
       "1991-05-01 09:00   -0.155793\n",
       "1991-08-01 09:00   -0.899163\n",
       "1991-11-01 09:00    1.108673\n",
       "1992-02-01 09:00   -0.189505\n",
       "1992-05-01 09:00   -0.919934\n",
       "1992-08-01 09:00   -2.593031\n",
       "1992-11-01 09:00    0.184326\n",
       "1993-02-01 09:00    0.822122\n",
       "1993-05-01 09:00   -2.534715\n",
       "1993-08-01 09:00   -0.482651\n",
       "1993-11-01 09:00    0.234846\n",
       "1994-02-01 09:00   -1.038624\n",
       "1994-05-01 09:00   -1.985862\n",
       "1994-08-01 09:00    1.445492\n",
       "1994-11-01 09:00    1.325495\n",
       "1995-02-01 09:00   -0.823989\n",
       "1995-05-01 09:00   -0.633812\n",
       "1995-08-01 09:00   -0.572880\n",
       "1995-11-01 09:00    0.426740\n",
       "1996-02-01 09:00    0.411217\n",
       "1996-05-01 09:00   -0.676600\n",
       "1996-08-01 09:00   -1.350879\n",
       "1996-11-01 09:00   -1.557402\n",
       "1997-02-01 09:00   -0.302270\n",
       "1997-05-01 09:00    1.077077\n",
       "1997-08-01 09:00   -0.187689\n",
       "1997-11-01 09:00   -0.102634\n",
       "1998-02-01 09:00    0.038094\n",
       "1998-05-01 09:00   -1.321694\n",
       "1998-08-01 09:00   -2.049545\n",
       "1998-11-01 09:00    0.205804\n",
       "1999-02-01 09:00    0.627608\n",
       "1999-05-01 09:00    2.099334\n",
       "1999-08-01 09:00    1.490896\n",
       "1999-11-01 09:00   -0.652193\n",
       "2000-02-01 09:00    0.408912\n",
       "2000-05-01 09:00   -1.426349\n",
       "2000-08-01 09:00    0.038938\n",
       "2000-11-01 09:00   -1.118917\n",
       "Freq: H, dtype: float64"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.index = (prng.asfreq('M', 'end') ) .asfreq('H', 'start') +9\n",
    "ts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 分类"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从版本0.15开始,pandas在**DataFrame**中开始包括分类数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "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>id</th>\n",
       "      <th>raw_grade</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>e</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>e</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id raw_grade\n",
       "0   1         a\n",
       "1   2         b\n",
       "2   3         b\n",
       "3   4         a\n",
       "4   5         e\n",
       "5   6         e"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\"id\":[1,2,3,4,5,6], \"raw_grade\":['a', 'b', 'b', 'a', 'e', 'e']})\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "把raw_grade转换为分类类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    a\n",
       "1    b\n",
       "2    b\n",
       "3    a\n",
       "4    e\n",
       "5    e\n",
       "Name: grade, dtype: category\n",
       "Categories (3, object): [a, b, e]"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"grade\"] = df[\"raw_grade\"].astype(\"category\")\n",
    "df[\"grade\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "重命名类别名为更有意义的名称"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df[\"grade\"].cat.categories = [\"very good\", \"good\", \"very bad\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对分类重新排序,并添加缺失的分类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    very good\n",
       "1         good\n",
       "2         good\n",
       "3    very good\n",
       "4     very bad\n",
       "5     very bad\n",
       "Name: grade, dtype: category\n",
       "Categories (5, object): [very bad, bad, medium, good, very good]"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"grade\"] = df[\"grade\"].cat.set_categories([\"very bad\", \"bad\", \"medium\", \"good\", \"very good\"])\n",
    "df[\"grade\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "排序是按照分类的顺序进行的,而不是字典序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "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>id</th>\n",
       "      <th>raw_grade</th>\n",
       "      <th>grade</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>e</td>\n",
       "      <td>very bad</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>e</td>\n",
       "      <td>very bad</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>b</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>b</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>a</td>\n",
       "      <td>very good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>a</td>\n",
       "      <td>very good</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id raw_grade      grade\n",
       "4   5         e   very bad\n",
       "5   6         e   very bad\n",
       "1   2         b       good\n",
       "2   3         b       good\n",
       "0   1         a  very good\n",
       "3   4         a  very good"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_values(by=\"grade\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "按分类分组时,也会显示空的分类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "grade\n",
       "very bad     2\n",
       "bad          0\n",
       "medium       0\n",
       "good         2\n",
       "very good    2\n",
       "dtype: int64"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(\"grade\").size()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 绘图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x734a170>"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x734a550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))\n",
    "ts = ts.cumsum()\n",
    "ts.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于DataFrame类型,**plot()**能很方便地画出所有列及其标签"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7449b30>"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7470990>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x74499b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=['A', 'B', 'C', 'D'])\n",
    "df = df.cumsum()\n",
    "plt.figure(); df.plot(); plt.legend(loc='best')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 获取数据的I/O"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## CSV"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "写入一个csv文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df.to_csv('foo.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从一个csv文件读入"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2000-01-01</td>\n",
       "      <td>-0.871715</td>\n",
       "      <td>0.889797</td>\n",
       "      <td>-0.452757</td>\n",
       "      <td>-0.065875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2000-01-02</td>\n",
       "      <td>1.030719</td>\n",
       "      <td>0.982527</td>\n",
       "      <td>-0.632324</td>\n",
       "      <td>0.453500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2000-01-03</td>\n",
       "      <td>0.634178</td>\n",
       "      <td>1.389564</td>\n",
       "      <td>-0.497967</td>\n",
       "      <td>-0.269316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2000-01-04</td>\n",
       "      <td>1.018194</td>\n",
       "      <td>1.176338</td>\n",
       "      <td>-0.024616</td>\n",
       "      <td>0.013515</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2000-01-05</td>\n",
       "      <td>-0.137956</td>\n",
       "      <td>1.385163</td>\n",
       "      <td>0.930470</td>\n",
       "      <td>-0.698086</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2000-01-06</td>\n",
       "      <td>0.632541</td>\n",
       "      <td>3.757807</td>\n",
       "      <td>1.680543</td>\n",
       "      <td>1.157284</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2000-01-07</td>\n",
       "      <td>-1.037892</td>\n",
       "      <td>5.667231</td>\n",
       "      <td>2.364400</td>\n",
       "      <td>2.170764</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2000-01-08</td>\n",
       "      <td>-1.375110</td>\n",
       "      <td>4.580663</td>\n",
       "      <td>2.251072</td>\n",
       "      <td>3.029680</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2000-01-09</td>\n",
       "      <td>-1.619662</td>\n",
       "      <td>2.636465</td>\n",
       "      <td>3.044900</td>\n",
       "      <td>2.165869</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2000-01-10</td>\n",
       "      <td>-1.454407</td>\n",
       "      <td>1.728391</td>\n",
       "      <td>2.388801</td>\n",
       "      <td>1.033930</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2000-01-11</td>\n",
       "      <td>-1.278744</td>\n",
       "      <td>2.636628</td>\n",
       "      <td>2.462172</td>\n",
       "      <td>-1.182419</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2000-01-12</td>\n",
       "      <td>-0.749159</td>\n",
       "      <td>2.373619</td>\n",
       "      <td>0.369816</td>\n",
       "      <td>-1.098857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2000-01-13</td>\n",
       "      <td>-2.861463</td>\n",
       "      <td>2.486702</td>\n",
       "      <td>-1.175913</td>\n",
       "      <td>-0.933334</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>2000-01-14</td>\n",
       "      <td>-3.016526</td>\n",
       "      <td>2.839986</td>\n",
       "      <td>-1.220834</td>\n",
       "      <td>-0.309324</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>2000-01-15</td>\n",
       "      <td>-5.812431</td>\n",
       "      <td>2.166957</td>\n",
       "      <td>-3.024841</td>\n",
       "      <td>-1.995853</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>2000-01-16</td>\n",
       "      <td>-4.130502</td>\n",
       "      <td>1.058692</td>\n",
       "      <td>-3.025683</td>\n",
       "      <td>-3.285472</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>2000-01-17</td>\n",
       "      <td>-4.263827</td>\n",
       "      <td>2.202905</td>\n",
       "      <td>-4.321207</td>\n",
       "      <td>-2.821168</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>2000-01-18</td>\n",
       "      <td>-4.419713</td>\n",
       "      <td>2.277186</td>\n",
       "      <td>-4.174866</td>\n",
       "      <td>-2.442312</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>2000-01-19</td>\n",
       "      <td>-5.394437</td>\n",
       "      <td>3.308024</td>\n",
       "      <td>-4.956483</td>\n",
       "      <td>-1.923371</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>2000-01-20</td>\n",
       "      <td>-5.518434</td>\n",
       "      <td>1.931813</td>\n",
       "      <td>-4.448700</td>\n",
       "      <td>-1.844738</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>2000-01-21</td>\n",
       "      <td>-5.176009</td>\n",
       "      <td>2.196225</td>\n",
       "      <td>-4.239499</td>\n",
       "      <td>-1.049110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>2000-01-22</td>\n",
       "      <td>-4.250908</td>\n",
       "      <td>2.425685</td>\n",
       "      <td>-3.327828</td>\n",
       "      <td>-0.440797</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>2000-01-23</td>\n",
       "      <td>-4.945975</td>\n",
       "      <td>2.891497</td>\n",
       "      <td>-3.385393</td>\n",
       "      <td>-0.999570</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>2000-01-24</td>\n",
       "      <td>-4.716341</td>\n",
       "      <td>2.962450</td>\n",
       "      <td>-3.716062</td>\n",
       "      <td>-2.122873</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>2000-01-25</td>\n",
       "      <td>-4.176120</td>\n",
       "      <td>2.519948</td>\n",
       "      <td>-4.070270</td>\n",
       "      <td>-1.461157</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>2000-01-26</td>\n",
       "      <td>-4.448476</td>\n",
       "      <td>4.094472</td>\n",
       "      <td>-4.534445</td>\n",
       "      <td>-2.317750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>2000-01-27</td>\n",
       "      <td>-4.628580</td>\n",
       "      <td>3.880345</td>\n",
       "      <td>-4.375836</td>\n",
       "      <td>-3.585863</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>2000-01-28</td>\n",
       "      <td>-4.436221</td>\n",
       "      <td>4.510596</td>\n",
       "      <td>-5.566178</td>\n",
       "      <td>-3.192768</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>2000-01-29</td>\n",
       "      <td>-4.538204</td>\n",
       "      <td>5.071906</td>\n",
       "      <td>-5.719714</td>\n",
       "      <td>-3.775576</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>2000-01-30</td>\n",
       "      <td>-3.961343</td>\n",
       "      <td>5.942862</td>\n",
       "      <td>-5.084055</td>\n",
       "      <td>-2.717804</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>970</th>\n",
       "      <td>2002-08-28</td>\n",
       "      <td>-22.141846</td>\n",
       "      <td>-21.854787</td>\n",
       "      <td>-9.483933</td>\n",
       "      <td>-14.804906</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>971</th>\n",
       "      <td>2002-08-29</td>\n",
       "      <td>-22.185204</td>\n",
       "      <td>-21.512387</td>\n",
       "      <td>-9.119370</td>\n",
       "      <td>-13.923381</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>972</th>\n",
       "      <td>2002-08-30</td>\n",
       "      <td>-22.527292</td>\n",
       "      <td>-24.563961</td>\n",
       "      <td>-10.784790</td>\n",
       "      <td>-12.652051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>973</th>\n",
       "      <td>2002-08-31</td>\n",
       "      <td>-21.959430</td>\n",
       "      <td>-24.551227</td>\n",
       "      <td>-11.284436</td>\n",
       "      <td>-13.109942</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>974</th>\n",
       "      <td>2002-09-01</td>\n",
       "      <td>-21.625881</td>\n",
       "      <td>-23.555066</td>\n",
       "      <td>-11.086579</td>\n",
       "      <td>-13.345760</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>975</th>\n",
       "      <td>2002-09-02</td>\n",
       "      <td>-20.256898</td>\n",
       "      <td>-23.482735</td>\n",
       "      <td>-11.263625</td>\n",
       "      <td>-11.804981</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>976</th>\n",
       "      <td>2002-09-03</td>\n",
       "      <td>-20.869041</td>\n",
       "      <td>-22.453604</td>\n",
       "      <td>-12.320104</td>\n",
       "      <td>-12.070209</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>977</th>\n",
       "      <td>2002-09-04</td>\n",
       "      <td>-21.374708</td>\n",
       "      <td>-23.486186</td>\n",
       "      <td>-9.588075</td>\n",
       "      <td>-10.431600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>978</th>\n",
       "      <td>2002-09-05</td>\n",
       "      <td>-22.691639</td>\n",
       "      <td>-24.170321</td>\n",
       "      <td>-8.605713</td>\n",
       "      <td>-9.875439</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>979</th>\n",
       "      <td>2002-09-06</td>\n",
       "      <td>-22.813804</td>\n",
       "      <td>-22.178215</td>\n",
       "      <td>-8.280569</td>\n",
       "      <td>-10.305069</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>980</th>\n",
       "      <td>2002-09-07</td>\n",
       "      <td>-23.016447</td>\n",
       "      <td>-21.328598</td>\n",
       "      <td>-9.360692</td>\n",
       "      <td>-9.642332</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>981</th>\n",
       "      <td>2002-09-08</td>\n",
       "      <td>-22.677555</td>\n",
       "      <td>-21.222574</td>\n",
       "      <td>-10.244785</td>\n",
       "      <td>-8.622022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>982</th>\n",
       "      <td>2002-09-09</td>\n",
       "      <td>-23.511102</td>\n",
       "      <td>-22.179863</td>\n",
       "      <td>-10.482032</td>\n",
       "      <td>-7.145644</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>983</th>\n",
       "      <td>2002-09-10</td>\n",
       "      <td>-21.250224</td>\n",
       "      <td>-23.011550</td>\n",
       "      <td>-10.611333</td>\n",
       "      <td>-7.890854</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>984</th>\n",
       "      <td>2002-09-11</td>\n",
       "      <td>-20.204129</td>\n",
       "      <td>-22.284909</td>\n",
       "      <td>-10.698640</td>\n",
       "      <td>-7.722051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>985</th>\n",
       "      <td>2002-09-12</td>\n",
       "      <td>-21.606134</td>\n",
       "      <td>-22.570158</td>\n",
       "      <td>-10.936326</td>\n",
       "      <td>-7.168786</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>986</th>\n",
       "      <td>2002-09-13</td>\n",
       "      <td>-21.336733</td>\n",
       "      <td>-24.603869</td>\n",
       "      <td>-10.134803</td>\n",
       "      <td>-8.312152</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>987</th>\n",
       "      <td>2002-09-14</td>\n",
       "      <td>-22.253331</td>\n",
       "      <td>-25.016824</td>\n",
       "      <td>-10.627166</td>\n",
       "      <td>-7.513619</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>988</th>\n",
       "      <td>2002-09-15</td>\n",
       "      <td>-20.523770</td>\n",
       "      <td>-23.781222</td>\n",
       "      <td>-12.410802</td>\n",
       "      <td>-8.281121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>989</th>\n",
       "      <td>2002-09-16</td>\n",
       "      <td>-21.869984</td>\n",
       "      <td>-24.817785</td>\n",
       "      <td>-12.844630</td>\n",
       "      <td>-7.699183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>990</th>\n",
       "      <td>2002-09-17</td>\n",
       "      <td>-21.912426</td>\n",
       "      <td>-25.057542</td>\n",
       "      <td>-11.951892</td>\n",
       "      <td>-8.486812</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>991</th>\n",
       "      <td>2002-09-18</td>\n",
       "      <td>-21.722546</td>\n",
       "      <td>-25.881762</td>\n",
       "      <td>-11.320068</td>\n",
       "      <td>-8.623145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>992</th>\n",
       "      <td>2002-09-19</td>\n",
       "      <td>-20.474366</td>\n",
       "      <td>-24.137588</td>\n",
       "      <td>-12.151461</td>\n",
       "      <td>-9.625507</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>993</th>\n",
       "      <td>2002-09-20</td>\n",
       "      <td>-22.934832</td>\n",
       "      <td>-25.287777</td>\n",
       "      <td>-11.061323</td>\n",
       "      <td>-11.695006</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>994</th>\n",
       "      <td>2002-09-21</td>\n",
       "      <td>-24.508572</td>\n",
       "      <td>-23.934989</td>\n",
       "      <td>-10.424987</td>\n",
       "      <td>-13.079831</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>995</th>\n",
       "      <td>2002-09-22</td>\n",
       "      <td>-26.130471</td>\n",
       "      <td>-24.324060</td>\n",
       "      <td>-11.265862</td>\n",
       "      <td>-11.324558</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>996</th>\n",
       "      <td>2002-09-23</td>\n",
       "      <td>-25.928044</td>\n",
       "      <td>-24.035055</td>\n",
       "      <td>-10.924533</td>\n",
       "      <td>-11.071177</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>997</th>\n",
       "      <td>2002-09-24</td>\n",
       "      <td>-26.898126</td>\n",
       "      <td>-24.828889</td>\n",
       "      <td>-10.825060</td>\n",
       "      <td>-9.877738</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>998</th>\n",
       "      <td>2002-09-25</td>\n",
       "      <td>-27.718151</td>\n",
       "      <td>-24.975646</td>\n",
       "      <td>-10.535565</td>\n",
       "      <td>-9.166899</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999</th>\n",
       "      <td>2002-09-26</td>\n",
       "      <td>-28.606014</td>\n",
       "      <td>-24.223275</td>\n",
       "      <td>-10.279136</td>\n",
       "      <td>-10.275953</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1000 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Unnamed: 0          A          B          C          D\n",
       "0    2000-01-01  -0.871715   0.889797  -0.452757  -0.065875\n",
       "1    2000-01-02   1.030719   0.982527  -0.632324   0.453500\n",
       "2    2000-01-03   0.634178   1.389564  -0.497967  -0.269316\n",
       "3    2000-01-04   1.018194   1.176338  -0.024616   0.013515\n",
       "4    2000-01-05  -0.137956   1.385163   0.930470  -0.698086\n",
       "5    2000-01-06   0.632541   3.757807   1.680543   1.157284\n",
       "6    2000-01-07  -1.037892   5.667231   2.364400   2.170764\n",
       "7    2000-01-08  -1.375110   4.580663   2.251072   3.029680\n",
       "8    2000-01-09  -1.619662   2.636465   3.044900   2.165869\n",
       "9    2000-01-10  -1.454407   1.728391   2.388801   1.033930\n",
       "10   2000-01-11  -1.278744   2.636628   2.462172  -1.182419\n",
       "11   2000-01-12  -0.749159   2.373619   0.369816  -1.098857\n",
       "12   2000-01-13  -2.861463   2.486702  -1.175913  -0.933334\n",
       "13   2000-01-14  -3.016526   2.839986  -1.220834  -0.309324\n",
       "14   2000-01-15  -5.812431   2.166957  -3.024841  -1.995853\n",
       "15   2000-01-16  -4.130502   1.058692  -3.025683  -3.285472\n",
       "16   2000-01-17  -4.263827   2.202905  -4.321207  -2.821168\n",
       "17   2000-01-18  -4.419713   2.277186  -4.174866  -2.442312\n",
       "18   2000-01-19  -5.394437   3.308024  -4.956483  -1.923371\n",
       "19   2000-01-20  -5.518434   1.931813  -4.448700  -1.844738\n",
       "20   2000-01-21  -5.176009   2.196225  -4.239499  -1.049110\n",
       "21   2000-01-22  -4.250908   2.425685  -3.327828  -0.440797\n",
       "22   2000-01-23  -4.945975   2.891497  -3.385393  -0.999570\n",
       "23   2000-01-24  -4.716341   2.962450  -3.716062  -2.122873\n",
       "24   2000-01-25  -4.176120   2.519948  -4.070270  -1.461157\n",
       "25   2000-01-26  -4.448476   4.094472  -4.534445  -2.317750\n",
       "26   2000-01-27  -4.628580   3.880345  -4.375836  -3.585863\n",
       "27   2000-01-28  -4.436221   4.510596  -5.566178  -3.192768\n",
       "28   2000-01-29  -4.538204   5.071906  -5.719714  -3.775576\n",
       "29   2000-01-30  -3.961343   5.942862  -5.084055  -2.717804\n",
       "..          ...        ...        ...        ...        ...\n",
       "970  2002-08-28 -22.141846 -21.854787  -9.483933 -14.804906\n",
       "971  2002-08-29 -22.185204 -21.512387  -9.119370 -13.923381\n",
       "972  2002-08-30 -22.527292 -24.563961 -10.784790 -12.652051\n",
       "973  2002-08-31 -21.959430 -24.551227 -11.284436 -13.109942\n",
       "974  2002-09-01 -21.625881 -23.555066 -11.086579 -13.345760\n",
       "975  2002-09-02 -20.256898 -23.482735 -11.263625 -11.804981\n",
       "976  2002-09-03 -20.869041 -22.453604 -12.320104 -12.070209\n",
       "977  2002-09-04 -21.374708 -23.486186  -9.588075 -10.431600\n",
       "978  2002-09-05 -22.691639 -24.170321  -8.605713  -9.875439\n",
       "979  2002-09-06 -22.813804 -22.178215  -8.280569 -10.305069\n",
       "980  2002-09-07 -23.016447 -21.328598  -9.360692  -9.642332\n",
       "981  2002-09-08 -22.677555 -21.222574 -10.244785  -8.622022\n",
       "982  2002-09-09 -23.511102 -22.179863 -10.482032  -7.145644\n",
       "983  2002-09-10 -21.250224 -23.011550 -10.611333  -7.890854\n",
       "984  2002-09-11 -20.204129 -22.284909 -10.698640  -7.722051\n",
       "985  2002-09-12 -21.606134 -22.570158 -10.936326  -7.168786\n",
       "986  2002-09-13 -21.336733 -24.603869 -10.134803  -8.312152\n",
       "987  2002-09-14 -22.253331 -25.016824 -10.627166  -7.513619\n",
       "988  2002-09-15 -20.523770 -23.781222 -12.410802  -8.281121\n",
       "989  2002-09-16 -21.869984 -24.817785 -12.844630  -7.699183\n",
       "990  2002-09-17 -21.912426 -25.057542 -11.951892  -8.486812\n",
       "991  2002-09-18 -21.722546 -25.881762 -11.320068  -8.623145\n",
       "992  2002-09-19 -20.474366 -24.137588 -12.151461  -9.625507\n",
       "993  2002-09-20 -22.934832 -25.287777 -11.061323 -11.695006\n",
       "994  2002-09-21 -24.508572 -23.934989 -10.424987 -13.079831\n",
       "995  2002-09-22 -26.130471 -24.324060 -11.265862 -11.324558\n",
       "996  2002-09-23 -25.928044 -24.035055 -10.924533 -11.071177\n",
       "997  2002-09-24 -26.898126 -24.828889 -10.825060  -9.877738\n",
       "998  2002-09-25 -27.718151 -24.975646 -10.535565  -9.166899\n",
       "999  2002-09-26 -28.606014 -24.223275 -10.279136 -10.275953\n",
       "\n",
       "[1000 rows x 5 columns]"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_csv('foo.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## HDF5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "HDFStores的读写"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "写入一个HDF5 Store"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df.to_hdf('foo.h5', 'df')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从一个HDF5 Store读入"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2000-01-01</th>\n",
       "      <td>-0.871715</td>\n",
       "      <td>0.889797</td>\n",
       "      <td>-0.452757</td>\n",
       "      <td>-0.065875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-02</th>\n",
       "      <td>1.030719</td>\n",
       "      <td>0.982527</td>\n",
       "      <td>-0.632324</td>\n",
       "      <td>0.453500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-03</th>\n",
       "      <td>0.634178</td>\n",
       "      <td>1.389564</td>\n",
       "      <td>-0.497967</td>\n",
       "      <td>-0.269316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-04</th>\n",
       "      <td>1.018194</td>\n",
       "      <td>1.176338</td>\n",
       "      <td>-0.024616</td>\n",
       "      <td>0.013515</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-05</th>\n",
       "      <td>-0.137956</td>\n",
       "      <td>1.385163</td>\n",
       "      <td>0.930470</td>\n",
       "      <td>-0.698086</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-06</th>\n",
       "      <td>0.632541</td>\n",
       "      <td>3.757807</td>\n",
       "      <td>1.680543</td>\n",
       "      <td>1.157284</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-07</th>\n",
       "      <td>-1.037892</td>\n",
       "      <td>5.667231</td>\n",
       "      <td>2.364400</td>\n",
       "      <td>2.170764</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-08</th>\n",
       "      <td>-1.375110</td>\n",
       "      <td>4.580663</td>\n",
       "      <td>2.251072</td>\n",
       "      <td>3.029680</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-09</th>\n",
       "      <td>-1.619662</td>\n",
       "      <td>2.636465</td>\n",
       "      <td>3.044900</td>\n",
       "      <td>2.165869</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-10</th>\n",
       "      <td>-1.454407</td>\n",
       "      <td>1.728391</td>\n",
       "      <td>2.388801</td>\n",
       "      <td>1.033930</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-11</th>\n",
       "      <td>-1.278744</td>\n",
       "      <td>2.636628</td>\n",
       "      <td>2.462172</td>\n",
       "      <td>-1.182419</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-12</th>\n",
       "      <td>-0.749159</td>\n",
       "      <td>2.373619</td>\n",
       "      <td>0.369816</td>\n",
       "      <td>-1.098857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-13</th>\n",
       "      <td>-2.861463</td>\n",
       "      <td>2.486702</td>\n",
       "      <td>-1.175913</td>\n",
       "      <td>-0.933334</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-14</th>\n",
       "      <td>-3.016526</td>\n",
       "      <td>2.839986</td>\n",
       "      <td>-1.220834</td>\n",
       "      <td>-0.309324</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-15</th>\n",
       "      <td>-5.812431</td>\n",
       "      <td>2.166957</td>\n",
       "      <td>-3.024841</td>\n",
       "      <td>-1.995853</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-16</th>\n",
       "      <td>-4.130502</td>\n",
       "      <td>1.058692</td>\n",
       "      <td>-3.025683</td>\n",
       "      <td>-3.285472</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-17</th>\n",
       "      <td>-4.263827</td>\n",
       "      <td>2.202905</td>\n",
       "      <td>-4.321207</td>\n",
       "      <td>-2.821168</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-18</th>\n",
       "      <td>-4.419713</td>\n",
       "      <td>2.277186</td>\n",
       "      <td>-4.174866</td>\n",
       "      <td>-2.442312</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-19</th>\n",
       "      <td>-5.394437</td>\n",
       "      <td>3.308024</td>\n",
       "      <td>-4.956483</td>\n",
       "      <td>-1.923371</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-20</th>\n",
       "      <td>-5.518434</td>\n",
       "      <td>1.931813</td>\n",
       "      <td>-4.448700</td>\n",
       "      <td>-1.844738</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-21</th>\n",
       "      <td>-5.176009</td>\n",
       "      <td>2.196225</td>\n",
       "      <td>-4.239499</td>\n",
       "      <td>-1.049110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-22</th>\n",
       "      <td>-4.250908</td>\n",
       "      <td>2.425685</td>\n",
       "      <td>-3.327828</td>\n",
       "      <td>-0.440797</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-23</th>\n",
       "      <td>-4.945975</td>\n",
       "      <td>2.891497</td>\n",
       "      <td>-3.385393</td>\n",
       "      <td>-0.999570</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-24</th>\n",
       "      <td>-4.716341</td>\n",
       "      <td>2.962450</td>\n",
       "      <td>-3.716062</td>\n",
       "      <td>-2.122873</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-25</th>\n",
       "      <td>-4.176120</td>\n",
       "      <td>2.519948</td>\n",
       "      <td>-4.070270</td>\n",
       "      <td>-1.461157</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-26</th>\n",
       "      <td>-4.448476</td>\n",
       "      <td>4.094472</td>\n",
       "      <td>-4.534445</td>\n",
       "      <td>-2.317750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-27</th>\n",
       "      <td>-4.628580</td>\n",
       "      <td>3.880345</td>\n",
       "      <td>-4.375836</td>\n",
       "      <td>-3.585863</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-28</th>\n",
       "      <td>-4.436221</td>\n",
       "      <td>4.510596</td>\n",
       "      <td>-5.566178</td>\n",
       "      <td>-3.192768</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-29</th>\n",
       "      <td>-4.538204</td>\n",
       "      <td>5.071906</td>\n",
       "      <td>-5.719714</td>\n",
       "      <td>-3.775576</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-30</th>\n",
       "      <td>-3.961343</td>\n",
       "      <td>5.942862</td>\n",
       "      <td>-5.084055</td>\n",
       "      <td>-2.717804</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-08-28</th>\n",
       "      <td>-22.141846</td>\n",
       "      <td>-21.854787</td>\n",
       "      <td>-9.483933</td>\n",
       "      <td>-14.804906</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-08-29</th>\n",
       "      <td>-22.185204</td>\n",
       "      <td>-21.512387</td>\n",
       "      <td>-9.119370</td>\n",
       "      <td>-13.923381</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-08-30</th>\n",
       "      <td>-22.527292</td>\n",
       "      <td>-24.563961</td>\n",
       "      <td>-10.784790</td>\n",
       "      <td>-12.652051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-08-31</th>\n",
       "      <td>-21.959430</td>\n",
       "      <td>-24.551227</td>\n",
       "      <td>-11.284436</td>\n",
       "      <td>-13.109942</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-01</th>\n",
       "      <td>-21.625881</td>\n",
       "      <td>-23.555066</td>\n",
       "      <td>-11.086579</td>\n",
       "      <td>-13.345760</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-02</th>\n",
       "      <td>-20.256898</td>\n",
       "      <td>-23.482735</td>\n",
       "      <td>-11.263625</td>\n",
       "      <td>-11.804981</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-03</th>\n",
       "      <td>-20.869041</td>\n",
       "      <td>-22.453604</td>\n",
       "      <td>-12.320104</td>\n",
       "      <td>-12.070209</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-04</th>\n",
       "      <td>-21.374708</td>\n",
       "      <td>-23.486186</td>\n",
       "      <td>-9.588075</td>\n",
       "      <td>-10.431600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-05</th>\n",
       "      <td>-22.691639</td>\n",
       "      <td>-24.170321</td>\n",
       "      <td>-8.605713</td>\n",
       "      <td>-9.875439</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-06</th>\n",
       "      <td>-22.813804</td>\n",
       "      <td>-22.178215</td>\n",
       "      <td>-8.280569</td>\n",
       "      <td>-10.305069</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-07</th>\n",
       "      <td>-23.016447</td>\n",
       "      <td>-21.328598</td>\n",
       "      <td>-9.360692</td>\n",
       "      <td>-9.642332</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-08</th>\n",
       "      <td>-22.677555</td>\n",
       "      <td>-21.222574</td>\n",
       "      <td>-10.244785</td>\n",
       "      <td>-8.622022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-09</th>\n",
       "      <td>-23.511102</td>\n",
       "      <td>-22.179863</td>\n",
       "      <td>-10.482032</td>\n",
       "      <td>-7.145644</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-10</th>\n",
       "      <td>-21.250224</td>\n",
       "      <td>-23.011550</td>\n",
       "      <td>-10.611333</td>\n",
       "      <td>-7.890854</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-11</th>\n",
       "      <td>-20.204129</td>\n",
       "      <td>-22.284909</td>\n",
       "      <td>-10.698640</td>\n",
       "      <td>-7.722051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-12</th>\n",
       "      <td>-21.606134</td>\n",
       "      <td>-22.570158</td>\n",
       "      <td>-10.936326</td>\n",
       "      <td>-7.168786</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-13</th>\n",
       "      <td>-21.336733</td>\n",
       "      <td>-24.603869</td>\n",
       "      <td>-10.134803</td>\n",
       "      <td>-8.312152</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-14</th>\n",
       "      <td>-22.253331</td>\n",
       "      <td>-25.016824</td>\n",
       "      <td>-10.627166</td>\n",
       "      <td>-7.513619</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-15</th>\n",
       "      <td>-20.523770</td>\n",
       "      <td>-23.781222</td>\n",
       "      <td>-12.410802</td>\n",
       "      <td>-8.281121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-16</th>\n",
       "      <td>-21.869984</td>\n",
       "      <td>-24.817785</td>\n",
       "      <td>-12.844630</td>\n",
       "      <td>-7.699183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-17</th>\n",
       "      <td>-21.912426</td>\n",
       "      <td>-25.057542</td>\n",
       "      <td>-11.951892</td>\n",
       "      <td>-8.486812</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-18</th>\n",
       "      <td>-21.722546</td>\n",
       "      <td>-25.881762</td>\n",
       "      <td>-11.320068</td>\n",
       "      <td>-8.623145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-19</th>\n",
       "      <td>-20.474366</td>\n",
       "      <td>-24.137588</td>\n",
       "      <td>-12.151461</td>\n",
       "      <td>-9.625507</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-20</th>\n",
       "      <td>-22.934832</td>\n",
       "      <td>-25.287777</td>\n",
       "      <td>-11.061323</td>\n",
       "      <td>-11.695006</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-21</th>\n",
       "      <td>-24.508572</td>\n",
       "      <td>-23.934989</td>\n",
       "      <td>-10.424987</td>\n",
       "      <td>-13.079831</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-22</th>\n",
       "      <td>-26.130471</td>\n",
       "      <td>-24.324060</td>\n",
       "      <td>-11.265862</td>\n",
       "      <td>-11.324558</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-23</th>\n",
       "      <td>-25.928044</td>\n",
       "      <td>-24.035055</td>\n",
       "      <td>-10.924533</td>\n",
       "      <td>-11.071177</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-24</th>\n",
       "      <td>-26.898126</td>\n",
       "      <td>-24.828889</td>\n",
       "      <td>-10.825060</td>\n",
       "      <td>-9.877738</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-25</th>\n",
       "      <td>-27.718151</td>\n",
       "      <td>-24.975646</td>\n",
       "      <td>-10.535565</td>\n",
       "      <td>-9.166899</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-26</th>\n",
       "      <td>-28.606014</td>\n",
       "      <td>-24.223275</td>\n",
       "      <td>-10.279136</td>\n",
       "      <td>-10.275953</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1000 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                    A          B          C          D\n",
       "2000-01-01  -0.871715   0.889797  -0.452757  -0.065875\n",
       "2000-01-02   1.030719   0.982527  -0.632324   0.453500\n",
       "2000-01-03   0.634178   1.389564  -0.497967  -0.269316\n",
       "2000-01-04   1.018194   1.176338  -0.024616   0.013515\n",
       "2000-01-05  -0.137956   1.385163   0.930470  -0.698086\n",
       "2000-01-06   0.632541   3.757807   1.680543   1.157284\n",
       "2000-01-07  -1.037892   5.667231   2.364400   2.170764\n",
       "2000-01-08  -1.375110   4.580663   2.251072   3.029680\n",
       "2000-01-09  -1.619662   2.636465   3.044900   2.165869\n",
       "2000-01-10  -1.454407   1.728391   2.388801   1.033930\n",
       "2000-01-11  -1.278744   2.636628   2.462172  -1.182419\n",
       "2000-01-12  -0.749159   2.373619   0.369816  -1.098857\n",
       "2000-01-13  -2.861463   2.486702  -1.175913  -0.933334\n",
       "2000-01-14  -3.016526   2.839986  -1.220834  -0.309324\n",
       "2000-01-15  -5.812431   2.166957  -3.024841  -1.995853\n",
       "2000-01-16  -4.130502   1.058692  -3.025683  -3.285472\n",
       "2000-01-17  -4.263827   2.202905  -4.321207  -2.821168\n",
       "2000-01-18  -4.419713   2.277186  -4.174866  -2.442312\n",
       "2000-01-19  -5.394437   3.308024  -4.956483  -1.923371\n",
       "2000-01-20  -5.518434   1.931813  -4.448700  -1.844738\n",
       "2000-01-21  -5.176009   2.196225  -4.239499  -1.049110\n",
       "2000-01-22  -4.250908   2.425685  -3.327828  -0.440797\n",
       "2000-01-23  -4.945975   2.891497  -3.385393  -0.999570\n",
       "2000-01-24  -4.716341   2.962450  -3.716062  -2.122873\n",
       "2000-01-25  -4.176120   2.519948  -4.070270  -1.461157\n",
       "2000-01-26  -4.448476   4.094472  -4.534445  -2.317750\n",
       "2000-01-27  -4.628580   3.880345  -4.375836  -3.585863\n",
       "2000-01-28  -4.436221   4.510596  -5.566178  -3.192768\n",
       "2000-01-29  -4.538204   5.071906  -5.719714  -3.775576\n",
       "2000-01-30  -3.961343   5.942862  -5.084055  -2.717804\n",
       "...               ...        ...        ...        ...\n",
       "2002-08-28 -22.141846 -21.854787  -9.483933 -14.804906\n",
       "2002-08-29 -22.185204 -21.512387  -9.119370 -13.923381\n",
       "2002-08-30 -22.527292 -24.563961 -10.784790 -12.652051\n",
       "2002-08-31 -21.959430 -24.551227 -11.284436 -13.109942\n",
       "2002-09-01 -21.625881 -23.555066 -11.086579 -13.345760\n",
       "2002-09-02 -20.256898 -23.482735 -11.263625 -11.804981\n",
       "2002-09-03 -20.869041 -22.453604 -12.320104 -12.070209\n",
       "2002-09-04 -21.374708 -23.486186  -9.588075 -10.431600\n",
       "2002-09-05 -22.691639 -24.170321  -8.605713  -9.875439\n",
       "2002-09-06 -22.813804 -22.178215  -8.280569 -10.305069\n",
       "2002-09-07 -23.016447 -21.328598  -9.360692  -9.642332\n",
       "2002-09-08 -22.677555 -21.222574 -10.244785  -8.622022\n",
       "2002-09-09 -23.511102 -22.179863 -10.482032  -7.145644\n",
       "2002-09-10 -21.250224 -23.011550 -10.611333  -7.890854\n",
       "2002-09-11 -20.204129 -22.284909 -10.698640  -7.722051\n",
       "2002-09-12 -21.606134 -22.570158 -10.936326  -7.168786\n",
       "2002-09-13 -21.336733 -24.603869 -10.134803  -8.312152\n",
       "2002-09-14 -22.253331 -25.016824 -10.627166  -7.513619\n",
       "2002-09-15 -20.523770 -23.781222 -12.410802  -8.281121\n",
       "2002-09-16 -21.869984 -24.817785 -12.844630  -7.699183\n",
       "2002-09-17 -21.912426 -25.057542 -11.951892  -8.486812\n",
       "2002-09-18 -21.722546 -25.881762 -11.320068  -8.623145\n",
       "2002-09-19 -20.474366 -24.137588 -12.151461  -9.625507\n",
       "2002-09-20 -22.934832 -25.287777 -11.061323 -11.695006\n",
       "2002-09-21 -24.508572 -23.934989 -10.424987 -13.079831\n",
       "2002-09-22 -26.130471 -24.324060 -11.265862 -11.324558\n",
       "2002-09-23 -25.928044 -24.035055 -10.924533 -11.071177\n",
       "2002-09-24 -26.898126 -24.828889 -10.825060  -9.877738\n",
       "2002-09-25 -27.718151 -24.975646 -10.535565  -9.166899\n",
       "2002-09-26 -28.606014 -24.223275 -10.279136 -10.275953\n",
       "\n",
       "[1000 rows x 4 columns]"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_hdf('foo.h5', 'df')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Excel"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "MS Excel的读写"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "写入一个Excel文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df.to_excel('foo.xlsx', sheet_name='Sheet1')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从一个excel文件读入"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "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>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2000-01-01</th>\n",
       "      <td>-0.871715</td>\n",
       "      <td>0.889797</td>\n",
       "      <td>-0.452757</td>\n",
       "      <td>-0.065875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-02</th>\n",
       "      <td>1.030719</td>\n",
       "      <td>0.982527</td>\n",
       "      <td>-0.632324</td>\n",
       "      <td>0.453500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-03</th>\n",
       "      <td>0.634178</td>\n",
       "      <td>1.389564</td>\n",
       "      <td>-0.497967</td>\n",
       "      <td>-0.269316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-04</th>\n",
       "      <td>1.018194</td>\n",
       "      <td>1.176338</td>\n",
       "      <td>-0.024616</td>\n",
       "      <td>0.013515</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-05</th>\n",
       "      <td>-0.137956</td>\n",
       "      <td>1.385163</td>\n",
       "      <td>0.930470</td>\n",
       "      <td>-0.698086</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-06</th>\n",
       "      <td>0.632541</td>\n",
       "      <td>3.757807</td>\n",
       "      <td>1.680543</td>\n",
       "      <td>1.157284</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-07</th>\n",
       "      <td>-1.037892</td>\n",
       "      <td>5.667231</td>\n",
       "      <td>2.364400</td>\n",
       "      <td>2.170764</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-08</th>\n",
       "      <td>-1.375110</td>\n",
       "      <td>4.580663</td>\n",
       "      <td>2.251072</td>\n",
       "      <td>3.029680</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-09</th>\n",
       "      <td>-1.619662</td>\n",
       "      <td>2.636465</td>\n",
       "      <td>3.044900</td>\n",
       "      <td>2.165869</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-10</th>\n",
       "      <td>-1.454407</td>\n",
       "      <td>1.728391</td>\n",
       "      <td>2.388801</td>\n",
       "      <td>1.033930</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-11</th>\n",
       "      <td>-1.278744</td>\n",
       "      <td>2.636628</td>\n",
       "      <td>2.462172</td>\n",
       "      <td>-1.182419</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-12</th>\n",
       "      <td>-0.749159</td>\n",
       "      <td>2.373619</td>\n",
       "      <td>0.369816</td>\n",
       "      <td>-1.098857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-13</th>\n",
       "      <td>-2.861463</td>\n",
       "      <td>2.486702</td>\n",
       "      <td>-1.175913</td>\n",
       "      <td>-0.933334</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-14</th>\n",
       "      <td>-3.016526</td>\n",
       "      <td>2.839986</td>\n",
       "      <td>-1.220834</td>\n",
       "      <td>-0.309324</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-15</th>\n",
       "      <td>-5.812431</td>\n",
       "      <td>2.166957</td>\n",
       "      <td>-3.024841</td>\n",
       "      <td>-1.995853</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-16</th>\n",
       "      <td>-4.130502</td>\n",
       "      <td>1.058692</td>\n",
       "      <td>-3.025683</td>\n",
       "      <td>-3.285472</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-17</th>\n",
       "      <td>-4.263827</td>\n",
       "      <td>2.202905</td>\n",
       "      <td>-4.321207</td>\n",
       "      <td>-2.821168</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-18</th>\n",
       "      <td>-4.419713</td>\n",
       "      <td>2.277186</td>\n",
       "      <td>-4.174866</td>\n",
       "      <td>-2.442312</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-19</th>\n",
       "      <td>-5.394437</td>\n",
       "      <td>3.308024</td>\n",
       "      <td>-4.956483</td>\n",
       "      <td>-1.923371</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-20</th>\n",
       "      <td>-5.518434</td>\n",
       "      <td>1.931813</td>\n",
       "      <td>-4.448700</td>\n",
       "      <td>-1.844738</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-21</th>\n",
       "      <td>-5.176009</td>\n",
       "      <td>2.196225</td>\n",
       "      <td>-4.239499</td>\n",
       "      <td>-1.049110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-22</th>\n",
       "      <td>-4.250908</td>\n",
       "      <td>2.425685</td>\n",
       "      <td>-3.327828</td>\n",
       "      <td>-0.440797</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-23</th>\n",
       "      <td>-4.945975</td>\n",
       "      <td>2.891497</td>\n",
       "      <td>-3.385393</td>\n",
       "      <td>-0.999570</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-24</th>\n",
       "      <td>-4.716341</td>\n",
       "      <td>2.962450</td>\n",
       "      <td>-3.716062</td>\n",
       "      <td>-2.122873</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-25</th>\n",
       "      <td>-4.176120</td>\n",
       "      <td>2.519948</td>\n",
       "      <td>-4.070270</td>\n",
       "      <td>-1.461157</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-26</th>\n",
       "      <td>-4.448476</td>\n",
       "      <td>4.094472</td>\n",
       "      <td>-4.534445</td>\n",
       "      <td>-2.317750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-27</th>\n",
       "      <td>-4.628580</td>\n",
       "      <td>3.880345</td>\n",
       "      <td>-4.375836</td>\n",
       "      <td>-3.585863</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-28</th>\n",
       "      <td>-4.436221</td>\n",
       "      <td>4.510596</td>\n",
       "      <td>-5.566178</td>\n",
       "      <td>-3.192768</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-29</th>\n",
       "      <td>-4.538204</td>\n",
       "      <td>5.071906</td>\n",
       "      <td>-5.719714</td>\n",
       "      <td>-3.775576</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-30</th>\n",
       "      <td>-3.961343</td>\n",
       "      <td>5.942862</td>\n",
       "      <td>-5.084055</td>\n",
       "      <td>-2.717804</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-08-28</th>\n",
       "      <td>-22.141846</td>\n",
       "      <td>-21.854787</td>\n",
       "      <td>-9.483933</td>\n",
       "      <td>-14.804906</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-08-29</th>\n",
       "      <td>-22.185204</td>\n",
       "      <td>-21.512387</td>\n",
       "      <td>-9.119370</td>\n",
       "      <td>-13.923381</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-08-30</th>\n",
       "      <td>-22.527292</td>\n",
       "      <td>-24.563961</td>\n",
       "      <td>-10.784790</td>\n",
       "      <td>-12.652051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-08-31</th>\n",
       "      <td>-21.959430</td>\n",
       "      <td>-24.551227</td>\n",
       "      <td>-11.284436</td>\n",
       "      <td>-13.109942</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-01</th>\n",
       "      <td>-21.625881</td>\n",
       "      <td>-23.555066</td>\n",
       "      <td>-11.086579</td>\n",
       "      <td>-13.345760</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-02</th>\n",
       "      <td>-20.256898</td>\n",
       "      <td>-23.482735</td>\n",
       "      <td>-11.263625</td>\n",
       "      <td>-11.804981</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-03</th>\n",
       "      <td>-20.869041</td>\n",
       "      <td>-22.453604</td>\n",
       "      <td>-12.320104</td>\n",
       "      <td>-12.070209</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-04</th>\n",
       "      <td>-21.374708</td>\n",
       "      <td>-23.486186</td>\n",
       "      <td>-9.588075</td>\n",
       "      <td>-10.431600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-05</th>\n",
       "      <td>-22.691639</td>\n",
       "      <td>-24.170321</td>\n",
       "      <td>-8.605713</td>\n",
       "      <td>-9.875439</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-06</th>\n",
       "      <td>-22.813804</td>\n",
       "      <td>-22.178215</td>\n",
       "      <td>-8.280569</td>\n",
       "      <td>-10.305069</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-07</th>\n",
       "      <td>-23.016447</td>\n",
       "      <td>-21.328598</td>\n",
       "      <td>-9.360692</td>\n",
       "      <td>-9.642332</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-08</th>\n",
       "      <td>-22.677555</td>\n",
       "      <td>-21.222574</td>\n",
       "      <td>-10.244785</td>\n",
       "      <td>-8.622022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-09</th>\n",
       "      <td>-23.511102</td>\n",
       "      <td>-22.179863</td>\n",
       "      <td>-10.482032</td>\n",
       "      <td>-7.145644</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-10</th>\n",
       "      <td>-21.250224</td>\n",
       "      <td>-23.011550</td>\n",
       "      <td>-10.611333</td>\n",
       "      <td>-7.890854</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-11</th>\n",
       "      <td>-20.204129</td>\n",
       "      <td>-22.284909</td>\n",
       "      <td>-10.698640</td>\n",
       "      <td>-7.722051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-12</th>\n",
       "      <td>-21.606134</td>\n",
       "      <td>-22.570158</td>\n",
       "      <td>-10.936326</td>\n",
       "      <td>-7.168786</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-13</th>\n",
       "      <td>-21.336733</td>\n",
       "      <td>-24.603869</td>\n",
       "      <td>-10.134803</td>\n",
       "      <td>-8.312152</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-14</th>\n",
       "      <td>-22.253331</td>\n",
       "      <td>-25.016824</td>\n",
       "      <td>-10.627166</td>\n",
       "      <td>-7.513619</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-15</th>\n",
       "      <td>-20.523770</td>\n",
       "      <td>-23.781222</td>\n",
       "      <td>-12.410802</td>\n",
       "      <td>-8.281121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-16</th>\n",
       "      <td>-21.869984</td>\n",
       "      <td>-24.817785</td>\n",
       "      <td>-12.844630</td>\n",
       "      <td>-7.699183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-17</th>\n",
       "      <td>-21.912426</td>\n",
       "      <td>-25.057542</td>\n",
       "      <td>-11.951892</td>\n",
       "      <td>-8.486812</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-18</th>\n",
       "      <td>-21.722546</td>\n",
       "      <td>-25.881762</td>\n",
       "      <td>-11.320068</td>\n",
       "      <td>-8.623145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-19</th>\n",
       "      <td>-20.474366</td>\n",
       "      <td>-24.137588</td>\n",
       "      <td>-12.151461</td>\n",
       "      <td>-9.625507</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-20</th>\n",
       "      <td>-22.934832</td>\n",
       "      <td>-25.287777</td>\n",
       "      <td>-11.061323</td>\n",
       "      <td>-11.695006</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-21</th>\n",
       "      <td>-24.508572</td>\n",
       "      <td>-23.934989</td>\n",
       "      <td>-10.424987</td>\n",
       "      <td>-13.079831</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-22</th>\n",
       "      <td>-26.130471</td>\n",
       "      <td>-24.324060</td>\n",
       "      <td>-11.265862</td>\n",
       "      <td>-11.324558</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-23</th>\n",
       "      <td>-25.928044</td>\n",
       "      <td>-24.035055</td>\n",
       "      <td>-10.924533</td>\n",
       "      <td>-11.071177</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-24</th>\n",
       "      <td>-26.898126</td>\n",
       "      <td>-24.828889</td>\n",
       "      <td>-10.825060</td>\n",
       "      <td>-9.877738</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-25</th>\n",
       "      <td>-27.718151</td>\n",
       "      <td>-24.975646</td>\n",
       "      <td>-10.535565</td>\n",
       "      <td>-9.166899</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002-09-26</th>\n",
       "      <td>-28.606014</td>\n",
       "      <td>-24.223275</td>\n",
       "      <td>-10.279136</td>\n",
       "      <td>-10.275953</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1000 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                    A          B          C          D\n",
       "2000-01-01  -0.871715   0.889797  -0.452757  -0.065875\n",
       "2000-01-02   1.030719   0.982527  -0.632324   0.453500\n",
       "2000-01-03   0.634178   1.389564  -0.497967  -0.269316\n",
       "2000-01-04   1.018194   1.176338  -0.024616   0.013515\n",
       "2000-01-05  -0.137956   1.385163   0.930470  -0.698086\n",
       "2000-01-06   0.632541   3.757807   1.680543   1.157284\n",
       "2000-01-07  -1.037892   5.667231   2.364400   2.170764\n",
       "2000-01-08  -1.375110   4.580663   2.251072   3.029680\n",
       "2000-01-09  -1.619662   2.636465   3.044900   2.165869\n",
       "2000-01-10  -1.454407   1.728391   2.388801   1.033930\n",
       "2000-01-11  -1.278744   2.636628   2.462172  -1.182419\n",
       "2000-01-12  -0.749159   2.373619   0.369816  -1.098857\n",
       "2000-01-13  -2.861463   2.486702  -1.175913  -0.933334\n",
       "2000-01-14  -3.016526   2.839986  -1.220834  -0.309324\n",
       "2000-01-15  -5.812431   2.166957  -3.024841  -1.995853\n",
       "2000-01-16  -4.130502   1.058692  -3.025683  -3.285472\n",
       "2000-01-17  -4.263827   2.202905  -4.321207  -2.821168\n",
       "2000-01-18  -4.419713   2.277186  -4.174866  -2.442312\n",
       "2000-01-19  -5.394437   3.308024  -4.956483  -1.923371\n",
       "2000-01-20  -5.518434   1.931813  -4.448700  -1.844738\n",
       "2000-01-21  -5.176009   2.196225  -4.239499  -1.049110\n",
       "2000-01-22  -4.250908   2.425685  -3.327828  -0.440797\n",
       "2000-01-23  -4.945975   2.891497  -3.385393  -0.999570\n",
       "2000-01-24  -4.716341   2.962450  -3.716062  -2.122873\n",
       "2000-01-25  -4.176120   2.519948  -4.070270  -1.461157\n",
       "2000-01-26  -4.448476   4.094472  -4.534445  -2.317750\n",
       "2000-01-27  -4.628580   3.880345  -4.375836  -3.585863\n",
       "2000-01-28  -4.436221   4.510596  -5.566178  -3.192768\n",
       "2000-01-29  -4.538204   5.071906  -5.719714  -3.775576\n",
       "2000-01-30  -3.961343   5.942862  -5.084055  -2.717804\n",
       "...               ...        ...        ...        ...\n",
       "2002-08-28 -22.141846 -21.854787  -9.483933 -14.804906\n",
       "2002-08-29 -22.185204 -21.512387  -9.119370 -13.923381\n",
       "2002-08-30 -22.527292 -24.563961 -10.784790 -12.652051\n",
       "2002-08-31 -21.959430 -24.551227 -11.284436 -13.109942\n",
       "2002-09-01 -21.625881 -23.555066 -11.086579 -13.345760\n",
       "2002-09-02 -20.256898 -23.482735 -11.263625 -11.804981\n",
       "2002-09-03 -20.869041 -22.453604 -12.320104 -12.070209\n",
       "2002-09-04 -21.374708 -23.486186  -9.588075 -10.431600\n",
       "2002-09-05 -22.691639 -24.170321  -8.605713  -9.875439\n",
       "2002-09-06 -22.813804 -22.178215  -8.280569 -10.305069\n",
       "2002-09-07 -23.016447 -21.328598  -9.360692  -9.642332\n",
       "2002-09-08 -22.677555 -21.222574 -10.244785  -8.622022\n",
       "2002-09-09 -23.511102 -22.179863 -10.482032  -7.145644\n",
       "2002-09-10 -21.250224 -23.011550 -10.611333  -7.890854\n",
       "2002-09-11 -20.204129 -22.284909 -10.698640  -7.722051\n",
       "2002-09-12 -21.606134 -22.570158 -10.936326  -7.168786\n",
       "2002-09-13 -21.336733 -24.603869 -10.134803  -8.312152\n",
       "2002-09-14 -22.253331 -25.016824 -10.627166  -7.513619\n",
       "2002-09-15 -20.523770 -23.781222 -12.410802  -8.281121\n",
       "2002-09-16 -21.869984 -24.817785 -12.844630  -7.699183\n",
       "2002-09-17 -21.912426 -25.057542 -11.951892  -8.486812\n",
       "2002-09-18 -21.722546 -25.881762 -11.320068  -8.623145\n",
       "2002-09-19 -20.474366 -24.137588 -12.151461  -9.625507\n",
       "2002-09-20 -22.934832 -25.287777 -11.061323 -11.695006\n",
       "2002-09-21 -24.508572 -23.934989 -10.424987 -13.079831\n",
       "2002-09-22 -26.130471 -24.324060 -11.265862 -11.324558\n",
       "2002-09-23 -25.928044 -24.035055 -10.924533 -11.071177\n",
       "2002-09-24 -26.898126 -24.828889 -10.825060  -9.877738\n",
       "2002-09-25 -27.718151 -24.975646 -10.535565  -9.166899\n",
       "2002-09-26 -28.606014 -24.223275 -10.279136 -10.275953\n",
       "\n",
       "[1000 rows x 4 columns]"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA'])"
   ]
  }
 ],
 "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
}