{
"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": [
""
],
"text/plain": [
""
]
},
"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(''.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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" -0.797290 | \n",
" -0.251394 | \n",
" -0.479293 | \n",
" -1.258262 | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 1.017688 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 1.158869 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
" 1.460285 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.490081 | \n",
" 0.204613 | \n",
" -0.581628 | \n",
" -0.232023 | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" 0.889528 | \n",
" 0.803676 | \n",
" -0.986617 | \n",
" 0.256299 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" E | \n",
" F | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 1 | \n",
" 2013-01-02 | \n",
" 1 | \n",
" 3 | \n",
" test | \n",
" foo | \n",
"
\n",
" \n",
" | 1 | \n",
" 1 | \n",
" 2013-01-02 | \n",
" 1 | \n",
" 3 | \n",
" train | \n",
" foo | \n",
"
\n",
" \n",
" | 2 | \n",
" 1 | \n",
" 2013-01-02 | \n",
" 1 | \n",
" 3 | \n",
" test | \n",
" foo | \n",
"
\n",
" \n",
" | 3 | \n",
" 1 | \n",
" 2013-01-02 | \n",
" 1 | \n",
" 3 | \n",
" train | \n",
" foo | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" -0.797290 | \n",
" -0.251394 | \n",
" -0.479293 | \n",
" -1.258262 | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 1.017688 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 1.158869 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
" 1.460285 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.490081 | \n",
" 0.204613 | \n",
" -0.581628 | \n",
" -0.232023 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
" 1.460285 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.490081 | \n",
" 0.204613 | \n",
" -0.581628 | \n",
" -0.232023 | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" 0.889528 | \n",
" 0.803676 | \n",
" -0.986617 | \n",
" 0.256299 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | count | \n",
" 6.000000 | \n",
" 6.000000 | \n",
" 6.000000 | \n",
" 6.000000 | \n",
"
\n",
" \n",
" | mean | \n",
" 0.496369 | \n",
" 0.071932 | \n",
" -0.455194 | \n",
" 0.400476 | \n",
"
\n",
" \n",
" | std | \n",
" 1.227240 | \n",
" 1.109134 | \n",
" 0.962090 | \n",
" 1.024847 | \n",
"
\n",
" \n",
" | min | \n",
" -0.797290 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
" -1.258262 | \n",
"
\n",
" \n",
" | 25% | \n",
" -0.392889 | \n",
" -0.137392 | \n",
" -0.885370 | \n",
" -0.109943 | \n",
"
\n",
" \n",
" | 50% | \n",
" 0.501431 | \n",
" 0.237001 | \n",
" -0.530461 | \n",
" 0.636994 | \n",
"
\n",
" \n",
" | 75% | \n",
" 0.795342 | \n",
" 0.670104 | \n",
" 0.300269 | \n",
" 1.123574 | \n",
"
\n",
" \n",
" | max | \n",
" 2.570323 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 1.460285 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 2013-01-01 00:00:00 | \n",
" 2013-01-02 00:00:00 | \n",
" 2013-01-03 00:00:00 | \n",
" 2013-01-04 00:00:00 | \n",
" 2013-01-05 00:00:00 | \n",
" 2013-01-06 00:00:00 | \n",
"
\n",
" \n",
" \n",
" \n",
" | A | \n",
" -0.797290 | \n",
" 2.570323 | \n",
" 0.512782 | \n",
" -0.687212 | \n",
" 0.490081 | \n",
" 0.889528 | \n",
"
\n",
" \n",
" | B | \n",
" -0.251394 | \n",
" 0.269388 | \n",
" 1.312247 | \n",
" -1.906938 | \n",
" 0.204613 | \n",
" 0.803676 | \n",
"
\n",
" \n",
" | C | \n",
" -0.479293 | \n",
" 0.560123 | \n",
" 0.651444 | \n",
" -1.895192 | \n",
" -0.581628 | \n",
" -0.986617 | \n",
"
\n",
" \n",
" | D | \n",
" -1.258262 | \n",
" 1.017688 | \n",
" 1.158869 | \n",
" 1.460285 | \n",
" -0.232023 | \n",
" 0.256299 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" D | \n",
" C | \n",
" B | \n",
" A | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" -1.258262 | \n",
" -0.479293 | \n",
" -0.251394 | \n",
" -0.797290 | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 1.017688 | \n",
" 0.560123 | \n",
" 0.269388 | \n",
" 2.570323 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 1.158869 | \n",
" 0.651444 | \n",
" 1.312247 | \n",
" 0.512782 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" 1.460285 | \n",
" -1.895192 | \n",
" -1.906938 | \n",
" -0.687212 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" -0.232023 | \n",
" -0.581628 | \n",
" 0.204613 | \n",
" 0.490081 | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" 0.256299 | \n",
" -0.986617 | \n",
" 0.803676 | \n",
" 0.889528 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
" 1.460285 | \n",
"
\n",
" \n",
" | 2013-01-01 | \n",
" -0.797290 | \n",
" -0.251394 | \n",
" -0.479293 | \n",
" -1.258262 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.490081 | \n",
" 0.204613 | \n",
" -0.581628 | \n",
" -0.232023 | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 1.017688 | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" 0.889528 | \n",
" 0.803676 | \n",
" -0.986617 | \n",
" 0.256299 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 1.158869 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" -0.797290 | \n",
" -0.251394 | \n",
" -0.479293 | \n",
" -1.258262 | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 1.017688 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 1.158869 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 1.017688 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 1.158869 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
" 1.460285 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" -0.797290 | \n",
" -0.251394 | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.490081 | \n",
" 0.204613 | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" 0.889528 | \n",
" 0.803676 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.490081 | \n",
" 0.204613 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 1.017688 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 1.158869 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" B | \n",
" C | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" -0.251394 | \n",
" -0.479293 | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.204613 | \n",
" -0.581628 | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" 0.803676 | \n",
" -0.986617 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 1.017688 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 1.158869 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.490081 | \n",
" 0.204613 | \n",
" -0.581628 | \n",
" -0.232023 | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" 0.889528 | \n",
" 0.803676 | \n",
" -0.986617 | \n",
" 0.256299 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 1.017688 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 1.158869 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" 1.460285 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.490081 | \n",
" 0.204613 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" 0.889528 | \n",
" 0.803676 | \n",
" NaN | \n",
" 0.256299 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" E | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" -0.797290 | \n",
" -0.251394 | \n",
" -0.479293 | \n",
" -1.258262 | \n",
" one | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 1.017688 | \n",
" one | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 1.158869 | \n",
" two | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
" 1.460285 | \n",
" three | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.490081 | \n",
" 0.204613 | \n",
" -0.581628 | \n",
" -0.232023 | \n",
" four | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" 0.889528 | \n",
" 0.803676 | \n",
" -0.986617 | \n",
" 0.256299 | \n",
" three | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" E | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 1.158869 | \n",
" two | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.490081 | \n",
" 0.204613 | \n",
" -0.581628 | \n",
" -0.232023 | \n",
" four | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" F | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" -0.797290 | \n",
" -0.251394 | \n",
" -0.479293 | \n",
" -1.258262 | \n",
" NaN | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 1.017688 | \n",
" 1 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 1.158869 | \n",
" 2 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
" 1.460285 | \n",
" 3 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.490081 | \n",
" 0.204613 | \n",
" -0.581628 | \n",
" -0.232023 | \n",
" 4 | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" 0.889528 | \n",
" 0.803676 | \n",
" -0.986617 | \n",
" 0.256299 | \n",
" 5 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" F | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" 0.000000 | \n",
" -0.251394 | \n",
" -0.479293 | \n",
" -1.258262 | \n",
" NaN | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 1.017688 | \n",
" 1 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 1.158869 | \n",
" 2 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
" 1.460285 | \n",
" 3 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.490081 | \n",
" 0.204613 | \n",
" -0.581628 | \n",
" -0.232023 | \n",
" 4 | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" 0.889528 | \n",
" 0.803676 | \n",
" -0.986617 | \n",
" 0.256299 | \n",
" 5 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" F | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" -0.479293 | \n",
" -1.258262 | \n",
" NaN | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 1.017688 | \n",
" 1 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 1.158869 | \n",
" 2 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
" 1.460285 | \n",
" 3 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.490081 | \n",
" 0.204613 | \n",
" -0.581628 | \n",
" -0.232023 | \n",
" 4 | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" 0.889528 | \n",
" 0.803676 | \n",
" -0.986617 | \n",
" 0.256299 | \n",
" 5 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" F | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" -0.479293 | \n",
" 5 | \n",
" NaN | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 5 | \n",
" 1 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 5 | \n",
" 2 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
" 5 | \n",
" 3 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 0.490081 | \n",
" 0.204613 | \n",
" -0.581628 | \n",
" 5 | \n",
" 4 | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" 0.889528 | \n",
" 0.803676 | \n",
" -0.986617 | \n",
" 5 | \n",
" 5 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" F | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" -0.479293 | \n",
" -5 | \n",
" NaN | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" -2.570323 | \n",
" -0.269388 | \n",
" -0.560123 | \n",
" -5 | \n",
" -1 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" -0.512782 | \n",
" -1.312247 | \n",
" -0.651444 | \n",
" -5 | \n",
" -2 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
" -5 | \n",
" -3 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" -0.490081 | \n",
" -0.204613 | \n",
" -0.581628 | \n",
" -5 | \n",
" -4 | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" -0.889528 | \n",
" -0.803676 | \n",
" -0.986617 | \n",
" -5 | \n",
" -5 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" F | \n",
" E | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" -0.479293 | \n",
" 5 | \n",
" NaN | \n",
" 1 | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 5 | \n",
" 1 | \n",
" 1 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 5 | \n",
" 2 | \n",
" NaN | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
" 5 | \n",
" 3 | \n",
" NaN | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" F | \n",
" E | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 5 | \n",
" 1 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" F | \n",
" E | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" -0.479293 | \n",
" 5 | \n",
" 5 | \n",
" 1 | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.560123 | \n",
" 5 | \n",
" 1 | \n",
" 1 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 0.512782 | \n",
" 1.312247 | \n",
" 0.651444 | \n",
" 5 | \n",
" 2 | \n",
" 5 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -0.687212 | \n",
" -1.906938 | \n",
" -1.895192 | \n",
" 5 | \n",
" 3 | \n",
" 5 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" F | \n",
" E | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" True | \n",
" False | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" True | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" True | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" F | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" -0.487218 | \n",
" 0.312247 | \n",
" -0.348556 | \n",
" 4 | \n",
" 1 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" -3.687212 | \n",
" -4.906938 | \n",
" -4.895192 | \n",
" 2 | \n",
" 0 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" -4.509919 | \n",
" -4.795387 | \n",
" -5.581628 | \n",
" 0 | \n",
" -1 | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" F | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2013-01-01 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" -0.479293 | \n",
" 5 | \n",
" NaN | \n",
"
\n",
" \n",
" | 2013-01-02 | \n",
" 2.570323 | \n",
" 0.269388 | \n",
" 0.080830 | \n",
" 10 | \n",
" 1 | \n",
"
\n",
" \n",
" | 2013-01-03 | \n",
" 3.083105 | \n",
" 1.581635 | \n",
" 0.732274 | \n",
" 15 | \n",
" 3 | \n",
"
\n",
" \n",
" | 2013-01-04 | \n",
" 2.395893 | \n",
" -0.325303 | \n",
" -1.162918 | \n",
" 20 | \n",
" 6 | \n",
"
\n",
" \n",
" | 2013-01-05 | \n",
" 2.885973 | \n",
" -0.120690 | \n",
" -1.744546 | \n",
" 25 | \n",
" 10 | \n",
"
\n",
" \n",
" | 2013-01-06 | \n",
" 3.775502 | \n",
" 0.682986 | \n",
" -2.731163 | \n",
" 30 | \n",
" 15 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" -0.358328 | \n",
" -0.917267 | \n",
" -0.713872 | \n",
" -0.991957 | \n",
"
\n",
" \n",
" | 1 | \n",
" -1.002017 | \n",
" 0.952365 | \n",
" -0.279115 | \n",
" -1.172856 | \n",
"
\n",
" \n",
" | 2 | \n",
" 1.227910 | \n",
" -0.156482 | \n",
" 3.245353 | \n",
" 0.067354 | \n",
"
\n",
" \n",
" | 3 | \n",
" 1.237094 | \n",
" 0.309711 | \n",
" -0.863719 | \n",
" -1.871049 | \n",
"
\n",
" \n",
" | 4 | \n",
" -0.401347 | \n",
" 0.226986 | \n",
" -0.672437 | \n",
" -0.166693 | \n",
"
\n",
" \n",
" | 5 | \n",
" 1.108645 | \n",
" 0.272753 | \n",
" -1.281637 | \n",
" 0.726997 | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.244444 | \n",
" -2.211821 | \n",
" 1.943479 | \n",
" -1.098533 | \n",
"
\n",
" \n",
" | 7 | \n",
" -0.620943 | \n",
" 0.710649 | \n",
" -0.180102 | \n",
" -1.144573 | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.140132 | \n",
" 0.783428 | \n",
" -0.542937 | \n",
" 0.177039 | \n",
"
\n",
" \n",
" | 9 | \n",
" -1.221415 | \n",
" -0.059672 | \n",
" -2.288082 | \n",
" 1.727063 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" -0.358328 | \n",
" -0.917267 | \n",
" -0.713872 | \n",
" -0.991957 | \n",
"
\n",
" \n",
" | 1 | \n",
" -1.002017 | \n",
" 0.952365 | \n",
" -0.279115 | \n",
" -1.172856 | \n",
"
\n",
" \n",
" | 2 | \n",
" 1.227910 | \n",
" -0.156482 | \n",
" 3.245353 | \n",
" 0.067354 | \n",
"
\n",
" \n",
" | 3 | \n",
" 1.237094 | \n",
" 0.309711 | \n",
" -0.863719 | \n",
" -1.871049 | \n",
"
\n",
" \n",
" | 4 | \n",
" -0.401347 | \n",
" 0.226986 | \n",
" -0.672437 | \n",
" -0.166693 | \n",
"
\n",
" \n",
" | 5 | \n",
" 1.108645 | \n",
" 0.272753 | \n",
" -1.281637 | \n",
" 0.726997 | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.244444 | \n",
" -2.211821 | \n",
" 1.943479 | \n",
" -1.098533 | \n",
"
\n",
" \n",
" | 7 | \n",
" -0.620943 | \n",
" 0.710649 | \n",
" -0.180102 | \n",
" -1.144573 | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.140132 | \n",
" 0.783428 | \n",
" -0.542937 | \n",
" 0.177039 | \n",
"
\n",
" \n",
" | 9 | \n",
" -1.221415 | \n",
" -0.059672 | \n",
" -2.288082 | \n",
" 1.727063 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key | \n",
" lval | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" foo | \n",
" 1 | \n",
"
\n",
" \n",
" | 1 | \n",
" foo | \n",
" 2 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key | \n",
" lval | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" foo | \n",
" 4 | \n",
"
\n",
" \n",
" | 1 | \n",
" foo | \n",
" 5 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key | \n",
" lval_x | \n",
" lval_y | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" foo | \n",
" 1 | \n",
" 4 | \n",
"
\n",
" \n",
" | 1 | \n",
" foo | \n",
" 1 | \n",
" 5 | \n",
"
\n",
" \n",
" | 2 | \n",
" foo | \n",
" 2 | \n",
" 4 | \n",
"
\n",
" \n",
" | 3 | \n",
" foo | \n",
" 2 | \n",
" 5 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" -0.547356 | \n",
" -0.885905 | \n",
" -1.791742 | \n",
" 1.908368 | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.961259 | \n",
" 0.825907 | \n",
" 1.074854 | \n",
" 0.093868 | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.782033 | \n",
" -0.914023 | \n",
" 1.559572 | \n",
" 0.616944 | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.353374 | \n",
" -0.484523 | \n",
" -1.730823 | \n",
" 2.503638 | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.495378 | \n",
" -0.664738 | \n",
" 1.192463 | \n",
" -0.900465 | \n",
"
\n",
" \n",
" | 5 | \n",
" 0.446744 | \n",
" -0.456149 | \n",
" -0.088171 | \n",
" 1.450870 | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.422372 | \n",
" -2.207023 | \n",
" -1.007185 | \n",
" -0.304415 | \n",
"
\n",
" \n",
" | 7 | \n",
" 2.183043 | \n",
" 0.069862 | \n",
" -0.376567 | \n",
" 1.403847 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" -0.547356 | \n",
" -0.885905 | \n",
" -1.791742 | \n",
" 1.908368 | \n",
"
\n",
" \n",
" | 1 | \n",
" 0.961259 | \n",
" 0.825907 | \n",
" 1.074854 | \n",
" 0.093868 | \n",
"
\n",
" \n",
" | 2 | \n",
" 0.782033 | \n",
" -0.914023 | \n",
" 1.559572 | \n",
" 0.616944 | \n",
"
\n",
" \n",
" | 3 | \n",
" 0.353374 | \n",
" -0.484523 | \n",
" -1.730823 | \n",
" 2.503638 | \n",
"
\n",
" \n",
" | 4 | \n",
" 0.495378 | \n",
" -0.664738 | \n",
" 1.192463 | \n",
" -0.900465 | \n",
"
\n",
" \n",
" | 5 | \n",
" 0.446744 | \n",
" -0.456149 | \n",
" -0.088171 | \n",
" 1.450870 | \n",
"
\n",
" \n",
" | 6 | \n",
" 0.422372 | \n",
" -2.207023 | \n",
" -1.007185 | \n",
" -0.304415 | \n",
"
\n",
" \n",
" | 7 | \n",
" 2.183043 | \n",
" 0.069862 | \n",
" -0.376567 | \n",
" 1.403847 | \n",
"
\n",
" \n",
" | 8 | \n",
" 0.353374 | \n",
" -0.484523 | \n",
" -1.730823 | \n",
" 2.503638 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" foo | \n",
" one | \n",
" 1.511832 | \n",
" 0.323650 | \n",
"
\n",
" \n",
" | 1 | \n",
" bar | \n",
" one | \n",
" 1.135199 | \n",
" 2.046447 | \n",
"
\n",
" \n",
" | 2 | \n",
" foo | \n",
" two | \n",
" 0.048247 | \n",
" -0.250839 | \n",
"
\n",
" \n",
" | 3 | \n",
" bar | \n",
" three | \n",
" 0.232861 | \n",
" -0.827749 | \n",
"
\n",
" \n",
" | 4 | \n",
" foo | \n",
" two | \n",
" -1.502759 | \n",
" -0.869657 | \n",
"
\n",
" \n",
" | 5 | \n",
" bar | \n",
" two | \n",
" 1.604747 | \n",
" 0.072619 | \n",
"
\n",
" \n",
" | 6 | \n",
" foo | \n",
" one | \n",
" -0.553633 | \n",
" 0.388030 | \n",
"
\n",
" \n",
" | 7 | \n",
" bar | \n",
" three | \n",
" -2.580702 | \n",
" 0.546721 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" | A | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | bar | \n",
" 0.392104 | \n",
" 1.838039 | \n",
"
\n",
" \n",
" | foo | \n",
" -0.496312 | \n",
" -0.408816 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" | A | \n",
" B | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | bar | \n",
" one | \n",
" 1.135199 | \n",
" 2.046447 | \n",
"
\n",
" \n",
" | three | \n",
" -2.347841 | \n",
" -0.281028 | \n",
"
\n",
" \n",
" | two | \n",
" 1.604747 | \n",
" 0.072619 | \n",
"
\n",
" \n",
" | foo | \n",
" one | \n",
" 0.958199 | \n",
" 0.711681 | \n",
"
\n",
" \n",
" | two | \n",
" -1.454511 | \n",
" -1.120496 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" | first | \n",
" second | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | bar | \n",
" one | \n",
" -0.305811 | \n",
" -0.539703 | \n",
"
\n",
" \n",
" | two | \n",
" 0.214511 | \n",
" 0.514641 | \n",
"
\n",
" \n",
" | baz | \n",
" one | \n",
" -0.208686 | \n",
" -0.686508 | \n",
"
\n",
" \n",
" | two | \n",
" -0.565780 | \n",
" 0.945584 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" | first | \n",
" second | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | bar | \n",
" one | \n",
" -0.305811 | \n",
" -0.539703 | \n",
"
\n",
" \n",
" | two | \n",
" 0.214511 | \n",
" 0.514641 | \n",
"
\n",
" \n",
" | baz | \n",
" one | \n",
" -0.208686 | \n",
" -0.686508 | \n",
"
\n",
" \n",
" | two | \n",
" -0.565780 | \n",
" 0.945584 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" second | \n",
" one | \n",
" two | \n",
"
\n",
" \n",
" | first | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | bar | \n",
" A | \n",
" -0.305811 | \n",
" 0.214511 | \n",
"
\n",
" \n",
" | B | \n",
" -0.539703 | \n",
" 0.514641 | \n",
"
\n",
" \n",
" | baz | \n",
" A | \n",
" -0.208686 | \n",
" -0.565780 | \n",
"
\n",
" \n",
" | B | \n",
" -0.686508 | \n",
" 0.945584 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" first | \n",
" bar | \n",
" baz | \n",
"
\n",
" \n",
" | second | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | one | \n",
" A | \n",
" -0.305811 | \n",
" -0.208686 | \n",
"
\n",
" \n",
" | B | \n",
" -0.539703 | \n",
" -0.686508 | \n",
"
\n",
" \n",
" | two | \n",
" A | \n",
" 0.214511 | \n",
" -0.565780 | \n",
"
\n",
" \n",
" | B | \n",
" 0.514641 | \n",
" 0.945584 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" E | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" one | \n",
" A | \n",
" foo | \n",
" -0.560128 | \n",
" 0.607515 | \n",
"
\n",
" \n",
" | 1 | \n",
" one | \n",
" B | \n",
" foo | \n",
" 0.749692 | \n",
" -0.470557 | \n",
"
\n",
" \n",
" | 2 | \n",
" two | \n",
" C | \n",
" foo | \n",
" 1.239602 | \n",
" 1.378625 | \n",
"
\n",
" \n",
" | 3 | \n",
" three | \n",
" A | \n",
" bar | \n",
" 0.706071 | \n",
" -0.614495 | \n",
"
\n",
" \n",
" | 4 | \n",
" one | \n",
" B | \n",
" bar | \n",
" 1.304376 | \n",
" -1.128074 | \n",
"
\n",
" \n",
" | 5 | \n",
" one | \n",
" C | \n",
" bar | \n",
" -0.901451 | \n",
" -0.220037 | \n",
"
\n",
" \n",
" | 6 | \n",
" two | \n",
" A | \n",
" foo | \n",
" -0.685465 | \n",
" -0.174906 | \n",
"
\n",
" \n",
" | 7 | \n",
" three | \n",
" B | \n",
" foo | \n",
" -0.224895 | \n",
" 0.156997 | \n",
"
\n",
" \n",
" | 8 | \n",
" one | \n",
" C | \n",
" foo | \n",
" -1.722116 | \n",
" 0.761828 | \n",
"
\n",
" \n",
" | 9 | \n",
" one | \n",
" A | \n",
" bar | \n",
" -0.337629 | \n",
" 1.093555 | \n",
"
\n",
" \n",
" | 10 | \n",
" two | \n",
" B | \n",
" bar | \n",
" -1.343353 | \n",
" 0.797256 | \n",
"
\n",
" \n",
" | 11 | \n",
" three | \n",
" C | \n",
" bar | \n",
" 0.573971 | \n",
" -0.930710 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" C | \n",
" bar | \n",
" foo | \n",
"
\n",
" \n",
" | A | \n",
" B | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | one | \n",
" A | \n",
" -0.337629 | \n",
" -0.560128 | \n",
"
\n",
" \n",
" | B | \n",
" 1.304376 | \n",
" 0.749692 | \n",
"
\n",
" \n",
" | C | \n",
" -0.901451 | \n",
" -1.722116 | \n",
"
\n",
" \n",
" | three | \n",
" A | \n",
" 0.706071 | \n",
" NaN | \n",
"
\n",
" \n",
" | B | \n",
" NaN | \n",
" -0.224895 | \n",
"
\n",
" \n",
" | C | \n",
" 0.573971 | \n",
" NaN | \n",
"
\n",
" \n",
" | two | \n",
" A | \n",
" NaN | \n",
" -0.685465 | \n",
"
\n",
" \n",
" | B | \n",
" -1.343353 | \n",
" NaN | \n",
"
\n",
" \n",
" | C | \n",
" NaN | \n",
" 1.239602 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" id | \n",
" raw_grade | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 1 | \n",
" a | \n",
"
\n",
" \n",
" | 1 | \n",
" 2 | \n",
" b | \n",
"
\n",
" \n",
" | 2 | \n",
" 3 | \n",
" b | \n",
"
\n",
" \n",
" | 3 | \n",
" 4 | \n",
" a | \n",
"
\n",
" \n",
" | 4 | \n",
" 5 | \n",
" e | \n",
"
\n",
" \n",
" | 5 | \n",
" 6 | \n",
" e | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" id | \n",
" raw_grade | \n",
" grade | \n",
"
\n",
" \n",
" \n",
" \n",
" | 4 | \n",
" 5 | \n",
" e | \n",
" very bad | \n",
"
\n",
" \n",
" | 5 | \n",
" 6 | \n",
" e | \n",
" very bad | \n",
"
\n",
" \n",
" | 1 | \n",
" 2 | \n",
" b | \n",
" good | \n",
"
\n",
" \n",
" | 2 | \n",
" 3 | \n",
" b | \n",
" good | \n",
"
\n",
" \n",
" | 0 | \n",
" 1 | \n",
" a | \n",
" very good | \n",
"
\n",
" \n",
" | 3 | \n",
" 4 | \n",
" a | \n",
" very good | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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": [
""
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"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": [
""
]
},
"execution_count": 100,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAEMCAYAAADQ553CAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnWd4FGXXgO/ZbHojvUMCAUINvUhVsaGvCPaO/bWBvXdF\nsfuJXV/sDQUVFREVERDpvSaUkN573d1kvh9nZ3fTOwk493Xl2t3Z2ZlnNzPnOc+piqqq6Ojo6Oic\nOBi6egA6Ojo6Oh2LLth1dHR0TjB0wa6jo6NzgqELdh0dHZ0TDF2w6+jo6Jxg6IJdR0dH5wSjwwS7\noigGRVG2Koqy1PraT1GUFYqiHFAU5VdFUXw76lw6Ojo6Oo3TkRr7XGCvw+sHgN9VVe0PrAQe7MBz\n6ejo6Og0QocIdkVRIoHpwAcOm2cAH1uffwyc1xHn0tHR0dFpmo7S2F8F7gUc01hDVFXNAlBVNRMI\n7qBz6ejo6Og0QbsFu6IoZwNZqqpuB5QmdtVrF+jo6OgcA4wdcIwJwLmKokwH3AFvRVE+BTIVRQlR\nVTVLUZRQILuhDyuKogt8HR0dnTagqmqDynS7NXZVVR9SVbWnqqq9gUuAlaqqXgn8CMy27nY18EMT\nx2jR3+OPP94h+7R2367a79967u6+3/EwxuPhu7R03xPpO3fkGJuiM+PY5wOnKYpyADjV+rpdTJ06\ntUP2ae2+XbXfiXburjrv8fDbnEjfpTV05D19Iv3/WrtvXZTmJH9noyiK2tVj0Dk2PPHEEzzxxBNd\nPQydTkb/Px8bFEVB7SxTjI5OS+kMjU+n+6H/n7seXWPX0dHROQ7RNXYdHR2dfxG6YNfR0dE5wdAF\nu46Ojs4Jhi7YdXR0dE4wdMGuo6Ojc4KhC3YdHR2dEwxdsOvo6OicYOiCXUdHR+cEQxfsOjo6OicY\numDX0dHROcHQBbuOjo7OCYYu2HV0dHROMHTBrqOjo3OCoQt2HR0dnRMMXbDr1Gf16q4egY6OTjvQ\n67Hr1EZVwWCA3FwICOjq0ejo6DSCXo9dp+WUlcljcTEoiv21jo7OcYMu2HVqU1wsj/v2yaOXl2jx\nzaEokJraeePS0dFpMbpg16mNJtg3bLBv+/57+/OtW+GCC2p/prpaHhcsEBOOjo5Ol6ILdp3aaIJ9\n/Xp57NsXbrgBbrpJXv/0EyxeDD/+KK9raiAjQ56/8AK88sqxHa+Ojk49dMGuA/feKwIa7IJ97Vp4\n8UW46y7Iy4P33oOdO8HTU96fOVNMNH5+dqEPUFh4bMeuo6NTD12w/9spL4eXXhLhDXZTSnk59O8P\ns2fD9u2ybcoUMJvleXW1RM8UF8OyZfbjpacfs6Hr6Og0jC7Y/+3k5MhjWpr9UQtz7N8f3NwgPl5e\nFxbC0aMwfz589BHccYfd/j5wIPz1l5hlNm0CZ+dj+jV0dHTsGLt6ADpdjKahp6bCsGEi2K+/Hqqq\noHfv+vu/8w4sXQr/+Q9cfbV9e00N9OolGvvRo2CxyDZDM7rDmjUwblzjE0FyMvTs2bbvpqPzL0XX\n2P+tWCyQn28X7N99J4+HD8PIkfDqq2BsZN4/88z626qrITQUsrLs9vqDB5sfx+TJ4pDNzq4fVrln\nj0wWOjo6rUIX7P9WTjsNoqLEdNKrF+zfL0L9hx9g1Kj6+3/1FcyaJc8b0q7d3MDVFXx97QJdi5xp\niIMH7WagkhIYMqR2iCVAUZE8FhTIY0KCPVpHR0enUXTB/m+kogJWrRIHaWIijB0L69bB7beLwI+O\nrv+Ziy8W4d6QFr53L/z8szyPioKHH4a4OHjqKcjMhIcegmefte+vqhJG+eab8vrVV0Vj37u39nGz\nsuRx8WJ5nDEDxo9v+Ds99BDs3t3SX0BH58RGVdUu/ZMh6BxTUlJUNTxcVY1GVQVVffBBeQRV/f33\n9h27Z085Tny8qk6Zoqo9eshrFxf7PgkJss3JSVX79FFVNzdVnTRJVT08ZPv+/bLfO++oaliYqo4e\nLa/j4uT9mhpVPXSo9nlBVW+/vX1j19E5jrDKzgblqq6x/xvJy4PAQLGzA9x5p2jtABMntu/YK1aI\n8/WOOyA21h7XrsW/g5h8QOzyn3wi2vrcubKCADG5gDh0r7tO9r/3XtkPZHXQpw+UltY+t15MTkcH\n0KNi/p1olRuXLxeTSVAQ/PMPVFaKnbw99O8P778vz1NS7Nsd7fKO20eOlHP26yevzztPnLoAR47A\n6afLPi+9ZP/MggXyuHEjnHKKfA/QC5bp6FjRNfZ/I1lZIszPOMMedaIo4O7esecJCbE/Lyiwa9Qp\nKbJiAPtEMmSICPTISPjlF9l25AjExNj31VixQvwAO3aINq/Vj//mG11r19FBF+z/TvbsgQEDOv88\noaHyuGmThE5qppaUFLjmGnGgOuLnB6NHw9dfwx9/iEkmJkYcsBpvvCGPw4dLuYM+fWTSePlliZnX\nSxro6OiC/V/JqlUNhzR2NNpqICoK/P3tJpaUFDGhaLZ0R666Ck4+GaZNE5NReDhcey2MGCHvx8XJ\n4/Dh9s+8847Y8MPD9ZIGOjrogv3fw4QJ8O67Yr5IThYzTGcTHy8x6iEhYmr5/Xexv69ebRfQDaE5\ndUG08Msvl5DHoCC7WeammyT8UaN/f8lQPXCgc76Ljs5xRLudp4qiRAKfACFADfC+qqqvK4riB3wN\n9AKSgItUVS1q7/l0WkhaGkRESOTJmjUSp15ZCU5OEqt+rGq5eHnJ45lnwjPPiE181qyGY+U1Jk+W\nMV96qX1bdDRs22bPhg0Oljo1igKPPgpTp8oKYNEieyKVjs6/lI7Q2C3AXaqqDgLGA7cqihIHPAD8\nrqpqf2Al8GAHnOvfRVpa25yBGRnihCwslBrpJ58s22tqJGRQs30fSwYMsIc5Xn990/s+84x87y++\nqL09IoLDPj5sLqqjH2iNPiZPlgiZhkw8Ojr/Itot2FVVzVRVdbv1eSmwD4gEZgAfW3f7GDivvef6\nV2EyiXD+4YfWf3bbNnn084PffgNvb3m9fbtowsHBHTfOlqKZXu64A846q82HOX/PHkZv3UqNNuEF\nBEgRMZCQyaIiMct0BFohMx2d44wOtbErihINDAPWAyGqqmaBCH+gC6TJcYymdbYlTX7hQvvzbdsk\nDHDPHokiWb68awR7ZKQ8RkW1+RClFgvbrUlJv2iO2NxcqTQJYo9/442Gq1K2hehouPvujjmWjs4x\npMMEu6IoXsC3wFyr5l7XhqAHGLcGLcRPM1+0ht27JUwQxBzTu7fUS7/yStmmJQMdSwwGeOQR+xja\nwOHKStvzAq3hR10uvlh+s+nT23weG2lp8Pff7T+Ojs4xpkMyTxVFMSJC/VNVVTXbQZaiKCGqqmYp\nihIKZDf2+SeeeML2fOrUqUydOrUjhnV8k5UFPXpIWn1r2LhRIkOOHIHbbpP0ez8/eU+LGx80qGPH\n2lKefrpdH0+vquI0Pz+GeHqSaTI1vJPWJOSXXyQiRzNDNYaqymri779hyRKZEPv1g8GD2zVWHZ2O\nZtWqVaxatapF+ypqB2TqKYryCZCrqupdDtueB/JVVX1eUZT7AT9VVR9o4LNqR4zhhOPFFyXDMj1d\nzCgtIS9PwgojIiQpaNEi0WBNJnsUTEVFx2eYdjJVNTWYa2pYlJPD6sJCBnl6kmUy8VJsbMMfiI+X\n/qwHDjS/Oikvlxj4Sy6R6pV1GTwYdu1q/5fQ0elgFEVBVVWloffabYpRFGUCcDlwiqIo2xRF2aoo\nypnA88BpiqIcAE4F5rf3XP8aTCYJ4Zs1SzRvTTvV6pI3xm23SUTMt9/K67POkjorjqGNx5lQB3g5\nJQXvtWvZWFxMhKsrIS4ujWvsILH6o0eLE1WLmAF2lpbWjzLSer1+9ZUkR2ncfbe9ZIHW81VH5zih\nI6Ji/lZV1UlV1WGqqg5XVXWEqqrLVVXNV1V1mqqq/VVVPV1VVT3Xu6Xs3i2t6WbNEtPAnj2igfr7\nN/05LWZcc1B6e8PmzZ071mNAtlWIf5aVRbirK6HNCXawT4Y7dgCQZzYTv3kz+b6+tcsO5Ofbf6/L\nLrM7rc84A4YOlaSo4cNrFy7T0enm6Jmn3Yn77oPHHxchcs45krE5cqREtZxzjuyj1VtpiNJSmDev\n+T6jxxkZJhPDvLwoq6kh3MWlZYJ9vnWBaBXUezIyANgeG4vl6adRExPl/fx8cS4fPSrCvG9fqSSp\n+Xm07Fat6YeOznHAiSUBjndefFG6DiUn28MDx46F556za4xz5zb82YICMScEBR2bsR4jvs3OZm95\nOU9GR3NNaCijvL0JcXEhq7GoGI0zz4RbbhFTy4cf8utTTwGQMnkynmecwYuPPSZmmTfflOQpx4bZ\nd99tN1/Nni2P1olBR+d4QK/H3l1wtP0uWSJp/2BP5nnlFdi3T7IxtXrnjmjmhR49Onecx5gLre3y\nBnh4cK41yamyuppih3oyO0tL6e/hwYHycvq4u+Pp5CRvBARAbi5/fv89z776Kqdu2UJOTAwmFxd2\nDR0q2viPPzZdx334cClCpgt2neMIXWPvDvz0k5hP/P3hggukYbNm99UqJPr4SHkAYyNzcXGxRHBc\neOGxGXMnsr2khL8KC3GMlgpzcbE9dzUYUJFomVKLhfjNm/k+N5f4zZuZd/So/UCBgbBoEcvHjGHK\n9u1M3rmTldYiYlkeHmw/coS8Bx4AD49a5/+rsJB8xxVBeHjLBPsNN0jvVR2dLkYX7N0BTQPv1UtM\nApWVdlOMpn2aTCLcS0vrpbnnmkwcKio6YbT1WxMTmbp9OzkOwtXLYUJTFAUfJydKLBbespbprbL+\nJs8lJ9sP1KsXNfv2sX7gQO46dAjPigp+iYhgoo8Pa/v3Z/iCBTxx+eW1zl2tqkzdvp2XUlJQVq3i\n08xMCAtrXLAXFdn8Hkd//JErFQXeflv+hzo6XYQu2LuarVth6VJ5Hh5ut/U6pt7Hx8P48aLVe3mJ\ndp6UJJ8F/rN7N7E1Nc0n4xwH1KgqqVVVACRVVjLY05PVw4bV28/baKS4upoFaWmAPXIGoNwa4nj4\nlFMY8d57rI6PZ9iLL6JY2+vNjYykws0NgPA6v1mG9dzaBJFWVdW0YPf3lwQws5lNw4bx2Wmnod5y\ni0Qx6eh0EbqNvavJdkjI9fKyC/aICPt2xzjqHj2kPoo1i7R8yRLWa5mlPj6dPNjOZ29ZGclW4XrD\ngQP4OjkxqYGViI+TE8UWCxXV1dwYFsausjJcFYUqVeVwRQX/FBfzWFISMZWVzM7IIMrVlTmRkdwQ\nHo630QhW272TUju/I7mqihBnZ5tztsBiQY2Pp2LLFpxNJpwdTELU1MifyQRbtuBqrcFzz803M6mi\nQq96p9Nl6Bp7V5OWBldfLc8nTxbBHhjYeCJRjx726o3AzRs32p5ntqPAVneh1Kptx3t6srOsrNEC\nQz5GI0mVlVTU1NDPw4NNJSWM8/FhvI8PQzZv5saEBDJNJl6eNo0PzzsPRVEwGgwi1Bs4H8DnWVlM\n2LaNK61ljUd7e/NCSgoDc3Px/Owznvnzz9qDOHLE/vzbbynx9QXglYsu4pXmonZ0dDoRXbB3NVpD\njKwsuPlmSYr58MPG94+Oln6gAPPn84lDJ6SXW1D46mhlZeMFtLoBhRYLp/v5schaz2aNYws8B6b5\n+fFqaioxbm6M8/FhX3k54a6uXGrVmvtZJ8b4vn0bnCRXDxvGPVFRLM/PZ721vvvzVvPL2f7+7Bo1\ninutE+V+qw09q655xVGwv/wyxQ6OW0+TiZXNZQrr6HQSumDvao4eFadpcLB0A3J2ticjNcTs2dLi\n7pxz4P77cTabWR4Tw9zffyelBeUCztq5kz4bNnTc+DuYQosFP6ORfh4eqFOnYlAaLIXBjIAAVhcV\nEePuzgRfX1wUhWl+ftwYHs7tEREcGDuWI2PH4qE5n+swqUcP+rq7s6mkhPHWFZCfVZuPdXdnsJcX\nwQ5mlxgnJw56etY+SG6u1OJJTYWLL6bEIbpmuYcHV+/fL/kFBQW12/3p6HQyumDvSm64QWqnN9Um\nri6a0C8uRlVVnFSViRYL569cydeVlawubLpyg7vBQIHF0m219kKLhR6NhXQ6MMgqZHu6ugJQMXky\n14aF4Wow8LrV/xDdzETn7SD0+27YQJHFwjMxMURYjznYQZCP9fWlwGis3XYvN1fMZhERcM45NsE+\nwRoXn1pVReG994qD1dkZtGxXHZ1ORhfsXckHH8hjawS70SiJSgsWUFJdjQJ45ucTac1M3WltRNEY\nJdXVBDs7Mz852RY90p3Is1jwa0E/Vmdr2QQ362Njmn1TDLfW1rk0OJiDFRXsKCvjgqAgFOuxApyd\nuSokhIpJk3gqNpZCT0/47jv7AX791eawViIjWT10KAtiY1nl5sbqOXMYnpDAgyEh/DBhAgBbn3oK\nt7/+avU4dXRaiy7YjxV1qwrm5tqfO6azt4S4OHLj4vBdu5apSUkwYQK90tIIchCIP+Tm2kL3NGbs\n2kViRQVPxcTwQkoKN7egN+icxEQ+P4Z1UjKqqmolIzVHcCv2rUucpyeWKVNwd6it41dntfDxgAG4\nOTnRw2ikKDwc+vSRN9LSJLFs7Fgs1hj6v4YNY6yPD8ZBg5i0axe9MzJ457TTuMVaBuJHg4Gq46hE\n9YStW1FaWP9bp3uhC/ZjwSuvSAz6s8/Cf/8rMdEHDtjft8ZUtwbNoTeitBTMZgwzZvDf8HD+KS5m\nc3Ex5+3ezb2HDsm+ZWUUmM0stZaovdzqYPwkK4ufcnNpqh7+grQ0nnHM5uxkMkwmwlsorBPHjOFO\nLZGrjTgpis0kc1NYGAGNrBZ8jUaKFAVVa6T93HMwZw7MmEG6Qwz9cC8vKd4GPPbJJwAM8vBg03PP\n8f3EiQBN/t7dBVNNDeuKiwGI+uefLh6NTmvRBfuxQOub+fDD4vgMD5comDPPhMWL23TIQ9bMRoMW\nu/722wQ6O/NFdjZTrXHv+8rLyTWZGLBpEwkVFbbPehmNXGUVPv/ZvRuvNWswN9G02agoHCwv56mk\npDaNVaOyBaaflKoqwq027uaI9fDApQMqWT4dE8OOUaN4p3//enHtGi4GAxbghTPOkNXX/v22Oj47\nS0sJcXZm3fDhGA0GcYLv2cPQgwf5MzaWyvBwxowbx3Yt9+A4aJC9z6GKaGpVVbc02+k0ji7YOxut\nwFRBgb2ULIhg79mztjOuFRyw3njxmnYbFMQp1kSespoargwJIaGigq1Wm/s/RUX8JyCA5HHjADjZ\nIemnvKaGj7Qeqw6UWiM5DMBX2dk8npTU5ht8TWEh7mvWNLnPuqIidpaWMrRu9Ekn4200MlSrZd8E\nQz09SQoNlVr5hw+juLmRWF7OiykpPNirF+OtceyA9JhVFAYGB7NG0/IBg6rWrkPTDTHX1DBs82bC\nXVy41hrTn1LHrKfTvdEFe2ezfTvExkpi0f332zNN77uvdnZpK0koL+ergQM5f/p0uOgicHJisJeX\nLf3+rshIxnp7c7fVHPN5djYzAgOJspp9ZoeFcWDMGBb278+jvXrVahStkWkyoSCRKpVWLfOVNjac\nOGI9flYTddQnbNtGlarWqgvTnXg8Opr00FC2paRw2DrBzU9OZnVREcMamRiCXVx4uGdPwlxc2Jqc\nTHx+Pn82E7nU1eyyKiPze/fmf3FxTPT1reev0ene6IK9M+jfH3Jy5Pk338DZZ9vf0+qll5bCTTe1\n6fCV1dWsKixknI+PhNt9/bXtvUCrjTjUxYV3+vVjt/Um3VxSwtg6dVH6eXhwTVgY8V5e/JSXV0+T\nzDSZiPPwoMBiYZ41eae4DRp7odlsmxB2NBK1o60O7unG2bNDPT3Z1rcvI9LSOOvZZwH42eq3GN6E\nxv9M796kn3QSwyMi2BYQIPHt3ZgV+fncEh5uy8ANc3Eho7nGJjrdCl2wdzSqKl17EhPh0CExuYwZ\nU38/Nzebk621HK2qwt/ZmV4NOF19rNpuoLMzsR4eNtMLiCBviBkBAXg5OfFZneiXTJOJfu7ulFiF\n+QgvL9Ktmlt6VRXPJCW1yBG4tbQUN4OB/4aHs70Rwb63vJxhXl68qEWddEP6uLtTabX/l1l/yyyz\nmevDwmy/e5P068ddP/3UmUPsEH7Iy2OGtbwx6IL9eEQX7B2NtswuLBQTzM8/1+9q9M03tbTs1pJp\nMhHaSORIqIsLz8TEiBMPiHJz4/DYsRRNnNioo9FoMHBZcDBzDx7kbIe0+UyTyZasA7AwLo7vc3NZ\nlpfH8vx8Hk1KwtCCuOz0qir6uLtzfmAgixyLnjmwp6ysVkJQd0RRFHpaJ7ZKV1dirBNrQEtNR5GR\nvPDppzgh5YG7G7tKS4lZv57tpaVMdfDBhLu6npiC3WI5YVse6oK9o9HKu2rml5ISMZc4csEFcO65\nbT5FU4LdSVF4WGvOYSXG3b1ZjVLT5pfl57O6sJCUykpuP3gQX6OR3+PjuTsykngvLx6Pjua3goJa\niVDKqlW1OhrVZXl+PuGurgz39mZLaSlzGsjAPFpZaROU3ZlPk5L4bMEC8jw8bOaXwBYkVAGgKDj1\n6YMX8E56OsqqVdSoKuaaGn7MzUXNy4MGnNjHip1lZSRVVhLk7FxLCQhzcTkxbeyPPgpWc9OJhi7Y\nOxrHG/OSS+D006Ffv449RROCva1EOWjmU7Zvp+f69YB0KzrVz4+XYmMBaVG3r6yML+po3occwikd\n2VVayk95ecwMDMTfOrksSEsjpY6zVqsR090Z4ObGZUuWAPawxd4tqNFjIzQU/+pqbrNObg8cPozL\n6tWcu3s3f195JYwY0eFjbgk3HDjA/6WmAvCa9X+t0dPVlR/y8vBavZrvNd/RicDate37/H33tTmq\nrbPRBXtHk5kpAr2yEr78UtLOO9jE0JmC/dtBg7jAajq6ISyMh+tkxfZyc+NIZSUFFgsv9enDy336\nMNnXt9FwuCOVlUzq0YOTfH1tqfoRLi6sqhMZUlRd3aIaMV2OlxcKsGnbNt7o25f7o6I4TauH3xJC\nQ4l2mAR/yc+3PU8AWzemY80HGRlsKilhXkwMs+qYDqf06MEf8fHEuLvz64lUsbKZ8hvNsmRJ7RIT\n3QhdsHc0GRmyvGthkk1b6AzB7m00Mr93b2YGBvLVwIGA2OuNdezyEa6uJFRU4Gc0cndUFHdFRTHQ\n07NRwZ5hMtUqEWCZMoXbIiJsIXUahRYLvseDYLdGwYy6/Xb6uLszv0+fejXemyQkhGuOHsXfaOTC\noCBb1JKf0cih8HDp1tSFBDdgVlIUhTE+PiyIjWVXaSllDURGFZjNLMzIILOqigcPH+68AT7zDIwa\n1THH0qLAFiyQZikaLY38smbmdkd0wd7RZGR0+s3ZGYId4P6ePTEoCk6Kwsr4eG5o4Hto5hLH+iqR\nrq71TCsa6VVVtUoEOCkKEa6u0nLOgZZWdexyrrhCNLW2jtXPjyv37ydv4kQGOEQpneHhQbGHh2S0\nOpabOMY05cAe4uXF38XFeK1Zw36HiVlVVRZmZnLdgQN8l5vL/OTkJvMVWoTJBB99VH/7X3/Bli3t\nO7aGdZJmzhwJcgDpiNWzp7SebI5uvHrRBXtrePttW0u1etTUwIsvwssv2wtFdRKdJdgdOdnPz5bM\n5IhmTjE7RHVEubqSUlXF00lJvG9tLg0S+fnV7yZKk2uvXiJcXWvVV3kzLY1VhYWd/p06BH9/mDmz\n7Z/384Mff4SZM+n3448AFE2cyLTCQso0p7e1j2uTfPYZOPzWHYGXkxPxTcTjBzg72yb0mx0c4D/l\n5XGPNRFOqyvU2ETfYtasgWuusfX1taEFIrR34sjJEbPX7t3i1zhyRH735GT5Xb/5punPV1SIZq8o\nLdfwjyHHhWBPyEtgR+aOzjvBjh3yD2oq1buiAm65BQYNEo2tLkOGiDMFOtxZWpdjIdibw9mhpkov\nNzf2lZfzWFIS9zksw3ftgoTcKrb9Vnus4S4upFVVUWKxUGg280VWFh/278/Abh7u2CH4+Ulzle+/\nJ8yqkfqsXYtHaiplQUFSb7+kBJorvHXllfDqqx0yJFVVcQLyJ0zAvZHGJBplkyaxbeRIVhUWUmEV\naFrS2o1hYUzw9WWanx+57S2boLUhXLpUNITMTHt/WWj+92mOl16C6dPlfj77bKnjFBkpgj40FN54\nQ+75xjhyBGJiZGxGY/3qrV1MtxDsh/IPEfFK4+n1Yz8Yy7B363eq7xBUFaxp+Dgk89TDsQ3a+efX\n/kdecUVtTX7AgI4dowPVqkqu2VyrRG9X4GiKmeDjQ6rVtFJosdhitMeNV1HCK0nZUUewW00x/01I\nwO/vv1lXXMzkBhpWn5BoGvFVV3Hytm3suuUW2LYNz23bKO/RQ95fswZOOqlhYVFRAaedJs87qCtT\nVU0NRkWx1bhvCkVRGObtTYybm23VpSWpnR8UxKJBgwhydiavPWN77TWYNw+uugree08qo4aFiba+\ncqW0j2xv/Pn69dLoBqTch7bCOP98uOwy0dyjo8Us1lAk0Ecf2f8P0PhKvovoFoI9IS+B9JL0RrMY\nCysLcTY0LMj2ZO+h1NQO73ZysrSlg/rLPkcOHQLH/puaDS4pCT7/3L7922/bbn9tAVkmE35GY4tu\nws7i7+HDWTpkiO210WAg0sFZPHDjRgqLVSrCSlF9zBTtqq2J+xiNGBSFldbImLkREa0LGTye0SJo\nLr8cBRh8773w+ut4rl5Nmbe3RFBZyzfQUDJXQgL8/rs8twrP7SUlfN1I4lejqKpt4iiZPx+vVpoT\nfJycbLkLBRYLka6utsJyAc7OLdPYX3wR3nqr/vZ16+Rx1ix7XgiITXvgQMnkLiiQ8bfV5HPkCPTu\nLc8dlSSTCQYPllLb2dkQFwcvvFD/83v2iMZ/9dWi8c+dCytWtG0snUC3EOyWGrlAMkvrJ2dUmGU5\npKKSXVb/4h389mAuXXxp20++cSOMHw8bNsjSqjEOHbKXBoiKki5GIBqFtg1gypS2j6UF7Cors7WF\n6ypO8vWtV57AsY55QkUFfmNLIKSKQQYf8tOcqFup1qgoZJpMvBYbywOtbTRyPBMfLyaF008Xm+6o\nUZCUhOflnoIhAAAgAElEQVTEiZT5+Ejjbc2+WzeRq7KytvJh1SRvS0zkkr17qayuJrcltufCQtGC\nH30UFIXSN97AS3MkthBfo5Hi6mqSKys5UF7O1SEhNmUjxNmZZ44ebb4S6H33weuv19+uKKIsNVRy\nIypKJseCAjj55Lbdb3l58htotfy1pjfPPCOPgwaJfV+jTo0lAA4elMzyjz6CSZOkwfz117d+LJ1E\ntxDs+RUSy5tanFrvvc92fsaQ4CFMjZ7KoysfbfDzOWXtSJpITJSiXf361e5qVJdDh2Q/kH/kwYOw\nfDm8845si44WDaJulmkHszAjg0mO5WG7CZqzbPGgQbIhvAL8TYzr74y3d/0AgpN79GCyry9zIyMJ\n7cTQ0G6J5p8ID7eZ7TyGD2djSQnK+eezqX9/EToHD9o+8nxyMmcvXw7XXkvNTTfZnbBgqyF/94oV\nBGnablVV47ZfbYU5bx4Ape7ueJWWtip8z8dopMhiYeSWLbyZnl6rhn6kqyu5ZnPT/Xc1od/Q/XLk\niDR41wTqyy/b34uLk++emSkRMq3NiH36aTG1jB9vX1nPmQO//WYv/TFwIGj3WL9+9X8XVZVVlaaQ\naFVao6LkPYfchK6iWwn2vIr6WsONP92I0WDkiSlPsC1zm217bnkuypOt73NZj0OHJIrF1xcCAmTm\nbYjDh2U/VZWbceVKabRw113Spf6HH9o/ljqsyM/n9sREfsnL48usLJRVq1iUk8MlmumoG6FlYQ7w\n8ODy6l5ETynn3mfFyevuLo2jHPlm0CD+HNZJfpPjCaMRzjkHPwf/zpqhQ0X7cxDsy7OyWNajB1d8\n9RVOl1xCRXY2mM2oFRXstQqeA1YhXjZ0KL1WrhRfh1W4/pqfzxGrM9C8fj19v/mGvwcPZsHMmSLY\nKyrEqXvHHWJObAZvJyeSKittvpbp/v72r2SdaEqb0ti1rlyOJqTSUrGd79kjK5s+feDee+FS64r8\nwAF46CER7NussiAlBVavbna8Nh57TEwmcXH2bQEBMG2aRDzFxIifQ1FE6bvjDnFmO1JQAC4udn+J\nJtjXrRPnd0BAy8fTSXQrwZ5bLhpzqamUV/8Rj38Ptx4su3wZ8aHx7MnZg7labHdf7vrS9nntc42R\nWpzKqqRVDb956JAsqRQFzjvPfsE4UlAAy5bZwxjDwuyC/OGH5R/bmuzDFjJ9507eSEtj+q5dXKaZ\nfqBVPUGPFXtHj8ZZUQhydsa/1ANLeDlHDGX09/DgxRdFVmzcCFrPCSdFaVMD6hOSH38kKi6OT6zC\nxvzgg3KNOTgIo63PP7eaJ+YlJ/P75Mk8d+gQkVbB84fVPLbOxYVkd3dSgoJsJS7O3LmT83bvlvfN\nZg4GBjJxwQLmzJnDP4MGiWAfOlRCehu6B+rwc14ecw8eJKWqisWDBhHt4COZYS0f0WRzjosvFiFa\nXi5+A5D7LzRUtnl5SQXUF16Q30JVRXt2cbEL9rg40Y5bY47RxqnZ1x0ZMgRmz7a/jo2VZuV1Nfb0\n9Nq9FMaMkSgaEDkBXZqLAN1EsBdUFjAw7GVCnlzI17u/5rt933HXiru49edbKawsJNgzGC8XL6J8\notifK7Ws5yyfY/t8SnGKzRbfEPNWz+Pkj0/mUP4h2zZVVXk7LY395eV8qxUCiooSDQAkG23DBrmg\nfv1VtmkXQ3i47TgWtZoateNbne0pK0PTd5ygVpJPd0jkOXhQ5jQNL6MR05QpBLq44JnrQVlgGRuL\niznJ15fLLhM/2EknSQCCTsNolTRzvL1FeDks6asLC7nbWhH0tdhY5iUnc8ZDD/FzTg6vPfIIr7/z\nDpEVFXg7OXH6Sy8BcDAiApYts9W6dzMYYMMGEhxS6e/x9eXuW24hWEtGM5lkddoMjqutyDqmNG9r\nVnK21YG6sbiYb7KzbV2/UFXYvFlWJUOG2FcmWkDCk082fXI/P9Gix42DCRNk1dNUaKLGL7/Iftdd\nBzNm1H+/f3/R6Gt9Ge/6GntaWm3B7ukJt94KH35o3+a4IugCuoVgLyrKI6H3UIpzq7nl00t4b6s4\nJN/aLB5zgyLDHB42nK0ZtSNXZvSfganahP8L/jRGsUlm3NgFsWzP3E62yUSu2cwtiYkMf+YZLszO\n5qfcXOjbV0wsDz8sdrdx4+SflZcHN99sn+2nTaPivrsAGPjmQK5f2vFOk0KHcLEYd3csqsqGESO4\nLjTUliTUlSxcKL25G8Il04MinwqSq6roab3pBw/ulnkc3YoJvr5M9vWVUEF/f8mGtAqsPJOJSbt2\nsdholAYrgG9pKVnp6YTl5XH7b7+Rsngx9zs4QQ+ecw58+SUHysrwcXIi02SCv/8mzaEB+O3WPqwD\nRowQLfOuu2qH9jbCCG9vWytGrwZi3wOcncmzCvaxW7dy0d69xG3cKG9qdvWbbhJtXEu00vwBjzbs\nS7OhrY779pVCXsHB9izSppg+XR4/+EB8Yi3B379+uGNdwa7hqO1D0z67TqbTBbuiKGcqirJfUZQE\nRVHub2gfzwOFWIxGEiIjudI4grXJUnVtRv8ZFN5vd8AMDx3O9sztVJgrcDY4Y37UzPeXfA9ApaXx\nsKf9uft595x3AThv0cWErFvHPmvcaaVVE741MVHClvz8RGItXChxqomJYgd0tGs7OzN9wBZcHoHE\n/ET+ONKIXb4JEvMSm2xSoYWLPRkdTWVNDQUWC0M9PfmgizUBDW2VPWOGuBgcr+HUw0541MiqQouU\ncMzZam/tpRMVV4OBu6KiRCD6+cmPvGgRH2ZksKx3b0JeeYVZEycyyMODaDc3yr29yfT3J6S8HO65\nB4qLediatNTDZOLg+efDli1suuMOTl+1ikyTif3FxTx5ySW2c0Z5ejJbVTkrPFz+Sffc0yKNHeCP\nYcM4PHZsg4ll/kYj+WYzljrhUOuKiuwrkR49ZPWrhTSGhkqYYXOKi7bs04Szv3/nOSyHDBEbouNv\n0phg1wgIgIkT7U3su4BOFeyKohiAN4AzgEHApYqi1JNMpvwaFFXl98E9mRUwCYCfL/uZz2Z9hq+b\nPQJkQOAAfkz4kV3Zu4j1j8VoqG2SqLLUtumll6SzKmkVhckJnBUtyQRHy+QCmFLHY59vsTB0yxYO\nnHqqbIiPh2uvldodTz1Vz3ufW5GH2Xr65KJkZn49E1N1y9Kc00vS6fdGP3499Guj++SYTFwTGsp9\nUVGkVlVhANyayQo8VpjN9lDrpUvlp3LsaLdqFTzo16dWrZlRo0TBCguD998/tuM9nvA3GkWwa8LL\n05PHrSaKCOvv6WU0cmTcOGoMBsrc3fGZP1/s45mZsHkzRaNH89WoUaw2m9n++uvcf/753Pzdd5hU\nlQFTpwIw03o9K4rChyefzCjrKoDQUNFQWxgMEOPuLpp3nX9qgDVJ6WAdE8kER/u9k5NcEI89JuGf\nCQlSGbU5NOek5nAOCGiZxg5g/f4txtdXwioXLrRvO3iwYRu9hqJIf+Mvv2x8n06mszX2MUCiqqpH\nVVU1A18B9YxbJkMgI01VlMeOwK9M1uvT+07Hy6V23YrBwYM5VHCI6Z9PZ0ovu8Mk825xEN356521\n9n9r01tiW59XStTCbzE/aubUAfYL50FNOiEe/F1lZazUtICQEDj1VPheVgR1Lzgt9l7j+/3fk1SY\nBMAfh/9gfer6Bn+QwwWHbVm2DcXla+RYs0s1Ye7UDcwvAIsXi/9qzx7xX40ZI8qSlidiNosGf+/Q\nUN7TwkMR82VCQotX+v9aApydWVdcTE5kpAi7pUuptNqwQus0hdDq9SjXXy+24H37IDISH09Ppvn5\nsaO0lBUzZjDJZOKUOg7RRQMHkn3SSfUHoChw++1NJ+vV5b336k0EQc7OZJtMbCwp4dSmHCva5P/b\nb2Kra0njC3//2glGsbFSCqA5oqPhf/9rfr+63HablB3R2Lq1drKiI9deK+Uepk6Vm6GuFpOQ0PyK\npAPobMEeATi2tU+1bqs9iJpoelf6ke7lxUCCWHX1qgYPFuMXw8brN5JXkcfoiNG27SFeITx7yrN8\nsuMTfk74maLKIpQnFeatmYezJn9zcjAlJfNHj/PxKjlM6VlnMdKaErzAobFAhqYVBwfb41p9fetp\n7FmlEqUQHxJv26ZF90z7dBqTP5zc4HfYnW2/AA8X1F/y3p6YyNHKSptg17igbnu9LkJz+u/bJ/eV\ng7mW4mIR6qGhtZP5HImIaDihUkeItfpxdpWVSTz1p59itIYSOdf5Uf2MRgZ6eIig8PISe5j1H+Kk\nKJhUlfsPH2ZivP0aPSU/n5Xx8RgNBoIai66Kj7eHIzaHlqBQx6zY292dw5WV/F1UxDkBATzlsKRT\nN2+2l0NwFOSXXtpyoedoIz/9dHuAQ1MUFrbNez9sGGzfLs9VtXZOS13+9z8xJ2nmqZtvrt18x/E4\nnUi3cJ5+MeMUlnwcRoGLC065eUyJbjx8aXTEaDbdsInLh1xea/u5/c+lzFzGOV+ew8F88bK//5/3\n+a+X9VgJCaRbnRtGxQN6hvGfkBCei4nh1ogIRnl7M8rbm1eiolBff90umUaPrheEXW4up9wsHn6j\nwcj2m7ZzZuyZ5JXnoaoq3i7emGvM5JXXXx4eLTzKf0f+lyenPklCXgJf7f7KFrppqjbxcUYqv+Tl\nsSI/39Zy7anoaJ5sqbOnE6mpga++spsXvb1BS0Dt319Mj0lJTfulgoN1wd4ULgYD/wkIkAbiBgNr\nhgwhw9OTlAsvrLfv3tGj+Vkr7aAl8zTw40d5ecGRI+y76iqWVFRwcnOhub16tVywJyZKVEqdZZin\nwUCwszNfZWczzseHR2fP5uAdd+BqMlHeuzfbdzmxYQMS8qiZVs46q2XnrMu0aRLL3lTWbU2NRLdo\nJqfWEB0tWktenvy5uTXfPEeboLy97dnp+fl2wd7Jtdw7O24uDXDMF4+0bqtF9aef4rE7mNJPsnhY\nVXmouhoPg4G0qioiGygdOyq8fqH9Pv72UrnLEpcxM24m14+4HnWPKzUnKxhWriRj4kQA3n/1NSq8\n3fA0GHjAWip1YaQL03+8i7LYh0m+4QZsXUM3bqTcXM7CjW/g4uTCjSNvJLU4lQifCD6f9TmBHoHE\n+scS4B5AXkUe61PXU2IqYUTYCFYeWcmFgy5k/tr5/HLwF/6a/RdpJWlE+kQyrfc03tvyHl/uFqF+\n/sDz+Xj3t5TUhNtKovpZBfujXSzUVVWu09RUUXgiIkSIK4oED2m5LR99JFFedVqu1iIsTAIZUlJq\n2+V17NjqsIwdy+T//AeA4AayOGtl7GrJMg7C8cGePXkuOZlBHh4QEkLckSNSSqA5WivYzzhDosm0\nC2XXLhg6lKiNG0muqsK/wBvWrqUPUKMoHHJ2ZvRosPhX4rwoAVNurgjltuZn+PuL49fVVaLY6kan\ngHjs3d3bVsfJYBAfxo4dcgM4LlOb4tprJfdFi2k/80zYtEmep6XZs1tbyKpVq1i1alXLhtyqI7ee\nTUCsoii9FEVxAS4Bltbba/Zs+k98EM+rZvPstdfyZ0EB64uLiVq/vsXd3N2MbuTfl8/8U+fz2KrH\n6OPXB5YsQbnqKgynTgMvLzZ5eXFhdjYXrNyA727R6mvUGl7f8DoLty0kNe13pvp41mrUvDNrJ57P\nenL7L7dz0083AXDrsltJLkpmXOQ4Yv3FjBPkEUR2WTZ7c/ZyxdAruGzwZaw8shKA5QeXs/qoZMcV\nVhbi7+7PmIgxOBnsztBlicvYWpAO1XZnU1f3AD3lFPEZRUVJ9nlCgtw/J59s32f0aEk+2rxZckk2\nbGhasMfFiemxPSXNjzVffQUPPnjszudjNHK4spIUh4bnLs3ZnjUTw5ln2jY9YVUIbLWFnJxaZuqI\nihLB05L41IQEsTd7e9u1UWvJXVdrM44Du+xixuzszIRt28QSE1aBWVXlHm9v0p1W52l9w76tNpth\nNOLjYedO8QVYFcRm+d//xAmVkiLRBppQd3W115pqBVOnTuWJJ56w/TVFpwp2VVWrgduAFcAe4CtV\nVet9o8V+I8n5owelTnLRlVdVsdUqXHe2IjbOz93PZsbp7ddbakIA144Zw+mPPcbdt9zCbdOm8f2K\n17l/3lRAMljnLp/LxnSJsQ00WGp192moDryzwZkvz6/t8Y7yjWJb3lGuXzYXo8HIlOgprE1Zi6qq\nmGvsle4KKgvo4dYDRVFs5pyXTnuJV/55hZ1FOVAoTi7Djju7tJRtVZXcnx98IPd4WppdsD/7bG2z\nIdgrmG7e3LRCYzCInb6bBPi0iEsvhfnzj935fJyceCIpiZ7r1+NuMLA3PLz5TEZ3d5kxHRpluBgM\nqFOntr4SqJubmCzuu0/q0TQVSpiYKBfF7NkSBbJ5s1Q6BL6eMYO8c8/l8GEox53sgDi+GDAAf6NR\n5hdvsbMvzc2tFxbZarTom61b7UmGjsyaJUvOttKnj4Q8JiS0ruF4RIR85rrr5PWSJVKmQJsEO4lO\nt7GrqrpcVdX+qqr2VVW1wdtj5lBvonsqMHcos/5cR/rhw2yw2qBGtLIN1oBAKao0OHiwLdj6Q2dn\nfouLY8aWLUzy86Nv/Cm8WvobW9K3cMV3VwCimfu6+pKUs50cs5nVR1eTXJRMVlkWN464kWWXLcPH\n1Qdl1Sr2EUBMD3slSN81a3D1iuYL97NQTlrCk1OfwuDZh90RN2N42pXCSllGf7PnGxbtWUQPNxHY\nWrbsnLFzKKwsZF3uEQZ6+XNe1gJqCrc3Gefe2Tz9tDxq/Qyqq+2C3WCoX3hvxQoxde7Z03BRPkcm\nTpQgBrNZFMidO1s2pjJTWfM7dTCaXuHmZo/46Wx8HFZqzorCgH797M6MpujIFZ6/vzgBzz1XbOCO\npiDH6zIhQeJYx4+XmuSaJjpzJoHFxfiXlDBg0ZMYqeaxs7cyIzCQLJMJNayCniPEJj5rzx7Wtdfm\nPH26aNWbNklxrrqae3vb6fXuLYI9N7d1tWD8/UUr+v13mShnzoSxY1tUtqE9dAvnqaLAp5/CS1f5\nE5ZhYU1lJd86ZHuVWD3oldXVtvToxvB186XmsRomufYFX1/yHQoafXPbbSiKQr8AyZY563O7PbLU\nVMrg4MFsPrqSx5KSmPLRVOYun0t2WTYxfjGc1fcs+vhLll5SxHWEe0tZgSKLheLqatKce4HRA9Xg\nwl8VzizKzQefgRAwnr05e/Fx9eGNTVJPwttVHF1aUpWzkzODggeBsx8X95vGdxcvxsfVxzYhHGtM\nJvjpJ7u5ZOZMEb7vvtt0c6jAQAl7bE6we3vLal+bNJoqAqhxKP8QXs813rats0hLE7nl4SG5NFrV\niZ9/7ryotWkOzs0uC3P1r5PJrV0Mqioz+4oVoiXv3y/RO337Sny39s+89VbbR09f9wTlLr68+4k7\n8XFOWMqd4PMNJM+0lyXOaG+ru1tuqa0F79/fvuPVJSZG/ulLl7augqvjqlurBjl4cMvCM9tBtxDs\nII7n0aPBpcCJ74xGrg0NZfdoCWncWVZGRXU1nmvWMKoFM6+iKPDcc3DaaWw75RR8nZx4tU8fnK3O\nJmcnZ1ZcsYKc8hxuH3M7M+Pkov35sp+Z2vc8OYizL54uPiSUFRLmJbG2Qd52P7C7WyD7ysrosVay\nZI/WuOOBmbsiwthcUsKe8nKm+/kR0lvMQX39+9pi2z2cRftadvkyll++HIBnTn6GmUNmE+oq74V5\nhZFR6tBkoAksNRbe2tRAw4I2Mnas+Inee0+S7t5/XxSgykq5fxtDi8hsSSjyiBH2HgtXX127/HVd\nMksziV0gvoxjrbWnpspq2t/fnl2bkdG5K+kxPj7UWAtbFXdQl6RW41gL/quvRMNUVXunoM2bRQse\nMEDMNpGRYi6aM0fMHqecUutwNR4yKR88CNWlDmInT2zrmSZTi8q9tBjHMMy4OJmFV65s+/EcezW0\nxkTq6ODWtKLwcLFlduKKvNsIdhBNryrNBVVRuDA4mEGenswMDGTitm14rFlDDXCkpR1TliyBRx4h\nsbyci4KDuaNOCIa/u2gkI8NG8sJpL7D4osX4uvny4ZhZssNJ33HY2JMfelxGbJCElO3vJQlQsW6u\nZJpMrHAoMv5Fdjb39IplUg9/Xk9LY3NJCQ9FR1Pi0Y8hYWMI8gzCoBjIviebEWFiozu9z+mcEXsG\nAIp7ON8VVdkaVvTx78Njfz7WZKkEjb05e7l12a0dpuF7e0sNtMBAmWwDAiRM+L77mhbsWq5JU85T\njaFDwVrTiqSkppP0wl62Z7AeKjjU+I4dyOTJ0hYzLU1kluO9PHMmPPKIPO+se1NRFKb4+tYrsHXM\n0DI53dykXZy7uzgOBw+W7YWFIsi1+vuOYYRnny2C9N13obSU70JvJmvaFfb3D8iK9eO4OEa9P5Iz\nzWGkVlThEWLmm5VVrCwo4NO6TpzWovkFiotlnEZj+5rgODbbaEtjmPPOszuiPD1lPJ0Y8titBHu/\nfpBtHkFkTg4TLRY47TQy6jhPe7u7s6O0FKWpsJ9Fi6C0FMuQIcw5eLDB/qCaYO8f2J9Y/1hmDRCB\n7lh+9B9vKS/g7h1DgdlMssmaAejqRrbZzN6y2trjHZGRthjhTJOJMd7eRLl58PXlKwnyCGJU+CiC\nPBtONFpg7UzvYXV0zeg/g8X7FtsiaxqjRq3h2TVSjeuFvxto4dUGSkvrt389/XR4/vmmnZ7XXivV\nS1viq9MqIGuPDTWpqcvAoIF8vP3j5nfsANaskVV3aqoIds06ctZZ9ppVIN+1vX2VG2PZ0KHsGD26\n+R07g3/+kUScigoRQkajhDVqrF0r1Rm1RB1Hk5FWV+nGGylVPbm28i2c5j1lf//JQVRNnsxVoaGM\njHYlIMeHxFwTPL+Ty9nAbYmJXNVWU8r69VIdUhPs2gQVEtKyC7MpLBaZydvS6Oaqq2q/Dglpf9/W\nJuhWgl1RoMD7ZA7Mvgandevg99+Zs2FDrX0yTSY+sBYNatS5uGwZzJ9PclUVZlXFowFppAn2Pn59\n6r13VR0j8eqiUg45rBODnZ3JMZspsFh4uGdPPrRe3H7OzvgajXw7aBDDvLxwNhjwNhopqa4mzCuM\nCVETGv3uWiW8OKuT7MaRN3LnuDvZlbWr0c8APPbnY3y952uCPYN5bu1z7dLaU1JEicjNbVsjqJCQ\nWqbVJtEqH0+2Jujm5oocaYy/r/2bxyY/RnJxcuM7dTCurnZTjGO+Wl2aMiO1Bw8nJ3y7KuR13Lja\n9VDqeo212WzWLPu2558HwOwTgNVCyf33i3Lft69Yb5YsgXffNOBiFbLR0VCR4kJqhQkiKjAbatoX\n5jt2rJQYqCvYW2IfbI62hnJVV9eP7w0K6tTqj91KsAMUlRjwKC+DGTP4x286l95xB/1n+kOiF+6V\nzgz38uJPqwmkuLE420OHIC7OVui/pAE7pY+rD/eedC+BHvUl2McDBvBFv2gAnGpMLM7M41BlJWf6\n+7N+xAhbHYwii4WJvr7MDgtDdSgudH5QENtGSRKVlmzy4KQHeXjSw/XOpZFaVcVvQ4dKUSUrQ0OG\n8t3+75osLjZvjbQ3u2bYNUyNnsrGtI2N7tsco0bJqiknx24v7yxOOkmCDDQfuZdXw3klVZYqjAYj\n4yPHE+wZ3L42iC1E8//V1NhNMVqenLYKt3alA8Shunu3BIacsBw6VN/h98gj0L8/P/1kVdjvuw8y\nMvg4YTyTpJYfR49KuSVFgZEjRb7deKP9EIMHw5IPXNhiKAAfuU/L0sTuPvjelvmY6pJW4S/pzYpi\nT9hqqhpjZ9PQSsHX1951JiWlw2163U6w5+TAS0i5y+sLxLTwVuEd+N0ZRf87Igl2dmaPtWB/juZJ\n37JFrhhNqy4sZEOCH3vyxD4d7xDbazLJjVhUpPDCaS80Wtv80vBo8sfGc8mGkazdUs3BigriPT0Z\n6+NDsIsL2WYzRRZLsxqVj9HI0aoqvskvt0XDNERaVZWt0YLG4ODBbEjbwFN/PdXgZxxXLHePv5ue\nvj1JK66X2NsijhwRf1NWluSKdHa/bEURf1RkpCiHiYkiN0wmUbYeekj2yynPIcgjCEVRCPIMIqus\n85avGprfMD9fzLORkfDJJzIRaTH6AweKxe+DD8QhuH69/JnNjR/3uKZ3b7Gnp6dLFtpFF9liYq3J\nsUJoaC1T1f79TfecGD0ayLcK8qOhUGVgx1ETLA1jz9kHuG5PyzoRffuttFGYOxdmXe+HaZ01GSgv\nT9rVvfturf27MJJY0AR7SYloC4215Gwj3U6wV1TAa9zBHgayl0HseXEZp/An+WWhbDwQi6dDqV5b\nSOSKFaIW/PWXvC4s5IIb/Vi0upJHevXiUgfTSlKSrCq/+KL5sSxd5Mfnb7uDl4XnP61g1wrRpoM1\njb26ulnB7u3kxDvp6dyYkIC5kSQMVVVJraqq5ygbGTaSO8fdyZHCIyTmJWKpsVCj1tjaAzr2iA3y\nDGpVJE1dfvvNvlo8lvXGXnm9gnXrZKXs5CTmj4AACWpKT5dG5ZpfQuugVbfZSkeTkCACZ/t2u2D3\n9JSJaOpU6a0cFQUXXigRPZmZ9uY/Dm1KT0zCwiSb0ur5rhuleOAAPP64PM/PlxVPUxVuQ0LgynNF\nsE8K8cYl1w0GF8NaWUkvzMng/ffFhNMUDzwgiXOvvw75+ONSWSKROVu2yAzsIAPS00WJHjmyCydi\nX1+J+dfqULXXWVyHbinY04hkMHtYsQIGnWu3gTtjsWnhiwcN4kutmpT2aLVZqQUFFNKDUp8Ketep\nNaPdeG+/3fSsbTJZTQOlTuBpocS7grSNItgDnZ15Oz2dPLO5WcFebLGw2dpaa591pVFZx4T0S34+\n5TU1eNc5lqIonN33bL7Y9QX93ujHGxvfwOkpJwa+NVC+dlk2BsXAmmvWABDqFcrhgsP16tK3hCNH\npKcAHLtV65b0LXg862Hzu91wQ+33IyJge6Jo7CA5CtcPv54NqRvoLFRVIvvGjpXXr71W2zzr6iql\nh8hNPT4AACAASURBVDWbu9EoJt3ffpPXycfOBdAtePttefT0lOTKyx1q8wUESIRUY5U+NSpK5QLo\n1x8GJMrFN9XLn4sre8FuH258sYTzz5dzLLUWJHEMOU1MtPtnXF1FsANYho2UuFoH8ybYKh6wdWuH\ny9OWc/So9HnQNMwOznzrdoL9tdck1M5kskYH9e0r07AVn7f78FffUcwIDCTdZCK5shKys6np4UdB\nYi41TzyJUlZGKV7kuVTQ292d/Hy58X79VRz511xj1QabMNfaKhCWGsHPDNFl+JbJBTLMywsVSU5q\nrrH01aGhTPf3Z6KvL4kVFewoLcV9zRoKrKpC1D//cPauXY32MQ3ztof6afXmteqVueW5nBR1EhN7\nSu2KGf1n8L9t/yP4pWCWH1ze5LjqcuSIaKTr1sHnn7fqoy2i0lJZb0zaiqOgQnwmzz0Hb75pj0gB\nWPRzTq1IorjAOA7kdVyj4LKy2iVRnJ1FI9f6rUyb1vwxBg+WeH8/P4n//zd1iFqwACZNEoVs4UJR\nkC+5BL75Rt5vLlkN7L91Ty8XzjeGc9XiCfy5UuHhiUEwoBjek9yV8nL4+2/Z9/rr7SXRX3nFfqyq\nKkguktjUXNeGa1ukOVgrO6rSqKqq3HjgAI+0sPuUzb6usWZNxwzESrcT7NdeK3XtbbO8Vvi/ooKM\ngEHkfXGA/T974aQonOXvz9LcXMjJYXfNQN58KpcPn9RUJoUc50r6uLnx0UcSrnf77TLT+/nJfKE1\nR2+IzEyxDaYctnrCf4igJlNMJXFWA3QvNzcMzWQGzgwK4uehQymyWLhgzx4SrFr7vvJyyqqrSbU6\neA9qKmId4gLj+PWKX3nn7HcAWHLREowGI+ZqM38c/gN3o10bifGTJIriqmLO+vwsWy2alqAJ9vHj\nW168rjX8lfQXZ31+Frctu822TWs08u4Wu/3zlluk5MDIkfL6N7cbcDPaV13BnsG1TFDt5eqrZTIB\n0darqyUZacYMMbs0ZUbQ0EK5b7xRokBuvrnDhtftKSmRHATHigeBgXDBBRL1WDeBtSH++1/InzCB\nmYGB3H2XwuvPyM0f7OIindyBEeNk9tVW2ZoJRXut+WTi4sDTx4nrphzkwSMOXloHHAX70qUiYhYs\naF9PXsNff/F+RgbzkpNZX1doN8SSJVL+YM4c0TRXr277yRsaT4cerTNxc6Ny0EiGs832z7w6NJSX\nk5NRd+9mffFAhrKTk1jH00MX0X9oNeVOZrxNrvz0k+yvOcV69BAtQ2uO1BDJybLEjoyEkBsmwIcx\npKbYhfjC/v15r6n8+jp8Z03s0JKaUquq2ObQ/dy/EY3doBg4vc/ptiqSM+JmEOAeQG55Lk+tfqqe\nvfmSwfZOTwl5TcxcddAEe2dRXCXJGG9uetM2rtTiVLxcvGwrEEfCw+Gff1SqzUaujXrett3XzbfN\nIZ0Wi9hWFcVudtq4ET77TJ5ruW/Dh8s+f/5ZbxXfIJpg/+9/pbiiq6sInLrRbH/9Ze8vURfN7//m\nm5ILcDxQXi7hsWFhtfMQtKjAvn1bXlbFz9kZRVHw8LCHiQc62HDufU6M+VrqiBYCvmoVvPOOaP1D\nh4oDFaAkuA8ffeVWq35ZZqZYAtLSJJn2llvEGgIiXx0MA+1i/LZt7Ghu2RYRIWFo//d/UgWypqbR\nhKXDFRVkVLXOvHr8CHYg5uxBXDd+n61423A3b7JLSlEyMtjCSM7lRwawn2X7+3Dx3EqULDfOnq7w\n55+1e1E7OYmjsLFJ8uuvJdlOU6KdyuUCS0+3z+rXhIUx1Zq1oqrNJ5H1cXfnkuBgvrRekR9kZDDX\nwdPWWHSOxuiI0Vw3/DoMioGssixmfj0TFycXNt2wqdZ+X57/JdcNl0py+3NbluRRWip/HRHq2xiO\nTt3EPJlhv9z9JbPjZzca6RIWmwM1TiTvs5tierj1aFKwv/22JD42RHq6XcPbvVts6cXFMokfPGgX\nGo11PWuM004TQREdLX6C3FzJWg0Ksp8vPV1WAHfdVf/z+fmi8b79tqxW/+//Wnf+ruLoUXEiGwy1\nM5KffFIe+/VrmcbeGI51cm42buGuuyQgx2yW1fawYbIK791bftsdO+AKa4Krpie9IwtdVFUmoLff\ntveifu45MR1p9bjaakKracBZN2zz5pYfQFHsTQ7qkFpZSZ8NGwj/5x+2OiiCzXFcCXb8/Ij0LrI5\nPwI8nahwNlKjKGzG3nxjn6k3luAKfMrcbTa5GQ6dVnNzxS66b199gfzXX/b2plpHsbffFtu/Vg6j\nLp9/3rJktOFeXpTV1DDR15ffCgrYWlrK67GxfNpUPJgVH1cfPjj3AwBxIKZtwFRtoqdv/fTmd855\nh3vG38O+nJbVfD5yRIRSZ9ab+jPpT24fczun9T6NpMIknlvzHDuzdnLRoItsbQY1XJ9xZfXR1ewt\n2EJPlxEcPWofmCbYt6Rvoaiy/pL3s8/s7fvqUtexOWKEJE5OmyaJlGVlcvM//3zDn28MLy+4+GJ5\nHhEhYclaxcpHH5Xja8JuwQLpQ+GINt5bbpHHoUObP+e8eWJ+aGkP587gl18kHwEkHPT33+U31u6F\niy+uVR6+XfRzd+fpp+W3W71a7t+4OKkm+uGH9UPFX3tNHLeaBn/99fKYl2cX7D4+cg0MGwavvtq0\nz60p6tbzmezri2drs1wbEeyOxdFGbtnCohY6BY4vwe7tTbhPCQcOWKMQVAX3KhPlrq7sYwBJRomg\nKaIH5pAKLp3sziuviMf8zTcl8eTccyVnwcfH3qu6pkZ+1+pquUisuUW2ZJRzz5X42DFj7LXyHdG6\ngjVno9P6WU6yXvkfxcVxe2QkV7RSVX7r7Ld4YdoLPHfqc7WadWgYDUaGhw1nf17LNPbdu+2p/Z3F\n2uS1PDzpYU6NOZUl+5cwb808nj3lWWL8Ykguqi1xTdUmW0PwwT3G2epOgQj2wwWHGfX+KC5bclmr\nxrBmjZgz9+yxb5s7V7TKoiIR7L6+7cs8j4uTaIvPPpMw73nzJETZsYey48SzYYP0PgZxNF5+uT2E\nMDtbfE0vvGCP+qislEnikUdE42xJ2G5nUFkpv6dWZaBXL7mfHEsynXFGvVpgreaioCBe6tMHo6Lw\nS1kOJpNMlJddZq9N1FDpluBgqVfm4iL398KFsn3zZlkhaZnPGkFBbRfsmvB93FokaV5MDAZFIb81\nsZQNCfa8PNJfeaVWGPS2Fi4rjjvB7lRWwqxZog1cdx14mao46+FfqPhzI7Mu3cLAYRbwMZHvXc5Q\nHw/uvFOWas7OctP+8IO9Fs/o0SLUMjJkqZyWBosX221tdZ2I0dENTqq2kKnmHOLjfHz4T0AAp1gr\nSk1pS80JpDrlvRPu5YGJDzS6T1xgXItNMd99J5nh6SXpLD1Qv8FVezFXmymsLCTQI5AYvxhWHlnJ\nHePu4MFJDxLhHUG5udzWCFzzGfx66FfWpa7jzMFj2eiQTBvqFWpzCh8trN++TYsaKymR2HLHOOsf\nfpCSHdr/9ccfRUD4+NgFe0vKnjeFr69d4Nx2mwj3qCiZ9F94QTTNBx4QwZOTY6/J8/LLcm3dcIN9\nFbl9u9jk779fzDPFxWLzf+IJeyZsW1p4toeDB+WeGTBAlKLGejp3FF8PGsR0f3/WFRdzgcOMfPPN\n9rIXdYW0hoeHCHZHWfjLL2KGrVtbLSJCVhuWmhpuOnAAUysaf9xjnXWfiIkhadw4Jvj6EuLiwo3N\nNUdxxM9P4qsd62osWkTqjh1M9/Zm7+jRvNOvHx9mZLSoT8NxJ9gpKWHOHCgoUImIAM+KCgxnSGZp\n1dgcSm7eDz+s47eCfAY0kz45bBi8+KL8s0FumNJSWQrv2lXf8RMS0nDcqybsmyuxHO7qytIhQxjj\n48OC2NhaBcc6mn4B/UjMS2T5weVNliQAEYb9+sFL615ixlczmty3LWSXZRPkEYSTwUk6WwFTo6cC\n2Orjf7nrS/488idzfpkDQIWlgt8P/86kgf04etRuq3ZxciHII4hLB19aL2Z/1y4RoIMHw913izN4\n8WJ5z2SS/8+IEXZHn6ZN+vqK0Cwr65iM29RUGW+PHqJZa4lf994rGjyIUHf0+0yaJL4fHx+7YHdc\nWXz+ee1uapWV4qxtSQBGRzJ8uDietYSsgQM7/5yOIcXB4f/f3nmHR1WlDfx30nsnnRCEJIQeBKSD\niqwVUBRFcUXws4Cuq+KuinWXtfcCioIIVmyAgqKoKFWpIRJMKEmAJKSR3pO53x9n7mQC6ZlkUs7v\neebJzK3vzZ1573ve8xYDX3whH2xTpkhXS0MRx15e5/TZrtM9NGyY9NH/mJPHsvR0ps4rb3KUjLON\nDR9GywY/vZycEEJwtLSUL7OzKW3qQS65RA4dly6ViunAAYiP52hwMBGFhUS7unJHcDDVQEZFBXc1\nFNJHZ1Ts27Yx4P/GoGGDl0sFrqWl/FZcxGO9epEckUGFh1RiJ8rLiW7E/NILUOk+1fffl0M2V9ea\n6qTmBAbWXZAtPV1OtJ79BaqLhATISrHj7raIKTTDzcGN0qpSLvvoMhwXOzb4lD+ZnYtfQCWBbtIl\nVFje9EmahsgtzaWgvICTBSdNjUnODzqfjTduNCl2kLH6d393Nxetuogo3yhemvISF4TImetwv0Dc\n3GpHmGQ+mMnHMz6mj08f4jLj2LFDuj42b5bVUfv2lTXkXT3LuTFRUFFdwbZt8p56eMi5BE2rsc51\ni72oqFZnuRZztitn8WLZowFqJuRr/Z9ya4qL6bKAnJy87jppzA0YICdozfHzk778jIymfffqYuZM\nGSjQmBGoR+3Y2MgHzD//KScm6+g1b3G8zKJjDiVVMWOGfD98uPzfNoSnZ83/Tbfs9bh5czw85Ouv\nbGkobDpU0uQs4hPl5fQ56x/xkVHR72pqad6pU2XUxvr18gmTkED1kSPERkYSkV4TeBDp7ExiaSlv\nm9dtqIPOp9gBsUtWlpu44UHOGN0ZN/r7U+VQhbeP/IYOc3Ors1zv2Yd78snaaeANxS0HBtZtsael\nSYu3KZPW/fo1LenFUrg7uGMjbMgvz2fp7qX0fq12TOPk12/n1E0+PBs332TZ3/DlDaYHgaZpLPxh\nIQdOH2i2wu/zeh+u/uxq4rPiZYcopIV+WcRl2JmVhtAbmYCMnonyjSLKV47xPR09CQ6uXSpXp7dX\nb04VnGL2bOmnvv9+6S4LCQEC9zP4QmnV7E/fXyubFODiVRfz9eGv5TmMZTv0SWRL4+4uO7eBHPUt\nXiwt+TfewHR+neBgaShUVkqr+LrrpE84Kkr66ufNk66ZSy6R2y1fLr+XLZ0j+fxzGVJdl4tRZ+FC\naeyUlsqRQlSUnGy8446WnbMlfGJUlL81c4ji5CT71b7yirzG7Oz6o7/8/CAp3zi6fT6OfScb7oVw\nsKiIpampnCgrI+wsxX5jQACPhIXxXHNSkYcOrVWo6LaLL+aXIUM4PyFBDtlSUwlxdOTPs8qF10Xn\nUuxn3ZFhW19HM/qr+7m6EujogKN3NbP8/dk7fHijIYRQkz6vz57X568D+aNMT5d+Wb1rfWamVOgD\nBjRNsUPTYqMtxfnB5xPuFU52STYHMw6SnJdsWldcDD/lvgvA5uTvTRmgG49sJLM4k6W7l3Iw4yAv\n7XyJmHdi8Hi26Q7dx35+jNyyXH5O+pn7Nt1n6kVbF7o1D5CUl0SoRyhXR19NsHswQoj6AgbwdfHl\nr5ScWtbqeecZfeh3DiN+kPSBbD+5nYSEGn9wtaGan5N+Nvnz/fzkfTxypOFGIpZi0SLpe9cbkph/\nTZ2d5WTgm2/KEkh66GV4uHQ1TZ4sFdWmTbUtz5b0Pc/LkyOUiRMb7iS3ebO06DMy5E/QGt36bjCm\nsM4w9081AX2kp5eTPtu9Wm7mS7cZkcum0zUPjkOnG3ZhPpaUxPwjR8itqiKwDn/QHcHBHGhODKV5\nreyMDP40Fm0KXbJExnE+9BABBgO79Iy6Buhcir2OcbK9mZYMcHDgYHExjzSjw8nUqTJs7G5jQmRQ\nUP3bBgbKH/8nn8gerSAn4C68sMZPWx8pKTXW4FnNnNqUANcAerj0IKs4Cw9HqZh1y9x89JFRlEFu\nWS43D5YhGr+n/s78jfOZvHoy1w+4vtnnXby1ZoxcUF5QZ1imzuCAmvi+UwWnGOg/kPO8zyP1fqnN\ng4NluOrZ9dp9nX3Zti+7VqbnNddAv0HSb5BvK3fYcXIniYk1ij2tUJr/Bk3+qMPCZIhieyl2nZEj\na/eu0AkJkYW0li6VbiWoSajSmwAJAbNmySQhaLgXbX3oSWlRUXWH8erobuKYmLbNdWgqYssWtuTm\n8n8JCfxk1sWsLkaNkt+fswfvmqZx7Z9/4vTbbyxLSyO9vJzYm2NJ9DqDXbVUiydLG04Kcjb63Nxs\nbevMQPe1tye/uemsq1fL8sevvkqREPwZHi7dCgAVFfinp7MrOprpjZQg6FyKHeRspxl2Zv9Qvezt\ngGbMgPn7ywmtwECZ9NCQj1W3ikaNktbu1q2yjeKVV5rmdeslNlYqd6g/+9DSvHX5Wzw16SlCPUJ5\nb997PL9DlkHOLpFmjLlirzRUkpKfwswBM7ki4gq+SfjGtO38EfPZeGM9weFnYdAMVBvkl9nT0ZM3\nLpP+hhD3+iuL6f50gJsH33xOCGdAgPyfnd2y0s/FjxPZOQweDJMvL0bcdCXphekMGWN2YXtuZ2vK\ndv5KrDIpdn3UcrpIbhcWJic84+JapiBbSkAAfF9HSR9vb/ld0ssqgIwX79nzXMPD2VlOsrZkElVX\n7JGRchRQn59djyzKy7NcXHpLMJi1tnv2xAneS09ncmwsxQ0oz08+qd2+VWdDTg5fGs35OxITCTZr\ng9VHSP1xxK5h/3iu8YdcVM/5XWxsMGha0ydQQVrm994L+flkeHsT6O0t/W+ffw7HjxPwxhsc6dmT\nS4YObfAwnU+xL1xY897Tk7lBQVxtHMKsiIri+AUXNMkFUxeNWWv6YT095Zd8wgQZR9yzZ/2K/a+/\n5H7mWa7NLTy0ZUtNVmRjbN8u3UJCwIKR8+njFcX8EfNZcWCFaZuQl0M4nnucxESwr+jBm0P+IMgt\niAOnDxDiHkK0XzQbjmzgtpjbKF1UyoReE7i0r/xFN9Sa7vuj32P7H1tT6KKdjR13j7ybCb0mEN2j\nfldMiEeN0h/kP+ic9bp/+uywYD+bvsQX/EH//nD7Mz+jRWzg56SfySjOINRDTk6PzHsRJ4M3eUFf\nmtxsyXnJuDm4kVkib4STk6xPk5ratmUVmopuQJiPzP386q8c6e1NrdT5pnL8uHRdjR0rH2x1BQYY\nDNL9qDNvXvPPYynMf9d6V7TRHh581UAAuhDnhrCWVFdz1Z9/YicE/6pj+PxCaATXpvflsG/NjP3a\ntefmqeRUVnKxlxf/q+dLI4TAx97e9ABoMsHBfPj99+R6eOCth3D16QN79uBvHKGMbKR/a+dT7CD9\nJn/+CadOsahXL74yhrB429vX6kDUVlRU1O6Wo9fKOFuxl5XJyS+QccpPPSWt9mPHzq1jXR/LlklX\nz5IlTdt+3DiZmKGfd88eTP7tJyfUNOzYmrJVdr5xLOaWy6MJcAvgTOkZgt2DmRg+kfSidILcg0wF\nuPQf1Zx1c+o99/FcGcjv/6KM43tusgw3+nXOr/i7+te7H0DC3Qn8Nuc35g07V3OMHy9reqSlSau6\nvFyGC/7fhKlUh/7Km6l/59AZWQEwOS+ZjKIMhgQM4aNrPiK6jzsnNs3AK/KQKVolOS+ZmMAY05wC\n1LjHGisx2x7oselNrbPi5ycnNh9/vHnn0S12PZa+LjdkYqKUw2CQFn1L+jhbkleNvqmUsjJW9uvH\nVF/fJift6BwtLSXU0ZFDI0bwcFgYC4KD2R4TQ+ro0Thhw0V9XJlqCKHYqYKsigoqKmTI6tmWf05V\nFe9ERbGwgX+Kr50d2S0o+r7dOKNuo39pjbGx/sb2Xj0aqSrbORX7G29Is9QSsWktoKysJlQyIEBO\ngvn6npvevXev9F3qzVseeUT+MMLCGvZpmqO715555tzjl5fXfpjk58vEiyeflL0FFi6Uk2zbvg+E\njW/gfvwW/nnBP4nwHEB6fg4paSUgqnG1d8XFXpo1PVx7mNwmAa61a67+ftvvpjj0utB914P8B7H6\n6tV1Kun6iPSNZHyv8TjY1v2FDQ6WLrPBg2W6+EMPAdVy288TV7MnbQ/jwsaRkp9Cdkk2/q7+3Djo\nRpmmnx1FpWcC41aMY/m+5TWKvaxGsY8de27SirXQDdOmPmTs7aXl/d//yu9EfWhazfrKSjk521g1\niz/+kNFE1pgwrYt7Q0MZ7+nJgaIighwciHBxIams4eiVs/klL4/xnp5EurjgZW/Pm5GRjPH0JNjR\nkdJJE3C1tcXHS1DpUI3/jh2m74X5HJpB00gvLye4EQUb5uTEpjNnmpRUpPO/lBTeLivjbb2DOpgm\nN/yNTQsai/jrnIrditxyixyOTpkikzNOn5YWlp5JaE5enoxiuP12OcmlFyaKjKzb71cXgYHy4eHj\nI+dUzLnzztrD9cOHZay23sFm+nSp5GfOFPzN+26O7AnjhcmvcOTr61nzbQ6pBWkEuMjIE70rk42w\nIcBNKnS9DLBOL89eFJQX8MCmByitLK217vKPLmfNoTWsu2Ede2/fy+zBs5t2gU3EvPnHF1/ISWvz\n8g4bjmzgovCLSM5LJq8sDy8n6c8YORKunxyFV58Etp/czt3f3U1GcQbRPaKJz4o3Xcf//V9NdUdr\nc+ON0ufdHPRou/oaR2Rnyxh0d3eppN98U4b56lE378kyRCY/e1aWzNTds6fuBt7WpJeTEwZgoKsr\nQQ4Oza58+F1ODjf4NzyCvOAC4L9ypDtmjPyfZWdDhcFAbFERmRUVeNjZ4dxIg+vksjL+dfw4O5sa\nzw6mYl8+5kMoW1vYsgV/Y5Uzl0bOqxR7M1m5Uir2iy6qnRno5yf9nFVVNaFh+fk1McrmHqKIiKYr\n9sxM2UvztdfODfnLyqrt0klIqG2B6QWaHn5YuoHeflsmo1Dqy+mCHLLKUwnzkhrz0QmPmkr+6h2L\nIn1rzyT6OPuQXZLNy7te5vfUmi5Ge9L28N3R7xjTcwyX9r0Ue1vL+zP03+Hx41LZODvLBBXtCY07\nzpcB1aNCR5GSn0J+eT6ejjXB4cueieR05RE8HD0oqyojrTCN3l7yoTV/43yLy9pahg+XserNQY8p\nry9v5ZNP5F/dK/DTT/Khr7dBnDdPKvBnn5Vx7WvWSMMgKakmLLOjoKu0IAcHghwcSGuqX9NIQmlp\no8mLfn4QkeoPFYLNv1Vz001Ssa/OyGDonj0kl5UR1oQh3hsREfSwtzcp638cOcKU2NgG97EVgmm+\nvkw2t9gBJk7Ew9cXbdKkRs+rFLuFsLOTk1729jVRNhs31l31MSKiab0xi4rkwyIsTPpCz84u1Eui\n6kWyMjJq+0mFkMp/8WKZ+wAyse1fd/uRnpuDc+AJenrJScapUVP5ZIb89dvb2rP66tXnuF3MFfbe\ntL1kl2TzW8pvjHhXmnQrp6+s15XSWnr3lqOR3r2l1Wk+kRjhI2e9R4WOIrUglbTCNDydav7xHo4e\n2NvYU1BeQIh7CMdyjxHoFoifix+xp2PZcXJHm8jcntx6qxzB1ddjYMcOaZTobNggFbc5//2vdBfO\nmFGTKfvtt03rgtSePNW7N78NHYoQgiAHBzIqKprs6vi9oIAqTaN3E1Jm7W0FnHbiYHExPoHVpGYY\nTHHvo/fvb1KQxsXe3jwUFsYRY+ruvsJCfszNNXVQy6msJM1sxFFhMHCwqIiHwsLwbsWEj1LsFkT3\nu2/eLP/+8kv9ir0ui33y5Nqx2idPSqVuYyMnxU+erIlbBjnsDgiQ0w3r1kmLwtw1A/KzjY30H+u1\nqi8Z6wsu2RQ5/kU/37qdrLMHz8ZGnPv10Gu9/5ryKz1e6MHElROxETaNTo62Fm/vmnK3v/9e07cc\n4Jroa+jp0RNvZ29igmJYvn95LYsd5EPJ0daRALcACsoL8HTyZOONG9l/ej9jV4w9x7XUGXn4YRn7\nXmp2KZomi4+tXXuuP/3sshm6IXjHHbJ+kj7a72iKvZeTE+ONoUNOtra42tqSU88EZVl1NZ5bt1Jt\nVPxb8/KY4eeHXRNKeA4aBBTbMWrfPg6MPM6LkXtYYPbDre+cZxPq6Mip8nLKDQZ8jco6zhjmNjk2\nlsjfa0a/kw4cIKG0lP6tLFqkFLsFufZa+VdvBJKWVneYYt++0mK/6y6ZCq9PgP70U43CWrRIJq/o\nPypHR5lI8o0MLyc9Xbok9Iy6tWuldX62YjfnySflA8DP1RfXHjnQ43CDYYh18e5V7/LT33/im8Rv\nTMvuGXkPGQvrbpbRFkRH1zxEQc4FnLhPmvB6q8DCitohSj/M/oFNszfh5yL/QZ6OnrUeRgczDrax\n1G1PWJj8Lrm41HxPUlKkW6esrHYo5y231ChuHUdH6Ur8+9/lZ13Rt1dz85YS5ODAhxkZHCgspLS6\nmvXZ2dxsrJi2LT+fgupqk1V8qKSkyUpz9WqYM0qGG+Z5FXPGU1pVb0ZEcGtgIHObmK0V6ODAV9nZ\nOP32G6fKywlycDCV9E0sKaHYLPs1vrgYByHwqKejWlNRit2CzJol44HNy/f+5z/nbtezp4xweftt\nWbxq7NiadXqs7OrV8gFhPsdTUSGbgFRVycCgm26Sk4Mgf8BZWQ2HyPXpIzNtfZ19KXaLg+ivG0z1\nrwshhKlY2D9GykqMesx4R6Bak//AOUPn1FoeExTDxPCJxATK2UIPR49aTbJHLR/VbjK2B1Onyr97\n90oD4f77a/zpAwbURGqdja2tnDgcPFhGHl14oWUqXrYlzjY23HfsGDF79+KydSsfZ2TwYUYGcUVF\npoiZFOPfQ8XFTU5gtLeH92MiWREVxUH7mq5dEc7OrOjXj0ebWFhoqJsb/Yw+/b9KShjl4cEdr78d\n1QAAIABJREFUiYlMiY2lwsyFdLi4mPzqavLHjWvScRtCKXYL06NH7c91tQazsamdfRoXV+O+2bOn\ndqEic7+6vs++fbIc7bx5NbVt9u+X+zal+45utQJE+DY/h153cwz0l2P5UaEdRynqVrhePuFs/nPh\nf0i9PxVbG1tc7F14acpLfH39123uSmovzOcRMzNlBNFVV8k8CiGkD/311xsO7bS1lZnSkyefm+3b\nEdk0ZAhbzDIx9fT+2YcPm9wlF8bGUq1pHC4poX8zi+5P8vLiZu+ayavIZubKeNjZcdDYvcffwYHD\nJSVkVlbyY24uVUbFnldZyWJjarpTIxEvTUEpdgujh7X26lXTS7Euzk5G05t/LFsmHw6HD8uJzs8+\nq9lGDzt76SXp5hk4UIZcrlolQyuFaLg6pY6zvTO/3PIL1Y9XmxKQmoM+MRnsHszJ+04yLqz1Foal\nWHblMk78s/6Keg62DrWKjt0/+n4uOe8SCsoLTLVjOjP29jVGwjPPSJeM3rYP5MR+a7sadTR87e0Z\nY9ZxRJ/gdLKxIaeqintCQqjSNA4XF+Nua9vsScnezs58MDgK/jWYr0rGt6iPgr3Rp+9tZ8eUs6Jd\nZvn74719O1vy8vha74zeSpRibyMcHWsiUerihx9ke7/bb5efL7pIulb02j56ww/zcqwrV0oLbM0a\nGUdvZyetK721WnPijSeFT6pzcrQpuNrLoayfi1+HcsMAuDu609OzeVXWXB1c8XD0OKf3amfl4ovl\n5Of778sIoobmXboK9jY2XGscLn+Vnc2C4GAKqqvJrqxkqJsbwQ4O7CooaLa1riME/M3Hhw1ftc6a\ndrGx4bWICCZ4etLTOGy62TiRllZRwUAL+b2UYm8DPDwar+t9ySVyqPv22zJc8aefpF997NiaicGz\nw1jt7Goscr3Rts7y5e3X3V4P89ITmboC4V7htUoad3b+9jeZR9HSPp6dkZVmYT99nJ05UVbG/sJC\n+jo742Fnx5HSUoJakV780EMNlzduDA9bW5Pi/jUmxqTYLzAbbViqJIpS7G1AUpK0rJuCEDLKQ38v\nhLTGoaaFmzl6ZMPZE/Jz57ZvAauChwoI9wpvvxO2MV1NsQshM5ybWzW2M+Nqa8ua/v0JdHBgRo8e\nlBgMxBYXM9bTE09bW1LKyvBuRbSJ3vQcoLiimLKq5qUqZ44dy+tmlQazjP5/H3t7Jhjjom0tVLuh\nVYpdCPG8EOKwEOKAEOJLIYSH2bqHhRBHjOuntF7UzoOPT91KuanoXfPqusd65T9r/2DdHVtxgR2Q\ncM+updhBJsjpiUbdhev8/UkfM4YwJyf2nX8+70RGYmsMH/w8KwuvVih28360fd/oy41f3tjg9kuX\n1m6k7Whjg4NZ/PxdwcH80/hjfycykp16fQcL0LpgSfgBeEjTNIMQ4lngYeBhIUR/YCYQDYQCm4UQ\nEVpzKuF0Yy68sOG64Fu3yua7CssR7hXOgdMHrC2GRenTp+Ut87oCMe7uxBgtrKLqagzIzM6Woldw\nXbp7KaeLTnOy4OQ526SlyQCIJ5+E+fNrmsTUxX1mJYP7WTimtFUWu6ZpmzXNFEqwC6nEAaYCn2qa\nVqVpWjJwBBjZmnN1Jxqr/jhu3Lk1phWtI9wrnOT85Ea3+zPzT04VnGp7gRQW5Vnj5FRLSujquLvL\n6DO9vlBJZQlTVk/hxS3LTEXbXnlF1mXSG6jExzdccbOtsKSPfS6gt9kJAcwfZ6nGZQpFhyTcK5wf\njv3Agg0LGtxu0NJB3PDFDe0klcJSTPDyYtewYfyvKfHA9eDgIEs0eFXIkMT4rHh+PP4jaw9u5pU3\nyqisrjQVBnzlFfn3kUfgvvtqHyc/H/75zxaL0SQaVexCiB+FEAfNXnHGv1eZbbMIqNQ07ZM2lVah\naCN6eckShkv2nNvRZMzyMSz6aZHpc1eId++OXODhQUAj9dObQtWZUDbeuJGnL3oagOzCPDKnXMqw\nt0eYCvLZ2ckqnXBuVdbt25sXwVZd3Xyrv1Efu6ZplzS0XggxB7gcME97SAXMg4lDjcvq5Em9mwQw\nadIkJjWhLKVCYUlc7F346JqPuG39bQxeOpjHJz6OnY0duaW57Dy1k/SidG6NuRUAR7sO0pFD0e7c\neSd87pnPqnc92b3uAT5bM5BZX8+A8Er+zLSBFFlSOi5O9kLWM8lBKuj33qtxoxoMUF8tsieekLkI\nf/whc12+/x4efHALu3dvISSkcVesaM18phDiUuAlYIKmaTlmy/sDHwEXIF0wPwJ1Tp4KIdScqqLD\n4Pe8HzmlOVwYfiG/JP9Sa51AMDRwKJWGSuLuirOShAprsvGHUq7Y6YLzikN4lPfn229h5Ld2aFX2\nUO3I5UePcXCXL6dOycJ80+cexWbeRKqfT+W332DiRFkW+csvZTHADz+UtXk0TS7LzJSTrldeKSOa\nDAYZSGFe5vvhh+Hpp2U+iaZpdcZHttbH/gbgBvwohNgnhFgCoGlaPLAGiEf63ecr7a3oDDw87mEi\nfCLOUeoAGho3DLyBzOJmdiNXdGpc/udCYk4iAFfsNLaQdA5i9GjZlERbup+In2LxFX256fFNXCr7\nvstCbP+IwOCaxq59RezaJZd/+aX8e/QovPuujKSxsZF9ihcsgKziLNw9pLtvwZePktX35VryNCWU\nurVRMRGapvXSNG2Y8TXfbN0zmqb11TQtWtO0H1pzHoWivXhgzAO8e9W75yy/Z+Q9AEzoNYEzpWeU\nn72bUFJZQmlVKVFvRvHBgQ/kwnXL8XXxJjxc1uMhcxCHfoskx3EvN311E3Pnys3M81BGX32Af/+7\nJhlRD2fOzq5dFtnBqQr/F/35PWcTXl6w9ND/KIz5Xy2ZmtAjpONmnoaHhyOE6FKv8CaW+VRYF73X\n6/ob1nPsH8f4dta3pkJngwMG4+noSXxWvDVFVLQTx3NranDPWTeH87zPIyRzLpGRNaWRQRZfe37y\n8wCM+UGwcv8HaJqGnY0dHPg7BO8BYNs26XbRE1DNXSzbt0PIQNlpJym5iuk3yGbrBsczuPSV+wcF\n1W5gXx+tTVBqM1JSUprV2bsz0JRWWgrrE+IuTaiYoBhCPUI5z/s8KqsrOXjnQVzsXbhz+J28t+89\nXr30VStLqmhrDpw+QC/PXqTky5K61YZqEhNl8T0HB5ldOmeO3PbBsQ/yr82y4/ycdXNMvQFImQi9\nf2b0aJmVfuzMMRw8fABvDoXPx95zIPuXzcfFBZJykwHoMyqelYFTcSzpTblLEiWzR3BgusZPP8me\nD43RYS12hcJa2NrYknZ/Wq3Klfa29gwKGATA1f2u5vuj31tLPEU7cTDjIMv2LuPBMQ8SP79mhObi\nIqu3CiGjZMxdI7MGzjK9n7d+HlWGKq4YMhq7qB/od+8DiKcEfd/oy9dRPvzyezaMWIrhwkcYMEAW\nDvSa/hQAw6+SWdDl5TXG7aDBBry8ZB/kxlCKXaGogyD3oHrXxQTFkF2STWpBvRG8ii7AkLeHsPXE\nVq4feD3RPaKZFzOPBSMaTmBbOGYhIHsDLxy9kL4+ffn2/WjGRw3k/b9qT4Je+F0PyBiIZlNJYXkh\nQoBr8AkifCL47NCnADj7ZcHThXg6epJakEpAgIycaQyl2BWKZmIjbBgUMIhDWYesLYqiDenj3Yfr\n+l9n6jj23tT3eHDsgw3uMyxoGNoTGu9NfY8XprzAkXtk8+t+fjUlhc2tf3Y8iGtZhCnqxsnOieHB\nw02rS6uLSU50o1qrJuzVMPKc9/PdBYI1h9Y0KIdS7ApFC+jv15/DWYetLYaiDdHQ+N9F/2t8wyZw\n/YCaNla9vXvXtKc8PYRg92BOF50GZBN2fd3n133O65e+Tq9eskwwwOytsvrf9V+YtcWqA6XYW8mk\nSZPw8fGhshXFhRSdj/49+qvImC5MUUURGUUZplITrWVi+EQ+uuYjABxtHclcmEni3YlUnhrCqEH+\nptyIwvJCrh9wPU9f9DTX9r+Wey6QYbb2ts1r56cUeytISUlh27Zt2NjYsH79emuLo2hHontE81dO\nK9rpKDo0+9P3M9B/IA62ra8to+NoK0tR6OHPEb4R2NnJBuwZxRlUGaoory5nTM8xPDz+4Vr77pi7\ng2uirzF9Xj6l4U4+SrG3glWrVjF69GjmzJnDypUrrS2Ooh0J9wonJS/F2mIo2ohTBacs3iEs0C2w\nzuU9PXqyJ20PK/avwKAZ6gyLPj/4fB6f8Lg8zqps/LJmNHiuVtWKsQT11Yox1kGwgkRNJyIigoUL\nFzJixAhGjRpFamoqPYwNdeuiM1yTommUV5Xj/ow7pYtKsbVpXYNjRcfjlZ2vkJKfYvFchcziTPxd\n/WstKygvIPDFQEqrSgHQnqhbR1Qbqvkg9gPmDTOmttJ2tWKsit4jtLWvlrBt2zZOnDjBzJkzGTZs\nGH379uXjjz+27AUqOiyOdo74OPuQUZxhbVEUbUB6UXq9FnZrOFupA3g4ehDmGQbAiX+eqHdfWxtb\n5sbMJTZWFhBriE6t2DXNMq+WsGrVKqZMmYK3tzcAs2bN4oMPPrDg1Sk6OuXV5Vz64aVUVFdYWxSF\nhfk28VsuCLmg3c7Xx0f2MGwof0InOrrx7NMOW1KgI1NWVsaaNWswGAwEBckbUVFRQV5eHnFxcQwa\nNMjKEirag7yyPPLK8rjz2zt56/K3cLZ3trZICgtg0Awk5iSa6gO1B/Y2MurFzqZxlWxvL3vZHmog\njaJTW+zW4uuvv8bOzo7Dhw8TGxtLbGwshw8fZvz48cpq74a8f+B9Pjz4obXFUFgATdNIK0zD1cG1\n2SGGrWFa1DTmDp3b+IZGBgxoeL1S7C1g1apVzJ07l5CQEPz9/U2vBQsW8PHHH2NoRSd0RefBx9nH\n9P6bxG/UxHgXYOmepfR8pSe+zr7tet5bY25l+bTlTd6+McWuomLaka54Td2ZvLI8HGwdWPvXWm76\n6iZ2zN3B6J6jrS2WohXMWzePFQdWcH7Q+ey5fY+1xamXrVthwoQuGhWjUFgTLycvXOxduCLiCgJc\nA9hxcoe1RVI0gTOlZ1i+bzmni06fY2gVVRYBsh5QR2b8+IbXq8lThaKVeDp58tC4h2o1ZVB0XL5J\n+IbbvrkNgK9mfsWa+DVMOW8KR88cNRXXivCNsKaIrUYpdoXCAvT06MmvKb9aWwxFEzB/AB89c5RP\n//yUtMI0fkv5DYBtt25jWNAwa4lnEZRiVygsQE/PnpzMPwlAZXUlQogmha4p2pcqQxV70/ey5PIl\n5JXlmRLMjp05ZtpmUMCgTh+62rEdSQpFJyHUI5RTBTJrJOadGGZ9OauRPRTtiV5i+YXtL7DhyAYG\n+g8k2D3YVAc9tTCVB8c8yNrr1+Lh6GFNUS2CMikUCgsQ4BpARnEGd3xzB4eyDqn+tlZk3V/riPCN\noH+P/lRWV1JQXkD/Jf354rovTHXPz/M+j/Lqcnad2kVPj56cLDjJ7MGzGRww2MrSWwZlsSsUFkAv\nBLZs3zIAU+0PRfsz/bPpXPrhpexO3Y3DYgd+PP4jANd+fi3FlcXEBMYQ7B5M/x79ySrJItI3kg+v\n/pCB/gOtLLnlUIpdobAQn8z4BICnJj3FxiMbKa0stbJE3Y/7vr8PgJMFJ7lo1UUAvLDjBdP65fuX\ns+SKJQghCHKT5UBc7F24afBNHT7EsTl0nStRKKzM5PMm8/zk53lg9AMAHMs91sgecjJv8/HNbS1a\nt+HDuA9ZMXUFILsgje05ln3p+2pto0e8CCGI9I1kTM8x7S5nW6N87C0kPDyczMxM7OzssLe3Z8yY\nMbz99tuEhIRYWzSFlfBz8TM1Ox7bcyy5pbmN7vNr8q9csvoSDI/X3WBB0XROF52m2lDNnKFziAmK\nYWjgUOIy4hj89mBO3ncSPxc/nOycau2TcHeClaRtW5TF3kKEEGzYsIGCggLS09Px9/fnnnvusbZY\nig6Ct7M3eWV5jW4384uZAOSU5rS1SF2e3am7OT/4fIQQDA0cCsBA/4GsvX4tIe4h5yj1roxS7K1A\nT0d2cHDg2muvJT5eNTdWSLycvJqk2M+UngFQWasWYF3COi7re1mtZUIIpvWb1u1GQ0qxW4CSkhI+\n++wzRo9WBaAUEi/HcxX7sTPHaiXCfBInJ1sv7n0x2SXZ7SpfV+RQ1qF2bY7RkenUPnbxlGWewvX1\nGGyM6dOnY2dnR1FREf7+/mzatMki8ig6PyEeISTlJdVa9trvr+Fg68CLU14E4KWdLxHkFoS3szfP\nbX+OcWHjukRyjLU4mX+Snp49rS1Gh6BTK/aWKmRLsW7dOi688EI0TWPt2rVMmDCBw4cP4+9/bl9D\nRfdifNh4rv7sap6c9KRJWSfkJJh6XmaXZJOcl8yBOw9w8aqLScxJxPNZT6t/pzsrFdUVZBZnmkIY\nuzvKFdMKdB+7EIKrr74aW1tbtm3bZmWpFB2BsWFjCXALIC4jzrQsMSeRjCJZm+TA6QMM9B9IqEco\nfX1qOhOnFaaZ/lpqRNod2HlyJ0MCh7Rr16OOjFLsFmLdunXk5eURHR1tbVEUHYQgtyAW/bwIgB4v\n9CA5L9mU0p6QnUCUbxQAX1z3BUfuOcKEXhNIyJbhd/oDoLyq3AqSdz4OZx9maMBQa4vRYejUrhhr\nc9VVV2Fra4sQgl69erFq1Sql2BUm+nj34e29b7MhcYNpcvR00Wme3vo08Vnx9PPrB4CzvTN9ffoS\n4BpAZnEmAAXlBQBcs+YaNty4wToX0InILc3F16V929l1ZJTF3kKSkpIoLi6moKCA/Px8Dh48yA03\n3GBtsRQdiCVXLOGKiCt4aedLzB06l8rHKskpzWHRz4v4KO4jerj0qLW9n4sf205IV54eBrnxyEaq\nDFVtKudnf37W6d0+Z0rP4O3kbW0xOgxKsSsUbYQQgr4+ffkl+Reujr4aOxs7DFpNo/MerrUV+/Hc\n47y5+000TeNM6RnmDp1LiHsIqQWpFpPp91O/n7NMHyW09QOkLckty63VXLy7YxHFLoR4QAhhEEL4\nmC17WAhxRAhxWAgxxRLnUSg6G6NDZW7DlD7yJzCx10TuGSkzlAW1reQV02SNk0d/fpS0wjR8XXyJ\n8I0gPqv5iW/Jecn8eOzHWsv+/eO/GbV8FIXlhbWW68k7TSmB0BEpqihi+f7luDu6W1uUDkOrfexC\niFDgEiDFbFk0MBOIBkKBzUKICO3szrEKRRdn5oCZjOk5BgdbBwC2zNkCyMm+s9uvBbsHM73fdJ7e\n9jQAr1/6Om4ObvyS/AuXRdTOqGyMRT8v4uO4j03hkwXlBTy/43kA0ovSTUrwhe0v8N3R7wDIL88/\nZxTRGYjLiMPJzolpUdOsLUqHwRKTp68ADwLrzZZNAz7VNK0KSBZCHAFGAueOAxWKLowQos6kmR9v\n/rGOreHr678m6s0oEnMS8XLyws3Brdm9VA9lHuLjuI8BKK4oZn3Ceo7lHiPSNxJ/V3/SC9OJ9I1k\nx8kd/Gvzv0z75ZflN+s8HYWDGQe5ceCNnb6dnSVplWIXQkwFTmqaFndWLYYQYKfZ51TjMoVC0QjP\nT36e6Z9NZ1jQMBJyEsgvb57CNS8DHPBiAMWVxYBsuB3qEUpKvhxcj10xttZ+zT1PR+FgxsEu0/nI\nUjSq2IUQPwIB5osADXgUeATphlEoFBZiWr9pJhfK6aLTTSomZk5SXhKOto5cFnEZa/9aa1r++MTH\nyS3NZXfqblM4JcCq6atYtm8Zx3OPc1HviyxzEe3I0dyjXBl5pbXF6FA0qtg1TatTcQshBgLhQKyQ\n5noosE8IMRJpoZv3Bgs1LquTJ5980vR+0qRJTJo0qXHJFYpugKeTZ7NdJEl5SXw842Ouib6GyupK\nkvKSKKsqY3DAYDYf38zGoxt5c/ebpu1vHnIzqw+u5h/f/YPbht1m6Utoc/LK8vB27vqhjlu2bGHL\nli1N2rbFrhhN0/4EAvXPQogkYJimablCiPXAR0KIl5EumL7AH/Udy1yxKxSKGrycvJrtIknKTaK3\nV28A7G3tifSNNK2L8IlgS/IW0+e3Ln8LgDcue4MrP+mcVm9+WT5eTl7WFqPNOdvofeqpp+rd1pKZ\npxrSTYOmafFCiDVAPFAJzFcRMQpF8wl0CySzOJOSyhJc7F0a3V7TNJLykujt3bvO9aEeoab3v9zy\nC5PCJwGy+fbJ/JMYNEOn6/2ZV5aHp6OntcXoUFjsDmqadp6maWfMPj+jaVpfTdOiNU37wVLn6Uh8\n/PHHjBgxAnd3d0JCQrjiiivYvn27tcVSdCHcHNwYGTKSSSsnNbptfFY8x3KP4WjrWK8Fa2tjS7hX\nONf1v86k1EGWNXB1cDVlvHYm8svz8XRSit2czvVo7kC8/PLL3H///Tz66KNkZmZy4sQJFixYwDff\nfGNt0RRdjOVTl7M7bTeNDXoHLBnAvPXzTG3h6iPp3iTWXLfmnOW+zr6Mem8UL+98uVXytiellaVU\nG6pxtlOhjuYoxd4CCgoKeOKJJ1iyZAnTpk3D2dkZW1tbLr/8cp599llri6foYoR7hePm4EZhRWG9\n25wqOAVA7OlYhgQMadF5fF18OZZ7jPf2vdei/a3BwYyDDPAf0O1a3zWGUuwtYOfOnZSXlzN9+nRr\ni6LoJvRw6UFWcVa9639NlklM+eX5DAlsmWJ3tHU0HaOzsP/0foYFDmt8w25G5y7ba6mndDPndXNy\ncvDz88PGRj0XFe2Dn4sfmcWZ9PHpU+f6tMI0pkVNI7skm6lRU1t0jvJqWfu92lDdYjnbm8ScRFP5\nY0UNnVszaZplXs3E19eX7OxsDAZD4xsrFBZgoP9AbvrqJpPL5WyySrIYFTqKbXO3tTj0b/vc7Xx+\n3edUa51HsR85c4QI3whri9Hh6NyK3UqMHj0aR0dH1q5d2/jGCoUFuOS8S0jKS+KL+C9qLf8i/gvu\n33Q/WSVZ59R3by42woZroq8hvyyfiuqKVh2rvUjMSSTCRyn2s1GKvQV4eHjw1FNPsWDBAtatW0dp\naSlVVVV8//33PPTQQ9YWT9EF0VP9neycai1/eefLvLLrFbKKsyxSmdFG2BDgFsD7+9/nUOahVh+v\nLakyVJGSl1Kve6o7oxR7C7n//vt5+eWXWbx4Mf7+/oSFhfHWW2+pCVVFmxDgFsBjEx7j1V2vkpyX\nbGqKoTdvPnrmqCnbtLUEuwdz54Y7uXXdrRY5XluxO3U3IR4h5zzsFJ198tTKzJo1i1mzZllbDEU3\noadHTxJyEuj9Wm/8Xf3JWJhh6siUkJNgMcs1xF0WYtUfGh2VMSvG4ObgZm0xOiTKYlcoOglTo6aa\nmnNkFmfK8gG5ScTPj2fV9FVNKjnQFAb5DwLAzqZj231RvlFsmr3J2mJ0SDr2nVMoFCYC3ALYe/te\nU+Pp139/ndTCVCJ8I4juEW2x89w14i5iM2Ipqiiy2DHbgjOlZ+jjrfzrdaEsdoWik/HfC/+Ll5MX\nL+58kXsvuNfilnWgWyCPTniU3LKO2wO12lBNblkuvi6+1halQ6IUu0LRyXh0wqPMHjSbUwWneGD0\nA21yDm8nb3JKcvB73o+T+Sfb5BytYU/aHiJ8Ijq8u8haKMWuUHRC/j3u37xwyQt19lO1BN7O3qTk\np5BTmnNO7Ly1qKyupLhCtvnbkryFv/X5m5Ul6rgoxa5QdEJCPUJZOGZhmx3fvL55Qk5Cm52nqcSe\njmXCygkEvRQEwKGsQwz0H2hlqTouahyjUCjOwdbGFpANOH5O+pkqQ5VV3R5D36kpRaxpGoeyDjF/\nxHyrydPRURa7QqGok/O8z2Pu0LmUVpXWW6OmLTFoBqoMVXx1+Ktay23+Y8O+9H3079G/3WXqLCiL\nXaFQ1MnRe44ihOCbxG/ILM4k3Cu8Xc8/b/08tqZs5VjuMQDi7oojKTeJqZ9OZdH4RXg4erSrPJ0J\nZbG3kPDwcFxcXPD09MTHx4dx48bxzjvvNNrlRqHoLOjNK3q4NlwLvq3YeXKnSanPHjybgf4DmRQ+\niVGho1h80eJ2l6czoRR7CxFCsGHDBvLz80lJSeGhhx7iueeeY968edYWTaGwKD1cepBZnNkmx04r\nTMPzWTlRe/TMUWJPx5rW6X7+u4bfxeqrVwPg7ujOznk720SWroRS7K1At87d3d258sor+eyzz/jg\ngw+Ij4+3smQKheWI9I3kcPbhBrdZeWAlXx/+utnHTi1IpaC8gMrqSoYvG15rktRGSPV0QcgFzT5u\nd0cpdgsyYsQIQkND2bp1q7VFUSgsxvDg4exN39vgNreuu5V565s/WtWLmC38YSH55fm42rua1um1\nb4YHD2/2cbs7nXryVGzZYpHjaJMmWeQ4AMHBwZw5c8Zix1MorE2YZxipBamNbqfR/PklvR7NO3vf\n4cmJT7L64GrTulMFp0i+N5leXr2afdzuTqdW7JZUyJYiNTUVHx8fa4uhUFiMILcgEnISEE8J3p/2\nPnOGzqm1/nTRaQBKKkvQNM006frYz49xfvD5TO9Xf4+C4kqZSVpeXc4VkVfw9LanMWgGvoj/grTC\nNMI8w9rmoro4yhVjQXbv3k1aWhrjxo2ztigKhcUw76G66di5ZXL3pu0l1COUMM8wdpzcYVq+eOti\n3tv3Xr3HfeSnR5ixZga2Qk6S9vbqjY+zD+mF6Xz919fMHz7f9JBQNA+l2C1AYWEh3377LbNmzeLm\nm29mwIAB1hZJobAYQggG9JDf6aNnjp6z/kT+Ca6IuIIZ0TP4KeknQFZfBBpshPHJn59QZagyTZL6\nOPsQ7hXOR3Ef8emfnxLlF2XpS+k2KMXeCq666io8PT0JCwvjmWeeYeHChaxYscLaYikUFmfb3G18\nOuNT4rPiEU8Jk/sFpGIP8wwj3CvclKGaVSLj3lML6/fNB7gGAFBpqATkAyTSN5IntjwBgL1Nx+7g\n1JHp1D52a5KUlGRtERSKdsPLyYvrB17PnHVzAMgoyiDQLRCAlPwULo+4HE9HT9YnrAej2iUHAAAH\n8klEQVTgk7hPcLR1ZNuJbexO3c3utN3cPPhm3B3dTcd0c3DjzcveZFL4JAb4yxFBuGc4ZVVlQI3/\nXdF8lMWuUCiazK1DZYNr3SIHabH38uxFqEeoyUJ/7ffX2DlvJ1P6TOGX5F9YsHEBg98ezIM/PGja\nL7M4k3Fh40xKHeDxiY9T9VgV7131HrcMuaWdrqrroRS7QqFoMkuuWMLMATNNJQYMmoHEnER6e/cm\nxCOE1IJU8svyyS7JZkjgEG4YcAO7Tu0CIDkvmXf3vWs6VkZxBv6u/rWOb2tji62NLfOGzaOHa4/2\nu7AuhnLFKBSKZtHToyc3fnUjJZUlhHuF4+fiR6hHKAbNQE5pDnd8ewcxQTHYCBuGBg5l7vq5pn39\nXPwAObl6pvSMUt5thFLsCoWiWTw56UncHdy57ZvbALi2/7VATQmAzw59xstTXgYgJigGH2cfzpTK\npL0hgUMAyC7JxsvJS7W2ayOUK0ahUDQLNwc37hh+h+lzuGe46X3Wg1k8OOZB/j7k76Zlx/9xnLx/\n57Fp9iYKygtIzEkk8KVAlXzUhqjHpUKhaDZ6qCLA+F7jTe/9XPx4/pLna23r6SSrN3o6erL5+GZu\n/vpmQLp0FG1Dh7XYe/XqhRCiS7169VI1LxRdAyEEr1/6OgBXRV7VpH30DNY/Uv9gdOhoFo1f1Gby\ndXdEaxtDCCHuAeYDVcAGTdMeMi5/GJhrXH6vpmk/1LO/pppTKBSdE4NmMPnWG6OyuhKHxQ4ArJy2\nkluGqnDG1iCEQNO0OmsutMpiF0JMAq4CBmmaNgh40bg8GpgJRAOXAUuEKvrQ7dlioWqcio5DXUq9\nvvtsb2vPhF4TePOyN5k5YGYbS9a9aa0r5i7gWU3TqgA0Tcs2Lp8GfKppWpWmacnAEWBkK8+l6OQo\nxd49aOg+/zrnVxaMXICzvXP7CdQNaa1ijwQmCCF2CSF+EUKcb1weApw02y7VuKxVNEUxNEd5NHVb\na23X1c5trfN2hv9NV7qW5mDJ33RXun/N3fZsGlXsQogfhRAHzV5xxr9TkVE13pqmjQL+BXzeYkma\ngFLsnfvc1jpvZ/jfdKVraQ5KsVtm27Np1eSpEGIj8Jymab8aPx8BRgH/B6Bp2rPG5d8DT2ia9nsd\nx1AzpwqFQtEC6ps8bW0c+1rgIuBXIUQk4KBpWo4QYj3wkRDiZaQLpi/wR3MEUygUCkXLaK1ifx9Y\nIYSIA8qBvwNomhYvhFgDxAOVwHwV06hQKBTtQ6vj2BUKhULRsWi3zFMhRGF7nauj0di1GyOKhrWX\nPG1Nd73X6j53DzrDfW7PkgLdeWjQ3a69u12vTne77u52vTod/rrbtVaMEMJFCLFZCLFHCBFrDJlE\nCNFLCBEvhFgmhPhTCPG9EMKxPWVrY4QQYqIQ4huzBW8IIf7e0E6dmW56r9V9Vve5Q9DeRcDKgOma\npg1HRtO8ZLauL/CGpmkDgXxgRjvL1tZodIInvQXprvda3eca1H22Eu1dtlcAzwohxgMGIFgIoffG\nStI0Lc74fi8Q3s6yKSyLutfdA3WfOyDtqdgFMBvwBWI0TTMIIZIAJ+P6crNtq82WdxWqAFuzz13t\n+szpzvda3Wd1n61Oe7tiPIBM4xfgQsC8QHlXTlTSgBSgvxDCXgjhBVxsZZnamu54r9V9Vve5Q9Au\nFrsQwhbpi/sI+FYIEQvsAQ6bbdZh/VWtwXjt5ZqmpRqTtv4EkoB9Zpt1mWvvrvda3Wd1n802s/p1\nt0uCkhBiCPCOsVhYt6K7XXt3u16d7nbd3e16dTrLdbe5K0YIcQfyqd7t+mB1t2vvbter092uu7td\nr05num5VUkChUCi6GB22mbVCoVAoWobFFbsQIlQI8bMQ4pCxKcc/jMu9hRA/CCEShBCbhBCeZvs8\nLIQ4IoQ4LISYYrZ8mJBNPRKFEK9aWlZF67DwvV4shDghhCiwxrUo6sdS91kI4SyE+Na4LE4I8bS1\nrqnLo2maRV9AIDDU+N4NSAD6Ac8B/zIu/zeyVypAf2A/MkInHDhKjYvod2CE8f1G4G+Wlle9Osy9\nHgkEAAXWvi71apv7DDgDE43b2AG/qd9027wsbrFrmnZa07QDxvdFyPCnUGSD6w+Mm30ATDe+n0od\nja+FEIGAu6Zpu43brTLbR9EBsNS9Nu7/h6ZpGe0ovqKJWOo+a5pWqhm7rWmaVoUMEQxttwvpRrSp\nj10IEQ4MBXYBAfoPV9O004Cedlxf4+sQ4JTZ8lNYoCG2om1o5b1WdBIsdZ+NST1XAT+1rcTdkzZT\n7EIIN+AL4F7jU/7s8BsVjtNFUPe6e2Cp+2xM8vkYeNVo0SssTJsodiGEHfILsFrTtHXGxRlCiADj\n+kAg07g8FehptnuocVl9yxUdCAvda0UHx8L3eRmQoGnaG20rdfelrSz2FUC8pmmvmS1bD8wxvr8F\nWGe2/AYhhIMQojfGxtfGoV2+EGKkEEIg+6muQ9HRaPW9Put4XbW+SGfHIvdZCLEY8NA07b52kbq7\nYunZWGAsspLbAeTM+D7gUsAH2IycUf8B8DLb52HkzPlhYIrZ8vOBOOTky2vWnmlWrza9188h/bJV\nwAngcWtfn3pZ9j4j/ewG4JDZceZa+/q64ktlnioUCkUXQ2WeKhQKRRdDKXaFQqHoYijFrlAoFF0M\npdgVCoWii6EUu0KhUHQxlGJXKBSKLoZS7AqFQtHFUIpdoVAouhj/D886SzEar9lMAAAAAElFTkSu\nQmCC\n",
"text/plain": [
""
]
},
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Unnamed: 0 | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 2000-01-01 | \n",
" -0.871715 | \n",
" 0.889797 | \n",
" -0.452757 | \n",
" -0.065875 | \n",
"
\n",
" \n",
" | 1 | \n",
" 2000-01-02 | \n",
" 1.030719 | \n",
" 0.982527 | \n",
" -0.632324 | \n",
" 0.453500 | \n",
"
\n",
" \n",
" | 2 | \n",
" 2000-01-03 | \n",
" 0.634178 | \n",
" 1.389564 | \n",
" -0.497967 | \n",
" -0.269316 | \n",
"
\n",
" \n",
" | 3 | \n",
" 2000-01-04 | \n",
" 1.018194 | \n",
" 1.176338 | \n",
" -0.024616 | \n",
" 0.013515 | \n",
"
\n",
" \n",
" | 4 | \n",
" 2000-01-05 | \n",
" -0.137956 | \n",
" 1.385163 | \n",
" 0.930470 | \n",
" -0.698086 | \n",
"
\n",
" \n",
" | 5 | \n",
" 2000-01-06 | \n",
" 0.632541 | \n",
" 3.757807 | \n",
" 1.680543 | \n",
" 1.157284 | \n",
"
\n",
" \n",
" | 6 | \n",
" 2000-01-07 | \n",
" -1.037892 | \n",
" 5.667231 | \n",
" 2.364400 | \n",
" 2.170764 | \n",
"
\n",
" \n",
" | 7 | \n",
" 2000-01-08 | \n",
" -1.375110 | \n",
" 4.580663 | \n",
" 2.251072 | \n",
" 3.029680 | \n",
"
\n",
" \n",
" | 8 | \n",
" 2000-01-09 | \n",
" -1.619662 | \n",
" 2.636465 | \n",
" 3.044900 | \n",
" 2.165869 | \n",
"
\n",
" \n",
" | 9 | \n",
" 2000-01-10 | \n",
" -1.454407 | \n",
" 1.728391 | \n",
" 2.388801 | \n",
" 1.033930 | \n",
"
\n",
" \n",
" | 10 | \n",
" 2000-01-11 | \n",
" -1.278744 | \n",
" 2.636628 | \n",
" 2.462172 | \n",
" -1.182419 | \n",
"
\n",
" \n",
" | 11 | \n",
" 2000-01-12 | \n",
" -0.749159 | \n",
" 2.373619 | \n",
" 0.369816 | \n",
" -1.098857 | \n",
"
\n",
" \n",
" | 12 | \n",
" 2000-01-13 | \n",
" -2.861463 | \n",
" 2.486702 | \n",
" -1.175913 | \n",
" -0.933334 | \n",
"
\n",
" \n",
" | 13 | \n",
" 2000-01-14 | \n",
" -3.016526 | \n",
" 2.839986 | \n",
" -1.220834 | \n",
" -0.309324 | \n",
"
\n",
" \n",
" | 14 | \n",
" 2000-01-15 | \n",
" -5.812431 | \n",
" 2.166957 | \n",
" -3.024841 | \n",
" -1.995853 | \n",
"
\n",
" \n",
" | 15 | \n",
" 2000-01-16 | \n",
" -4.130502 | \n",
" 1.058692 | \n",
" -3.025683 | \n",
" -3.285472 | \n",
"
\n",
" \n",
" | 16 | \n",
" 2000-01-17 | \n",
" -4.263827 | \n",
" 2.202905 | \n",
" -4.321207 | \n",
" -2.821168 | \n",
"
\n",
" \n",
" | 17 | \n",
" 2000-01-18 | \n",
" -4.419713 | \n",
" 2.277186 | \n",
" -4.174866 | \n",
" -2.442312 | \n",
"
\n",
" \n",
" | 18 | \n",
" 2000-01-19 | \n",
" -5.394437 | \n",
" 3.308024 | \n",
" -4.956483 | \n",
" -1.923371 | \n",
"
\n",
" \n",
" | 19 | \n",
" 2000-01-20 | \n",
" -5.518434 | \n",
" 1.931813 | \n",
" -4.448700 | \n",
" -1.844738 | \n",
"
\n",
" \n",
" | 20 | \n",
" 2000-01-21 | \n",
" -5.176009 | \n",
" 2.196225 | \n",
" -4.239499 | \n",
" -1.049110 | \n",
"
\n",
" \n",
" | 21 | \n",
" 2000-01-22 | \n",
" -4.250908 | \n",
" 2.425685 | \n",
" -3.327828 | \n",
" -0.440797 | \n",
"
\n",
" \n",
" | 22 | \n",
" 2000-01-23 | \n",
" -4.945975 | \n",
" 2.891497 | \n",
" -3.385393 | \n",
" -0.999570 | \n",
"
\n",
" \n",
" | 23 | \n",
" 2000-01-24 | \n",
" -4.716341 | \n",
" 2.962450 | \n",
" -3.716062 | \n",
" -2.122873 | \n",
"
\n",
" \n",
" | 24 | \n",
" 2000-01-25 | \n",
" -4.176120 | \n",
" 2.519948 | \n",
" -4.070270 | \n",
" -1.461157 | \n",
"
\n",
" \n",
" | 25 | \n",
" 2000-01-26 | \n",
" -4.448476 | \n",
" 4.094472 | \n",
" -4.534445 | \n",
" -2.317750 | \n",
"
\n",
" \n",
" | 26 | \n",
" 2000-01-27 | \n",
" -4.628580 | \n",
" 3.880345 | \n",
" -4.375836 | \n",
" -3.585863 | \n",
"
\n",
" \n",
" | 27 | \n",
" 2000-01-28 | \n",
" -4.436221 | \n",
" 4.510596 | \n",
" -5.566178 | \n",
" -3.192768 | \n",
"
\n",
" \n",
" | 28 | \n",
" 2000-01-29 | \n",
" -4.538204 | \n",
" 5.071906 | \n",
" -5.719714 | \n",
" -3.775576 | \n",
"
\n",
" \n",
" | 29 | \n",
" 2000-01-30 | \n",
" -3.961343 | \n",
" 5.942862 | \n",
" -5.084055 | \n",
" -2.717804 | \n",
"
\n",
" \n",
" | ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" | 970 | \n",
" 2002-08-28 | \n",
" -22.141846 | \n",
" -21.854787 | \n",
" -9.483933 | \n",
" -14.804906 | \n",
"
\n",
" \n",
" | 971 | \n",
" 2002-08-29 | \n",
" -22.185204 | \n",
" -21.512387 | \n",
" -9.119370 | \n",
" -13.923381 | \n",
"
\n",
" \n",
" | 972 | \n",
" 2002-08-30 | \n",
" -22.527292 | \n",
" -24.563961 | \n",
" -10.784790 | \n",
" -12.652051 | \n",
"
\n",
" \n",
" | 973 | \n",
" 2002-08-31 | \n",
" -21.959430 | \n",
" -24.551227 | \n",
" -11.284436 | \n",
" -13.109942 | \n",
"
\n",
" \n",
" | 974 | \n",
" 2002-09-01 | \n",
" -21.625881 | \n",
" -23.555066 | \n",
" -11.086579 | \n",
" -13.345760 | \n",
"
\n",
" \n",
" | 975 | \n",
" 2002-09-02 | \n",
" -20.256898 | \n",
" -23.482735 | \n",
" -11.263625 | \n",
" -11.804981 | \n",
"
\n",
" \n",
" | 976 | \n",
" 2002-09-03 | \n",
" -20.869041 | \n",
" -22.453604 | \n",
" -12.320104 | \n",
" -12.070209 | \n",
"
\n",
" \n",
" | 977 | \n",
" 2002-09-04 | \n",
" -21.374708 | \n",
" -23.486186 | \n",
" -9.588075 | \n",
" -10.431600 | \n",
"
\n",
" \n",
" | 978 | \n",
" 2002-09-05 | \n",
" -22.691639 | \n",
" -24.170321 | \n",
" -8.605713 | \n",
" -9.875439 | \n",
"
\n",
" \n",
" | 979 | \n",
" 2002-09-06 | \n",
" -22.813804 | \n",
" -22.178215 | \n",
" -8.280569 | \n",
" -10.305069 | \n",
"
\n",
" \n",
" | 980 | \n",
" 2002-09-07 | \n",
" -23.016447 | \n",
" -21.328598 | \n",
" -9.360692 | \n",
" -9.642332 | \n",
"
\n",
" \n",
" | 981 | \n",
" 2002-09-08 | \n",
" -22.677555 | \n",
" -21.222574 | \n",
" -10.244785 | \n",
" -8.622022 | \n",
"
\n",
" \n",
" | 982 | \n",
" 2002-09-09 | \n",
" -23.511102 | \n",
" -22.179863 | \n",
" -10.482032 | \n",
" -7.145644 | \n",
"
\n",
" \n",
" | 983 | \n",
" 2002-09-10 | \n",
" -21.250224 | \n",
" -23.011550 | \n",
" -10.611333 | \n",
" -7.890854 | \n",
"
\n",
" \n",
" | 984 | \n",
" 2002-09-11 | \n",
" -20.204129 | \n",
" -22.284909 | \n",
" -10.698640 | \n",
" -7.722051 | \n",
"
\n",
" \n",
" | 985 | \n",
" 2002-09-12 | \n",
" -21.606134 | \n",
" -22.570158 | \n",
" -10.936326 | \n",
" -7.168786 | \n",
"
\n",
" \n",
" | 986 | \n",
" 2002-09-13 | \n",
" -21.336733 | \n",
" -24.603869 | \n",
" -10.134803 | \n",
" -8.312152 | \n",
"
\n",
" \n",
" | 987 | \n",
" 2002-09-14 | \n",
" -22.253331 | \n",
" -25.016824 | \n",
" -10.627166 | \n",
" -7.513619 | \n",
"
\n",
" \n",
" | 988 | \n",
" 2002-09-15 | \n",
" -20.523770 | \n",
" -23.781222 | \n",
" -12.410802 | \n",
" -8.281121 | \n",
"
\n",
" \n",
" | 989 | \n",
" 2002-09-16 | \n",
" -21.869984 | \n",
" -24.817785 | \n",
" -12.844630 | \n",
" -7.699183 | \n",
"
\n",
" \n",
" | 990 | \n",
" 2002-09-17 | \n",
" -21.912426 | \n",
" -25.057542 | \n",
" -11.951892 | \n",
" -8.486812 | \n",
"
\n",
" \n",
" | 991 | \n",
" 2002-09-18 | \n",
" -21.722546 | \n",
" -25.881762 | \n",
" -11.320068 | \n",
" -8.623145 | \n",
"
\n",
" \n",
" | 992 | \n",
" 2002-09-19 | \n",
" -20.474366 | \n",
" -24.137588 | \n",
" -12.151461 | \n",
" -9.625507 | \n",
"
\n",
" \n",
" | 993 | \n",
" 2002-09-20 | \n",
" -22.934832 | \n",
" -25.287777 | \n",
" -11.061323 | \n",
" -11.695006 | \n",
"
\n",
" \n",
" | 994 | \n",
" 2002-09-21 | \n",
" -24.508572 | \n",
" -23.934989 | \n",
" -10.424987 | \n",
" -13.079831 | \n",
"
\n",
" \n",
" | 995 | \n",
" 2002-09-22 | \n",
" -26.130471 | \n",
" -24.324060 | \n",
" -11.265862 | \n",
" -11.324558 | \n",
"
\n",
" \n",
" | 996 | \n",
" 2002-09-23 | \n",
" -25.928044 | \n",
" -24.035055 | \n",
" -10.924533 | \n",
" -11.071177 | \n",
"
\n",
" \n",
" | 997 | \n",
" 2002-09-24 | \n",
" -26.898126 | \n",
" -24.828889 | \n",
" -10.825060 | \n",
" -9.877738 | \n",
"
\n",
" \n",
" | 998 | \n",
" 2002-09-25 | \n",
" -27.718151 | \n",
" -24.975646 | \n",
" -10.535565 | \n",
" -9.166899 | \n",
"
\n",
" \n",
" | 999 | \n",
" 2002-09-26 | \n",
" -28.606014 | \n",
" -24.223275 | \n",
" -10.279136 | \n",
" -10.275953 | \n",
"
\n",
" \n",
"
\n",
"
1000 rows × 5 columns
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2000-01-01 | \n",
" -0.871715 | \n",
" 0.889797 | \n",
" -0.452757 | \n",
" -0.065875 | \n",
"
\n",
" \n",
" | 2000-01-02 | \n",
" 1.030719 | \n",
" 0.982527 | \n",
" -0.632324 | \n",
" 0.453500 | \n",
"
\n",
" \n",
" | 2000-01-03 | \n",
" 0.634178 | \n",
" 1.389564 | \n",
" -0.497967 | \n",
" -0.269316 | \n",
"
\n",
" \n",
" | 2000-01-04 | \n",
" 1.018194 | \n",
" 1.176338 | \n",
" -0.024616 | \n",
" 0.013515 | \n",
"
\n",
" \n",
" | 2000-01-05 | \n",
" -0.137956 | \n",
" 1.385163 | \n",
" 0.930470 | \n",
" -0.698086 | \n",
"
\n",
" \n",
" | 2000-01-06 | \n",
" 0.632541 | \n",
" 3.757807 | \n",
" 1.680543 | \n",
" 1.157284 | \n",
"
\n",
" \n",
" | 2000-01-07 | \n",
" -1.037892 | \n",
" 5.667231 | \n",
" 2.364400 | \n",
" 2.170764 | \n",
"
\n",
" \n",
" | 2000-01-08 | \n",
" -1.375110 | \n",
" 4.580663 | \n",
" 2.251072 | \n",
" 3.029680 | \n",
"
\n",
" \n",
" | 2000-01-09 | \n",
" -1.619662 | \n",
" 2.636465 | \n",
" 3.044900 | \n",
" 2.165869 | \n",
"
\n",
" \n",
" | 2000-01-10 | \n",
" -1.454407 | \n",
" 1.728391 | \n",
" 2.388801 | \n",
" 1.033930 | \n",
"
\n",
" \n",
" | 2000-01-11 | \n",
" -1.278744 | \n",
" 2.636628 | \n",
" 2.462172 | \n",
" -1.182419 | \n",
"
\n",
" \n",
" | 2000-01-12 | \n",
" -0.749159 | \n",
" 2.373619 | \n",
" 0.369816 | \n",
" -1.098857 | \n",
"
\n",
" \n",
" | 2000-01-13 | \n",
" -2.861463 | \n",
" 2.486702 | \n",
" -1.175913 | \n",
" -0.933334 | \n",
"
\n",
" \n",
" | 2000-01-14 | \n",
" -3.016526 | \n",
" 2.839986 | \n",
" -1.220834 | \n",
" -0.309324 | \n",
"
\n",
" \n",
" | 2000-01-15 | \n",
" -5.812431 | \n",
" 2.166957 | \n",
" -3.024841 | \n",
" -1.995853 | \n",
"
\n",
" \n",
" | 2000-01-16 | \n",
" -4.130502 | \n",
" 1.058692 | \n",
" -3.025683 | \n",
" -3.285472 | \n",
"
\n",
" \n",
" | 2000-01-17 | \n",
" -4.263827 | \n",
" 2.202905 | \n",
" -4.321207 | \n",
" -2.821168 | \n",
"
\n",
" \n",
" | 2000-01-18 | \n",
" -4.419713 | \n",
" 2.277186 | \n",
" -4.174866 | \n",
" -2.442312 | \n",
"
\n",
" \n",
" | 2000-01-19 | \n",
" -5.394437 | \n",
" 3.308024 | \n",
" -4.956483 | \n",
" -1.923371 | \n",
"
\n",
" \n",
" | 2000-01-20 | \n",
" -5.518434 | \n",
" 1.931813 | \n",
" -4.448700 | \n",
" -1.844738 | \n",
"
\n",
" \n",
" | 2000-01-21 | \n",
" -5.176009 | \n",
" 2.196225 | \n",
" -4.239499 | \n",
" -1.049110 | \n",
"
\n",
" \n",
" | 2000-01-22 | \n",
" -4.250908 | \n",
" 2.425685 | \n",
" -3.327828 | \n",
" -0.440797 | \n",
"
\n",
" \n",
" | 2000-01-23 | \n",
" -4.945975 | \n",
" 2.891497 | \n",
" -3.385393 | \n",
" -0.999570 | \n",
"
\n",
" \n",
" | 2000-01-24 | \n",
" -4.716341 | \n",
" 2.962450 | \n",
" -3.716062 | \n",
" -2.122873 | \n",
"
\n",
" \n",
" | 2000-01-25 | \n",
" -4.176120 | \n",
" 2.519948 | \n",
" -4.070270 | \n",
" -1.461157 | \n",
"
\n",
" \n",
" | 2000-01-26 | \n",
" -4.448476 | \n",
" 4.094472 | \n",
" -4.534445 | \n",
" -2.317750 | \n",
"
\n",
" \n",
" | 2000-01-27 | \n",
" -4.628580 | \n",
" 3.880345 | \n",
" -4.375836 | \n",
" -3.585863 | \n",
"
\n",
" \n",
" | 2000-01-28 | \n",
" -4.436221 | \n",
" 4.510596 | \n",
" -5.566178 | \n",
" -3.192768 | \n",
"
\n",
" \n",
" | 2000-01-29 | \n",
" -4.538204 | \n",
" 5.071906 | \n",
" -5.719714 | \n",
" -3.775576 | \n",
"
\n",
" \n",
" | 2000-01-30 | \n",
" -3.961343 | \n",
" 5.942862 | \n",
" -5.084055 | \n",
" -2.717804 | \n",
"
\n",
" \n",
" | ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" | 2002-08-28 | \n",
" -22.141846 | \n",
" -21.854787 | \n",
" -9.483933 | \n",
" -14.804906 | \n",
"
\n",
" \n",
" | 2002-08-29 | \n",
" -22.185204 | \n",
" -21.512387 | \n",
" -9.119370 | \n",
" -13.923381 | \n",
"
\n",
" \n",
" | 2002-08-30 | \n",
" -22.527292 | \n",
" -24.563961 | \n",
" -10.784790 | \n",
" -12.652051 | \n",
"
\n",
" \n",
" | 2002-08-31 | \n",
" -21.959430 | \n",
" -24.551227 | \n",
" -11.284436 | \n",
" -13.109942 | \n",
"
\n",
" \n",
" | 2002-09-01 | \n",
" -21.625881 | \n",
" -23.555066 | \n",
" -11.086579 | \n",
" -13.345760 | \n",
"
\n",
" \n",
" | 2002-09-02 | \n",
" -20.256898 | \n",
" -23.482735 | \n",
" -11.263625 | \n",
" -11.804981 | \n",
"
\n",
" \n",
" | 2002-09-03 | \n",
" -20.869041 | \n",
" -22.453604 | \n",
" -12.320104 | \n",
" -12.070209 | \n",
"
\n",
" \n",
" | 2002-09-04 | \n",
" -21.374708 | \n",
" -23.486186 | \n",
" -9.588075 | \n",
" -10.431600 | \n",
"
\n",
" \n",
" | 2002-09-05 | \n",
" -22.691639 | \n",
" -24.170321 | \n",
" -8.605713 | \n",
" -9.875439 | \n",
"
\n",
" \n",
" | 2002-09-06 | \n",
" -22.813804 | \n",
" -22.178215 | \n",
" -8.280569 | \n",
" -10.305069 | \n",
"
\n",
" \n",
" | 2002-09-07 | \n",
" -23.016447 | \n",
" -21.328598 | \n",
" -9.360692 | \n",
" -9.642332 | \n",
"
\n",
" \n",
" | 2002-09-08 | \n",
" -22.677555 | \n",
" -21.222574 | \n",
" -10.244785 | \n",
" -8.622022 | \n",
"
\n",
" \n",
" | 2002-09-09 | \n",
" -23.511102 | \n",
" -22.179863 | \n",
" -10.482032 | \n",
" -7.145644 | \n",
"
\n",
" \n",
" | 2002-09-10 | \n",
" -21.250224 | \n",
" -23.011550 | \n",
" -10.611333 | \n",
" -7.890854 | \n",
"
\n",
" \n",
" | 2002-09-11 | \n",
" -20.204129 | \n",
" -22.284909 | \n",
" -10.698640 | \n",
" -7.722051 | \n",
"
\n",
" \n",
" | 2002-09-12 | \n",
" -21.606134 | \n",
" -22.570158 | \n",
" -10.936326 | \n",
" -7.168786 | \n",
"
\n",
" \n",
" | 2002-09-13 | \n",
" -21.336733 | \n",
" -24.603869 | \n",
" -10.134803 | \n",
" -8.312152 | \n",
"
\n",
" \n",
" | 2002-09-14 | \n",
" -22.253331 | \n",
" -25.016824 | \n",
" -10.627166 | \n",
" -7.513619 | \n",
"
\n",
" \n",
" | 2002-09-15 | \n",
" -20.523770 | \n",
" -23.781222 | \n",
" -12.410802 | \n",
" -8.281121 | \n",
"
\n",
" \n",
" | 2002-09-16 | \n",
" -21.869984 | \n",
" -24.817785 | \n",
" -12.844630 | \n",
" -7.699183 | \n",
"
\n",
" \n",
" | 2002-09-17 | \n",
" -21.912426 | \n",
" -25.057542 | \n",
" -11.951892 | \n",
" -8.486812 | \n",
"
\n",
" \n",
" | 2002-09-18 | \n",
" -21.722546 | \n",
" -25.881762 | \n",
" -11.320068 | \n",
" -8.623145 | \n",
"
\n",
" \n",
" | 2002-09-19 | \n",
" -20.474366 | \n",
" -24.137588 | \n",
" -12.151461 | \n",
" -9.625507 | \n",
"
\n",
" \n",
" | 2002-09-20 | \n",
" -22.934832 | \n",
" -25.287777 | \n",
" -11.061323 | \n",
" -11.695006 | \n",
"
\n",
" \n",
" | 2002-09-21 | \n",
" -24.508572 | \n",
" -23.934989 | \n",
" -10.424987 | \n",
" -13.079831 | \n",
"
\n",
" \n",
" | 2002-09-22 | \n",
" -26.130471 | \n",
" -24.324060 | \n",
" -11.265862 | \n",
" -11.324558 | \n",
"
\n",
" \n",
" | 2002-09-23 | \n",
" -25.928044 | \n",
" -24.035055 | \n",
" -10.924533 | \n",
" -11.071177 | \n",
"
\n",
" \n",
" | 2002-09-24 | \n",
" -26.898126 | \n",
" -24.828889 | \n",
" -10.825060 | \n",
" -9.877738 | \n",
"
\n",
" \n",
" | 2002-09-25 | \n",
" -27.718151 | \n",
" -24.975646 | \n",
" -10.535565 | \n",
" -9.166899 | \n",
"
\n",
" \n",
" | 2002-09-26 | \n",
" -28.606014 | \n",
" -24.223275 | \n",
" -10.279136 | \n",
" -10.275953 | \n",
"
\n",
" \n",
"
\n",
"
1000 rows × 4 columns
\n",
"
"
],
"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": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" | 2000-01-01 | \n",
" -0.871715 | \n",
" 0.889797 | \n",
" -0.452757 | \n",
" -0.065875 | \n",
"
\n",
" \n",
" | 2000-01-02 | \n",
" 1.030719 | \n",
" 0.982527 | \n",
" -0.632324 | \n",
" 0.453500 | \n",
"
\n",
" \n",
" | 2000-01-03 | \n",
" 0.634178 | \n",
" 1.389564 | \n",
" -0.497967 | \n",
" -0.269316 | \n",
"
\n",
" \n",
" | 2000-01-04 | \n",
" 1.018194 | \n",
" 1.176338 | \n",
" -0.024616 | \n",
" 0.013515 | \n",
"
\n",
" \n",
" | 2000-01-05 | \n",
" -0.137956 | \n",
" 1.385163 | \n",
" 0.930470 | \n",
" -0.698086 | \n",
"
\n",
" \n",
" | 2000-01-06 | \n",
" 0.632541 | \n",
" 3.757807 | \n",
" 1.680543 | \n",
" 1.157284 | \n",
"
\n",
" \n",
" | 2000-01-07 | \n",
" -1.037892 | \n",
" 5.667231 | \n",
" 2.364400 | \n",
" 2.170764 | \n",
"
\n",
" \n",
" | 2000-01-08 | \n",
" -1.375110 | \n",
" 4.580663 | \n",
" 2.251072 | \n",
" 3.029680 | \n",
"
\n",
" \n",
" | 2000-01-09 | \n",
" -1.619662 | \n",
" 2.636465 | \n",
" 3.044900 | \n",
" 2.165869 | \n",
"
\n",
" \n",
" | 2000-01-10 | \n",
" -1.454407 | \n",
" 1.728391 | \n",
" 2.388801 | \n",
" 1.033930 | \n",
"
\n",
" \n",
" | 2000-01-11 | \n",
" -1.278744 | \n",
" 2.636628 | \n",
" 2.462172 | \n",
" -1.182419 | \n",
"
\n",
" \n",
" | 2000-01-12 | \n",
" -0.749159 | \n",
" 2.373619 | \n",
" 0.369816 | \n",
" -1.098857 | \n",
"
\n",
" \n",
" | 2000-01-13 | \n",
" -2.861463 | \n",
" 2.486702 | \n",
" -1.175913 | \n",
" -0.933334 | \n",
"
\n",
" \n",
" | 2000-01-14 | \n",
" -3.016526 | \n",
" 2.839986 | \n",
" -1.220834 | \n",
" -0.309324 | \n",
"
\n",
" \n",
" | 2000-01-15 | \n",
" -5.812431 | \n",
" 2.166957 | \n",
" -3.024841 | \n",
" -1.995853 | \n",
"
\n",
" \n",
" | 2000-01-16 | \n",
" -4.130502 | \n",
" 1.058692 | \n",
" -3.025683 | \n",
" -3.285472 | \n",
"
\n",
" \n",
" | 2000-01-17 | \n",
" -4.263827 | \n",
" 2.202905 | \n",
" -4.321207 | \n",
" -2.821168 | \n",
"
\n",
" \n",
" | 2000-01-18 | \n",
" -4.419713 | \n",
" 2.277186 | \n",
" -4.174866 | \n",
" -2.442312 | \n",
"
\n",
" \n",
" | 2000-01-19 | \n",
" -5.394437 | \n",
" 3.308024 | \n",
" -4.956483 | \n",
" -1.923371 | \n",
"
\n",
" \n",
" | 2000-01-20 | \n",
" -5.518434 | \n",
" 1.931813 | \n",
" -4.448700 | \n",
" -1.844738 | \n",
"
\n",
" \n",
" | 2000-01-21 | \n",
" -5.176009 | \n",
" 2.196225 | \n",
" -4.239499 | \n",
" -1.049110 | \n",
"
\n",
" \n",
" | 2000-01-22 | \n",
" -4.250908 | \n",
" 2.425685 | \n",
" -3.327828 | \n",
" -0.440797 | \n",
"
\n",
" \n",
" | 2000-01-23 | \n",
" -4.945975 | \n",
" 2.891497 | \n",
" -3.385393 | \n",
" -0.999570 | \n",
"
\n",
" \n",
" | 2000-01-24 | \n",
" -4.716341 | \n",
" 2.962450 | \n",
" -3.716062 | \n",
" -2.122873 | \n",
"
\n",
" \n",
" | 2000-01-25 | \n",
" -4.176120 | \n",
" 2.519948 | \n",
" -4.070270 | \n",
" -1.461157 | \n",
"
\n",
" \n",
" | 2000-01-26 | \n",
" -4.448476 | \n",
" 4.094472 | \n",
" -4.534445 | \n",
" -2.317750 | \n",
"
\n",
" \n",
" | 2000-01-27 | \n",
" -4.628580 | \n",
" 3.880345 | \n",
" -4.375836 | \n",
" -3.585863 | \n",
"
\n",
" \n",
" | 2000-01-28 | \n",
" -4.436221 | \n",
" 4.510596 | \n",
" -5.566178 | \n",
" -3.192768 | \n",
"
\n",
" \n",
" | 2000-01-29 | \n",
" -4.538204 | \n",
" 5.071906 | \n",
" -5.719714 | \n",
" -3.775576 | \n",
"
\n",
" \n",
" | 2000-01-30 | \n",
" -3.961343 | \n",
" 5.942862 | \n",
" -5.084055 | \n",
" -2.717804 | \n",
"
\n",
" \n",
" | ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" | 2002-08-28 | \n",
" -22.141846 | \n",
" -21.854787 | \n",
" -9.483933 | \n",
" -14.804906 | \n",
"
\n",
" \n",
" | 2002-08-29 | \n",
" -22.185204 | \n",
" -21.512387 | \n",
" -9.119370 | \n",
" -13.923381 | \n",
"
\n",
" \n",
" | 2002-08-30 | \n",
" -22.527292 | \n",
" -24.563961 | \n",
" -10.784790 | \n",
" -12.652051 | \n",
"
\n",
" \n",
" | 2002-08-31 | \n",
" -21.959430 | \n",
" -24.551227 | \n",
" -11.284436 | \n",
" -13.109942 | \n",
"
\n",
" \n",
" | 2002-09-01 | \n",
" -21.625881 | \n",
" -23.555066 | \n",
" -11.086579 | \n",
" -13.345760 | \n",
"
\n",
" \n",
" | 2002-09-02 | \n",
" -20.256898 | \n",
" -23.482735 | \n",
" -11.263625 | \n",
" -11.804981 | \n",
"
\n",
" \n",
" | 2002-09-03 | \n",
" -20.869041 | \n",
" -22.453604 | \n",
" -12.320104 | \n",
" -12.070209 | \n",
"
\n",
" \n",
" | 2002-09-04 | \n",
" -21.374708 | \n",
" -23.486186 | \n",
" -9.588075 | \n",
" -10.431600 | \n",
"
\n",
" \n",
" | 2002-09-05 | \n",
" -22.691639 | \n",
" -24.170321 | \n",
" -8.605713 | \n",
" -9.875439 | \n",
"
\n",
" \n",
" | 2002-09-06 | \n",
" -22.813804 | \n",
" -22.178215 | \n",
" -8.280569 | \n",
" -10.305069 | \n",
"
\n",
" \n",
" | 2002-09-07 | \n",
" -23.016447 | \n",
" -21.328598 | \n",
" -9.360692 | \n",
" -9.642332 | \n",
"
\n",
" \n",
" | 2002-09-08 | \n",
" -22.677555 | \n",
" -21.222574 | \n",
" -10.244785 | \n",
" -8.622022 | \n",
"
\n",
" \n",
" | 2002-09-09 | \n",
" -23.511102 | \n",
" -22.179863 | \n",
" -10.482032 | \n",
" -7.145644 | \n",
"
\n",
" \n",
" | 2002-09-10 | \n",
" -21.250224 | \n",
" -23.011550 | \n",
" -10.611333 | \n",
" -7.890854 | \n",
"
\n",
" \n",
" | 2002-09-11 | \n",
" -20.204129 | \n",
" -22.284909 | \n",
" -10.698640 | \n",
" -7.722051 | \n",
"
\n",
" \n",
" | 2002-09-12 | \n",
" -21.606134 | \n",
" -22.570158 | \n",
" -10.936326 | \n",
" -7.168786 | \n",
"
\n",
" \n",
" | 2002-09-13 | \n",
" -21.336733 | \n",
" -24.603869 | \n",
" -10.134803 | \n",
" -8.312152 | \n",
"
\n",
" \n",
" | 2002-09-14 | \n",
" -22.253331 | \n",
" -25.016824 | \n",
" -10.627166 | \n",
" -7.513619 | \n",
"
\n",
" \n",
" | 2002-09-15 | \n",
" -20.523770 | \n",
" -23.781222 | \n",
" -12.410802 | \n",
" -8.281121 | \n",
"
\n",
" \n",
" | 2002-09-16 | \n",
" -21.869984 | \n",
" -24.817785 | \n",
" -12.844630 | \n",
" -7.699183 | \n",
"
\n",
" \n",
" | 2002-09-17 | \n",
" -21.912426 | \n",
" -25.057542 | \n",
" -11.951892 | \n",
" -8.486812 | \n",
"
\n",
" \n",
" | 2002-09-18 | \n",
" -21.722546 | \n",
" -25.881762 | \n",
" -11.320068 | \n",
" -8.623145 | \n",
"
\n",
" \n",
" | 2002-09-19 | \n",
" -20.474366 | \n",
" -24.137588 | \n",
" -12.151461 | \n",
" -9.625507 | \n",
"
\n",
" \n",
" | 2002-09-20 | \n",
" -22.934832 | \n",
" -25.287777 | \n",
" -11.061323 | \n",
" -11.695006 | \n",
"
\n",
" \n",
" | 2002-09-21 | \n",
" -24.508572 | \n",
" -23.934989 | \n",
" -10.424987 | \n",
" -13.079831 | \n",
"
\n",
" \n",
" | 2002-09-22 | \n",
" -26.130471 | \n",
" -24.324060 | \n",
" -11.265862 | \n",
" -11.324558 | \n",
"
\n",
" \n",
" | 2002-09-23 | \n",
" -25.928044 | \n",
" -24.035055 | \n",
" -10.924533 | \n",
" -11.071177 | \n",
"
\n",
" \n",
" | 2002-09-24 | \n",
" -26.898126 | \n",
" -24.828889 | \n",
" -10.825060 | \n",
" -9.877738 | \n",
"
\n",
" \n",
" | 2002-09-25 | \n",
" -27.718151 | \n",
" -24.975646 | \n",
" -10.535565 | \n",
" -9.166899 | \n",
"
\n",
" \n",
" | 2002-09-26 | \n",
" -28.606014 | \n",
" -24.223275 | \n",
" -10.279136 | \n",
" -10.275953 | \n",
"
\n",
" \n",
"
\n",
"
1000 rows × 4 columns
\n",
"
"
],
"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
}