{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# pandas 学习教程简介"
]
},
{
"cell_type": "code",
"execution_count": 1,
"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": [
"### 使用传递的值列表序列来创建序列, 让 pandas 创建默认整数索引"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"s = pd.Series([1, 3, 5, np.nan, 6, 8])"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 1.0\n",
"1 3.0\n",
"2 5.0\n",
"3 NaN\n",
"4 6.0\n",
"5 8.0\n",
"dtype: float64"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 使用传递的numpy数组创建数据帧,并使用日期索引和标记列:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"dates = pd.date_range('20130101', periods=6)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"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"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-01 | \n",
" 0.830988 | \n",
" 0.211301 | \n",
" -0.926818 | \n",
" -0.613411 | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" -1.106847 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -0.397050 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 0.287584 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
" -0.003075 | \n",
" 0.478628 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" -0.050440 | \n",
" -0.840614 | \n",
" -0.547810 | \n",
" -0.396750 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"2013-01-01 0.830988 0.211301 -0.926818 -0.613411\n",
"2013-01-02 -1.314992 0.532977 1.192366 -1.106847\n",
"2013-01-03 0.890640 -1.036566 -2.189510 -0.397050\n",
"2013-01-04 1.565294 -0.901578 1.148267 0.287584\n",
"2013-01-05 0.180890 2.301889 -0.003075 0.478628\n",
"2013-01-06 -0.050440 -0.840614 -0.547810 -0.396750"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 使用传递的可转换序列的字典对象创建数据帧:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df2 = pd.DataFrame({\n",
" 'A': 1.,\n",
" 'B': pd.Timestamp('20130101'),\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",
"})"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" E | \n",
" F | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1.0 | \n",
" 2013-01-01 | \n",
" 1.0 | \n",
" 3 | \n",
" test | \n",
" foo | \n",
"
\n",
" \n",
" 1 | \n",
" 1.0 | \n",
" 2013-01-01 | \n",
" 1.0 | \n",
" 3 | \n",
" train | \n",
" foo | \n",
"
\n",
" \n",
" 2 | \n",
" 1.0 | \n",
" 2013-01-01 | \n",
" 1.0 | \n",
" 3 | \n",
" test | \n",
" foo | \n",
"
\n",
" \n",
" 3 | \n",
" 1.0 | \n",
" 2013-01-01 | \n",
" 1.0 | \n",
" 3 | \n",
" train | \n",
" foo | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D E F\n",
"0 1.0 2013-01-01 1.0 3 test foo\n",
"1 1.0 2013-01-01 1.0 3 train foo\n",
"2 1.0 2013-01-01 1.0 3 test foo\n",
"3 1.0 2013-01-01 1.0 3 train foo"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 所有明确类型:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"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": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2.dtypes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 输出某个子集:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 test\n",
"1 train\n",
"2 test\n",
"3 train\n",
"Name: E, dtype: category\n",
"Categories (2, object): [test, train]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2.E"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 查看数据"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 查看帧顶部和底部的行:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-01 | \n",
" 0.830988 | \n",
" 0.211301 | \n",
" -0.926818 | \n",
" -0.613411 | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" -1.106847 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -0.397050 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 0.287584 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
" -0.003075 | \n",
" 0.478628 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"2013-01-01 0.830988 0.211301 -0.926818 -0.613411\n",
"2013-01-02 -1.314992 0.532977 1.192366 -1.106847\n",
"2013-01-03 0.890640 -1.036566 -2.189510 -0.397050\n",
"2013-01-04 1.565294 -0.901578 1.148267 0.287584\n",
"2013-01-05 0.180890 2.301889 -0.003075 0.478628"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 0.287584 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
" -0.003075 | \n",
" 0.478628 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" -0.050440 | \n",
" -0.840614 | \n",
" -0.547810 | \n",
" -0.396750 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"2013-01-04 1.565294 -0.901578 1.148267 0.287584\n",
"2013-01-05 0.180890 2.301889 -0.003075 0.478628\n",
"2013-01-06 -0.050440 -0.840614 -0.547810 -0.396750"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.tail(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 显示索引, 列, 和底层的 numpy 数据:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"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": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.index"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index([u'A', u'B', u'C', u'D'], dtype='object')"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.columns"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.83098768, 0.21130117, -0.92681805, -0.61341131],\n",
" [-1.31499226, 0.53297706, 1.19236594, -1.10684677],\n",
" [ 0.89064029, -1.03656616, -2.18951045, -0.39705036],\n",
" [ 1.56529377, -0.90157838, 1.14826665, 0.28758407],\n",
" [ 0.18088986, 2.3018887 , -0.00307499, 0.47862784],\n",
" [-0.05043964, -0.84061391, -0.54780954, -0.39674995]])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 描述显示数据快速统计摘要:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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.350397 | \n",
" 0.044568 | \n",
" -0.221097 | \n",
" -0.291308 | \n",
"
\n",
" \n",
" std | \n",
" 0.996165 | \n",
" 1.281361 | \n",
" 1.296148 | \n",
" 0.586357 | \n",
"
\n",
" \n",
" min | \n",
" -1.314992 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -1.106847 | \n",
"
\n",
" \n",
" 25% | \n",
" 0.007393 | \n",
" -0.886337 | \n",
" -0.832066 | \n",
" -0.559321 | \n",
"
\n",
" \n",
" 50% | \n",
" 0.505939 | \n",
" -0.314656 | \n",
" -0.275442 | \n",
" -0.396900 | \n",
"
\n",
" \n",
" 75% | \n",
" 0.875727 | \n",
" 0.452558 | \n",
" 0.860431 | \n",
" 0.116501 | \n",
"
\n",
" \n",
" max | \n",
" 1.565294 | \n",
" 2.301889 | \n",
" 1.192366 | \n",
" 0.478628 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"count 6.000000 6.000000 6.000000 6.000000\n",
"mean 0.350397 0.044568 -0.221097 -0.291308\n",
"std 0.996165 1.281361 1.296148 0.586357\n",
"min -1.314992 -1.036566 -2.189510 -1.106847\n",
"25% 0.007393 -0.886337 -0.832066 -0.559321\n",
"50% 0.505939 -0.314656 -0.275442 -0.396900\n",
"75% 0.875727 0.452558 0.860431 0.116501\n",
"max 1.565294 2.301889 1.192366 0.478628"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 转置数据:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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.830988 | \n",
" -1.314992 | \n",
" 0.890640 | \n",
" 1.565294 | \n",
" 0.180890 | \n",
" -0.050440 | \n",
"
\n",
" \n",
" B | \n",
" 0.211301 | \n",
" 0.532977 | \n",
" -1.036566 | \n",
" -0.901578 | \n",
" 2.301889 | \n",
" -0.840614 | \n",
"
\n",
" \n",
" C | \n",
" -0.926818 | \n",
" 1.192366 | \n",
" -2.189510 | \n",
" 1.148267 | \n",
" -0.003075 | \n",
" -0.547810 | \n",
"
\n",
" \n",
" D | \n",
" -0.613411 | \n",
" -1.106847 | \n",
" -0.397050 | \n",
" 0.287584 | \n",
" 0.478628 | \n",
" -0.396750 | \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.830988 -1.314992 0.890640 1.565294 0.180890 -0.050440\n",
"B 0.211301 0.532977 -1.036566 -0.901578 2.301889 -0.840614\n",
"C -0.926818 1.192366 -2.189510 1.148267 -0.003075 -0.547810\n",
"D -0.613411 -1.106847 -0.397050 0.287584 0.478628 -0.396750"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.T"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 按轴排序:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" D | \n",
" C | \n",
" B | \n",
" A | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-01 | \n",
" -0.613411 | \n",
" -0.926818 | \n",
" 0.211301 | \n",
" 0.830988 | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.106847 | \n",
" 1.192366 | \n",
" 0.532977 | \n",
" -1.314992 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" -0.397050 | \n",
" -2.189510 | \n",
" -1.036566 | \n",
" 0.890640 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 0.287584 | \n",
" 1.148267 | \n",
" -0.901578 | \n",
" 1.565294 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.478628 | \n",
" -0.003075 | \n",
" 2.301889 | \n",
" 0.180890 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" -0.396750 | \n",
" -0.547810 | \n",
" -0.840614 | \n",
" -0.050440 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" D C B A\n",
"2013-01-01 -0.613411 -0.926818 0.211301 0.830988\n",
"2013-01-02 -1.106847 1.192366 0.532977 -1.314992\n",
"2013-01-03 -0.397050 -2.189510 -1.036566 0.890640\n",
"2013-01-04 0.287584 1.148267 -0.901578 1.565294\n",
"2013-01-05 0.478628 -0.003075 2.301889 0.180890\n",
"2013-01-06 -0.396750 -0.547810 -0.840614 -0.050440"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.sort_index(axis=1, ascending=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 按值排序:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -0.397050 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 0.287584 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" -0.050440 | \n",
" -0.840614 | \n",
" -0.547810 | \n",
" -0.396750 | \n",
"
\n",
" \n",
" 2013-01-01 | \n",
" 0.830988 | \n",
" 0.211301 | \n",
" -0.926818 | \n",
" -0.613411 | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" -1.106847 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
" -0.003075 | \n",
" 0.478628 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"2013-01-03 0.890640 -1.036566 -2.189510 -0.397050\n",
"2013-01-04 1.565294 -0.901578 1.148267 0.287584\n",
"2013-01-06 -0.050440 -0.840614 -0.547810 -0.396750\n",
"2013-01-01 0.830988 0.211301 -0.926818 -0.613411\n",
"2013-01-02 -1.314992 0.532977 1.192366 -1.106847\n",
"2013-01-05 0.180890 2.301889 -0.003075 0.478628"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.sort_values(by='B')"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -0.397050 | \n",
"
\n",
" \n",
" 2013-01-01 | \n",
" 0.830988 | \n",
" 0.211301 | \n",
" -0.926818 | \n",
" -0.613411 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" -0.050440 | \n",
" -0.840614 | \n",
" -0.547810 | \n",
" -0.396750 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
" -0.003075 | \n",
" 0.478628 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 0.287584 | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" -1.106847 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"2013-01-03 0.890640 -1.036566 -2.189510 -0.397050\n",
"2013-01-01 0.830988 0.211301 -0.926818 -0.613411\n",
"2013-01-06 -0.050440 -0.840614 -0.547810 -0.396750\n",
"2013-01-05 0.180890 2.301889 -0.003075 0.478628\n",
"2013-01-04 1.565294 -0.901578 1.148267 0.287584\n",
"2013-01-02 -1.314992 0.532977 1.192366 -1.106847"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.sort_values(by=['C', 'B'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 选择器"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 读取"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 选择单列, 这会产生一个序列, 等价于 df.A:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2013-01-01 0.830988\n",
"2013-01-02 -1.314992\n",
"2013-01-03 0.890640\n",
"2013-01-04 1.565294\n",
"2013-01-05 0.180890\n",
"2013-01-06 -0.050440\n",
"Freq: D, Name: A, dtype: float64"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['A']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 使用 [] 选择行的片断:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-01 | \n",
" 0.830988 | \n",
" 0.211301 | \n",
" -0.926818 | \n",
" -0.613411 | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" -1.106847 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -0.397050 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"2013-01-01 0.830988 0.211301 -0.926818 -0.613411\n",
"2013-01-02 -1.314992 0.532977 1.192366 -1.106847\n",
"2013-01-03 0.890640 -1.036566 -2.189510 -0.397050"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[0:3]"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" -1.106847 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -0.397050 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 0.287584 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"2013-01-02 -1.314992 0.532977 1.192366 -1.106847\n",
"2013-01-03 0.890640 -1.036566 -2.189510 -0.397050\n",
"2013-01-04 1.565294 -0.901578 1.148267 0.287584"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['20130102': '20130104']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 使用标签选择"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 使用标签获取横截面:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"A 0.830988\n",
"B 0.211301\n",
"C -0.926818\n",
"D -0.613411\n",
"Name: 2013-01-01 00:00:00, dtype: float64"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.loc[dates[0]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 使用标签选择多轴:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-01 | \n",
" 0.830988 | \n",
" 0.211301 | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" -0.050440 | \n",
" -0.840614 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B\n",
"2013-01-01 0.830988 0.211301\n",
"2013-01-02 -1.314992 0.532977\n",
"2013-01-03 0.890640 -1.036566\n",
"2013-01-04 1.565294 -0.901578\n",
"2013-01-05 0.180890 2.301889\n",
"2013-01-06 -0.050440 -0.840614"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.loc[:, ['A', 'B']]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 显示标签切片, 包含两个端点:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B\n",
"2013-01-02 -1.314992 0.532977\n",
"2013-01-03 0.890640 -1.036566\n",
"2013-01-04 1.565294 -0.901578"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.loc['20130102': '20130104', ['A', 'B']]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 降低返回对象维度:"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"A -1.314992\n",
"B 0.532977\n",
"Name: 2013-01-02 00:00:00, dtype: float64"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.loc['20130102', ['A', 'B']]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 获取标量值:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.83098767923609629"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.loc[dates[0], 'A']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 快速访问并获取标量数据(等价上面的方法):"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.83098767923609629"
]
},
"execution_count": 30,
"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": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"A 1.565294\n",
"B -0.901578\n",
"C 1.148267\n",
"D 0.287584\n",
"Name: 2013-01-04 00:00:00, dtype: float64"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.iloc[3]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 使用整数片断, 效果类似 numpy/python:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B\n",
"2013-01-04 1.565294 -0.901578\n",
"2013-01-05 0.180890 2.301889"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.iloc[3:5, 0:2]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 使用整数偏移定位列表, 效果类似 numpy/python 样式:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" C | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 1.192366 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -2.189510 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" -0.003075 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A C\n",
"2013-01-02 -1.314992 1.192366\n",
"2013-01-03 0.890640 -2.189510\n",
"2013-01-05 0.180890 -0.003075"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.iloc[[1, 2, 4], [0, 2]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 显示行切片:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" -1.106847 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -0.397050 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"2013-01-02 -1.314992 0.532977 1.192366 -1.106847\n",
"2013-01-03 0.890640 -1.036566 -2.189510 -0.397050"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.iloc[1:3, :]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 显示列切片:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" B | \n",
" C | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-01 | \n",
" 0.211301 | \n",
" -0.926818 | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 2.301889 | \n",
" -0.003075 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" -0.840614 | \n",
" -0.547810 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" B C\n",
"2013-01-01 0.211301 -0.926818\n",
"2013-01-02 0.532977 1.192366\n",
"2013-01-03 -1.036566 -2.189510\n",
"2013-01-04 -0.901578 1.148267\n",
"2013-01-05 2.301889 -0.003075\n",
"2013-01-06 -0.840614 -0.547810"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.iloc[:, 1:3]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 显式获取一个值:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.53297705530790285"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.iloc[1, 1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 快速访问一个标量(等同上个方法):"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.53297705530790285"
]
},
"execution_count": 37,
"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": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-01 | \n",
" 0.830988 | \n",
" 0.211301 | \n",
" -0.926818 | \n",
" -0.613411 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -0.397050 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 0.287584 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
" -0.003075 | \n",
" 0.478628 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"2013-01-01 0.830988 0.211301 -0.926818 -0.613411\n",
"2013-01-03 0.890640 -1.036566 -2.189510 -0.397050\n",
"2013-01-04 1.565294 -0.901578 1.148267 0.287584\n",
"2013-01-05 0.180890 2.301889 -0.003075 0.478628"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[df.A > 0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### where 操作:"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-01 | \n",
" 0.830988 | \n",
" 0.211301 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" NaN | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" NaN | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" NaN | \n",
" 1.148267 | \n",
" 0.287584 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
" NaN | \n",
" 0.478628 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"2013-01-01 0.830988 0.211301 NaN NaN\n",
"2013-01-02 NaN 0.532977 1.192366 NaN\n",
"2013-01-03 0.890640 NaN NaN NaN\n",
"2013-01-04 1.565294 NaN 1.148267 0.287584\n",
"2013-01-05 0.180890 2.301889 NaN 0.478628\n",
"2013-01-06 NaN NaN NaN NaN"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[df > 0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 使用 isin() 筛选:"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df2 = df.copy()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df2['E'] = ['one', 'one', 'two', 'three', 'four', 'three']"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" E | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-01 | \n",
" 0.830988 | \n",
" 0.211301 | \n",
" -0.926818 | \n",
" -0.613411 | \n",
" one | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" -1.106847 | \n",
" one | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -0.397050 | \n",
" two | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 0.287584 | \n",
" three | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
" -0.003075 | \n",
" 0.478628 | \n",
" four | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" -0.050440 | \n",
" -0.840614 | \n",
" -0.547810 | \n",
" -0.396750 | \n",
" three | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D E\n",
"2013-01-01 0.830988 0.211301 -0.926818 -0.613411 one\n",
"2013-01-02 -1.314992 0.532977 1.192366 -1.106847 one\n",
"2013-01-03 0.890640 -1.036566 -2.189510 -0.397050 two\n",
"2013-01-04 1.565294 -0.901578 1.148267 0.287584 three\n",
"2013-01-05 0.180890 2.301889 -0.003075 0.478628 four\n",
"2013-01-06 -0.050440 -0.840614 -0.547810 -0.396750 three"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" E | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-03 | \n",
" 0.89064 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -0.397050 | \n",
" two | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.18089 | \n",
" 2.301889 | \n",
" -0.003075 | \n",
" 0.478628 | \n",
" four | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D E\n",
"2013-01-03 0.89064 -1.036566 -2.189510 -0.397050 two\n",
"2013-01-05 0.18089 2.301889 -0.003075 0.478628 four"
]
},
"execution_count": 43,
"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": 44,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"s1 = pd.Series([1, 2, 3, 4, 5, 6], index=pd.date_range('20130102', periods=6))"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"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": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s1"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df['F'] = s1"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" F | \n",
"
\n",
" \n",
" \n",
" \n",
" 2013-01-01 | \n",
" 0.830988 | \n",
" 0.211301 | \n",
" -0.926818 | \n",
" -0.613411 | \n",
" NaN | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" -1.106847 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -0.397050 | \n",
" 2.0 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 0.287584 | \n",
" 3.0 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
" -0.003075 | \n",
" 0.478628 | \n",
" 4.0 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" -0.050440 | \n",
" -0.840614 | \n",
" -0.547810 | \n",
" -0.396750 | \n",
" 5.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D F\n",
"2013-01-01 0.830988 0.211301 -0.926818 -0.613411 NaN\n",
"2013-01-02 -1.314992 0.532977 1.192366 -1.106847 1.0\n",
"2013-01-03 0.890640 -1.036566 -2.189510 -0.397050 2.0\n",
"2013-01-04 1.565294 -0.901578 1.148267 0.287584 3.0\n",
"2013-01-05 0.180890 2.301889 -0.003075 0.478628 4.0\n",
"2013-01-06 -0.050440 -0.840614 -0.547810 -0.396750 5.0"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 按标签赋值:"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df.at[dates[0], 'A'] = 0"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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.211301 | \n",
" -0.926818 | \n",
" -0.613411 | \n",
" NaN | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" -1.106847 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -0.397050 | \n",
" 2.0 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 0.287584 | \n",
" 3.0 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
" -0.003075 | \n",
" 0.478628 | \n",
" 4.0 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" -0.050440 | \n",
" -0.840614 | \n",
" -0.547810 | \n",
" -0.396750 | \n",
" 5.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D F\n",
"2013-01-01 0.000000 0.211301 -0.926818 -0.613411 NaN\n",
"2013-01-02 -1.314992 0.532977 1.192366 -1.106847 1.0\n",
"2013-01-03 0.890640 -1.036566 -2.189510 -0.397050 2.0\n",
"2013-01-04 1.565294 -0.901578 1.148267 0.287584 3.0\n",
"2013-01-05 0.180890 2.301889 -0.003075 0.478628 4.0\n",
"2013-01-06 -0.050440 -0.840614 -0.547810 -0.396750 5.0"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 按位置赋值:"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df.iat[0, 1] = 0"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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.926818 | \n",
" -0.613411 | \n",
" NaN | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" -1.106847 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -0.397050 | \n",
" 2.0 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 0.287584 | \n",
" 3.0 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
" -0.003075 | \n",
" 0.478628 | \n",
" 4.0 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" -0.050440 | \n",
" -0.840614 | \n",
" -0.547810 | \n",
" -0.396750 | \n",
" 5.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D F\n",
"2013-01-01 0.000000 0.000000 -0.926818 -0.613411 NaN\n",
"2013-01-02 -1.314992 0.532977 1.192366 -1.106847 1.0\n",
"2013-01-03 0.890640 -1.036566 -2.189510 -0.397050 2.0\n",
"2013-01-04 1.565294 -0.901578 1.148267 0.287584 3.0\n",
"2013-01-05 0.180890 2.301889 -0.003075 0.478628 4.0\n",
"2013-01-06 -0.050440 -0.840614 -0.547810 -0.396750 5.0"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 通过 numpy 数组分配赋值:"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df.loc[:, 'D'] = np.array([5] * len(df))"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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.926818 | \n",
" 5 | \n",
" NaN | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" 5 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" 5 | \n",
" 2.0 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 5 | \n",
" 3.0 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
" -0.003075 | \n",
" 5 | \n",
" 4.0 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" -0.050440 | \n",
" -0.840614 | \n",
" -0.547810 | \n",
" 5 | \n",
" 5.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D F\n",
"2013-01-01 0.000000 0.000000 -0.926818 5 NaN\n",
"2013-01-02 -1.314992 0.532977 1.192366 5 1.0\n",
"2013-01-03 0.890640 -1.036566 -2.189510 5 2.0\n",
"2013-01-04 1.565294 -0.901578 1.148267 5 3.0\n",
"2013-01-05 0.180890 2.301889 -0.003075 5 4.0\n",
"2013-01-06 -0.050440 -0.840614 -0.547810 5 5.0"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### where 操作赋值:"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df2 = df.copy()"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df2[df2 > 0] = -df2"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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.926818 | \n",
" -5 | \n",
" NaN | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" -0.532977 | \n",
" -1.192366 | \n",
" -5 | \n",
" -1.0 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" -0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" -5 | \n",
" -2.0 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" -1.565294 | \n",
" -0.901578 | \n",
" -1.148267 | \n",
" -5 | \n",
" -3.0 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" -0.180890 | \n",
" -2.301889 | \n",
" -0.003075 | \n",
" -5 | \n",
" -4.0 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" -0.050440 | \n",
" -0.840614 | \n",
" -0.547810 | \n",
" -5 | \n",
" -5.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D F\n",
"2013-01-01 0.000000 0.000000 -0.926818 -5 NaN\n",
"2013-01-02 -1.314992 -0.532977 -1.192366 -5 -1.0\n",
"2013-01-03 -0.890640 -1.036566 -2.189510 -5 -2.0\n",
"2013-01-04 -1.565294 -0.901578 -1.148267 -5 -3.0\n",
"2013-01-05 -0.180890 -2.301889 -0.003075 -5 -4.0\n",
"2013-01-06 -0.050440 -0.840614 -0.547810 -5 -5.0"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 丢失的数据"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"pandas 主要使用 np.nan 替换丢失的数据. 默认情况下它并不包含在计算中."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 重建索引允许 更改/添加/删除 指定指定轴索引, 并返回数据副本:"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df1.loc[dates[0]: dates[1], 'E'] = 1"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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.926818 | \n",
" 5 | \n",
" NaN | \n",
" 1.0 | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" 5 | \n",
" 1.0 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" 5 | \n",
" 2.0 | \n",
" NaN | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 5 | \n",
" 3.0 | \n",
" NaN | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D F E\n",
"2013-01-01 0.000000 0.000000 -0.926818 5 NaN 1.0\n",
"2013-01-02 -1.314992 0.532977 1.192366 5 1.0 1.0\n",
"2013-01-03 0.890640 -1.036566 -2.189510 5 2.0 NaN\n",
"2013-01-04 1.565294 -0.901578 1.148267 5 3.0 NaN"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 删除任何有丢失数据的行:"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" 5 | \n",
" 1.0 | \n",
" 1.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D F E\n",
"2013-01-02 -1.314992 0.532977 1.192366 5 1.0 1.0"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1.dropna(how='any')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 填充丢失数据:"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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.926818 | \n",
" 5 | \n",
" 5.0 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" 5 | \n",
" 1.0 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" 5 | \n",
" 2.0 | \n",
" 5.0 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 5 | \n",
" 3.0 | \n",
" 5.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D F E\n",
"2013-01-01 0.000000 0.000000 -0.926818 5 5.0 1.0\n",
"2013-01-02 -1.314992 0.532977 1.192366 5 1.0 1.0\n",
"2013-01-03 0.890640 -1.036566 -2.189510 5 2.0 5.0\n",
"2013-01-04 1.565294 -0.901578 1.148267 5 3.0 5.0"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1.fillna(value=5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 获取值是否为 nan 的布尔标记:"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" pd.isnull(df1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 运算"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 统计\n",
"计算时一般不包括丢失的数据"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 在 index 轴上计算均值:"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"A 0.211899\n",
"B 0.009351\n",
"C -0.221097\n",
"D 5.000000\n",
"F 3.000000\n",
"dtype: float64"
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.mean() # axis参数默认为0, 表示 index 轴"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 在 column 轴上计算均值:"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2013-01-01 1.018295\n",
"2013-01-02 1.282070\n",
"2013-01-03 0.932913\n",
"2013-01-04 1.962396\n",
"2013-01-05 2.295941\n",
"2013-01-06 1.712227\n",
"Freq: D, dtype: float64"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.mean(axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 用于运算的对象有不同维度并需要对齐. 除此之外, pandas 会自动沿着指定维度计算:"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"s = pd.Series([1, 3, 5, np.nan, 6, 8], index=dates).shift(2)"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2013-01-01 NaN\n",
"2013-01-02 NaN\n",
"2013-01-03 1.0\n",
"2013-01-04 3.0\n",
"2013-01-05 5.0\n",
"2013-01-06 NaN\n",
"Freq: D, dtype: float64"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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.926818 | \n",
" 5 | \n",
" NaN | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 1.192366 | \n",
" 5 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" 0.890640 | \n",
" -1.036566 | \n",
" -2.189510 | \n",
" 5 | \n",
" 2.0 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.565294 | \n",
" -0.901578 | \n",
" 1.148267 | \n",
" 5 | \n",
" 3.0 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 0.180890 | \n",
" 2.301889 | \n",
" -0.003075 | \n",
" 5 | \n",
" 4.0 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" -0.050440 | \n",
" -0.840614 | \n",
" -0.547810 | \n",
" 5 | \n",
" 5.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D F\n",
"2013-01-01 0.000000 0.000000 -0.926818 5 NaN\n",
"2013-01-02 -1.314992 0.532977 1.192366 5 1.0\n",
"2013-01-03 0.890640 -1.036566 -2.189510 5 2.0\n",
"2013-01-04 1.565294 -0.901578 1.148267 5 3.0\n",
"2013-01-05 0.180890 2.301889 -0.003075 5 4.0\n",
"2013-01-06 -0.050440 -0.840614 -0.547810 5 5.0"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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.109360 | \n",
" -2.036566 | \n",
" -3.189510 | \n",
" 4.0 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" -1.434706 | \n",
" -3.901578 | \n",
" -1.851733 | \n",
" 2.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" -4.819110 | \n",
" -2.698111 | \n",
" -5.003075 | \n",
" 0.0 | \n",
" -1.0 | \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.109360 -2.036566 -3.189510 4.0 1.0\n",
"2013-01-04 -1.434706 -3.901578 -1.851733 2.0 0.0\n",
"2013-01-05 -4.819110 -2.698111 -5.003075 0.0 -1.0\n",
"2013-01-06 NaN NaN NaN NaN NaN"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.sub(s, axis=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Apply"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 在数据上使用函数:"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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.926818 | \n",
" 5 | \n",
" NaN | \n",
"
\n",
" \n",
" 2013-01-02 | \n",
" -1.314992 | \n",
" 0.532977 | \n",
" 0.265548 | \n",
" 10 | \n",
" 1.0 | \n",
"
\n",
" \n",
" 2013-01-03 | \n",
" -0.424352 | \n",
" -0.503589 | \n",
" -1.923963 | \n",
" 15 | \n",
" 3.0 | \n",
"
\n",
" \n",
" 2013-01-04 | \n",
" 1.140942 | \n",
" -1.405167 | \n",
" -0.775696 | \n",
" 20 | \n",
" 6.0 | \n",
"
\n",
" \n",
" 2013-01-05 | \n",
" 1.321832 | \n",
" 0.896721 | \n",
" -0.778771 | \n",
" 25 | \n",
" 10.0 | \n",
"
\n",
" \n",
" 2013-01-06 | \n",
" 1.271392 | \n",
" 0.056107 | \n",
" -1.326580 | \n",
" 30 | \n",
" 15.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D F\n",
"2013-01-01 0.000000 0.000000 -0.926818 5 NaN\n",
"2013-01-02 -1.314992 0.532977 0.265548 10 1.0\n",
"2013-01-03 -0.424352 -0.503589 -1.923963 15 3.0\n",
"2013-01-04 1.140942 -1.405167 -0.775696 20 6.0\n",
"2013-01-05 1.321832 0.896721 -0.778771 25 10.0\n",
"2013-01-06 1.271392 0.056107 -1.326580 30 15.0"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.apply(np.cumsum)"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"A 2.880286\n",
"B 3.338455\n",
"C 3.381876\n",
"D 0.000000\n",
"F 4.000000\n",
"dtype: float64"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.apply(lambda x: x.max() - x.min())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 直方图"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"s = pd.Series(np.random.randint(0, 7, size=10))"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 3\n",
"1 0\n",
"2 6\n",
"3 6\n",
"4 1\n",
"5 3\n",
"6 4\n",
"7 2\n",
"8 5\n",
"9 4\n",
"dtype: int64"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6 2\n",
"4 2\n",
"3 2\n",
"5 1\n",
"2 1\n",
"1 1\n",
"0 1\n",
"dtype: int64"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 字符串方法"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 序列可以使用一些字符串处理方法, 很轻易操作数据组中的每个元素, 比如以下代码片断.\n",
"### 注意: 字符匹配方法默认情况下, 通常使用正则表达式(并且大多数时候都如此)."
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"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": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s.str.lower()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 合并"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"pandas 提供各种工具以简便合并序列, 数据帧, 和组合对象. 在 连接/合并 类型操作中, 使用多种类型索引和相关数学函数."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 把 pandas 对象连接到一起:"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df = pd.DataFrame(np.random.randn(10, 4))"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1.198139 | \n",
" 0.255351 | \n",
" -2.163206 | \n",
" -0.546918 | \n",
"
\n",
" \n",
" 1 | \n",
" -0.757948 | \n",
" 0.719486 | \n",
" 0.944935 | \n",
" 0.961493 | \n",
"
\n",
" \n",
" 2 | \n",
" -1.231672 | \n",
" -0.301289 | \n",
" 0.015839 | \n",
" 0.183131 | \n",
"
\n",
" \n",
" 3 | \n",
" 1.005350 | \n",
" 0.040537 | \n",
" 1.347831 | \n",
" 0.562388 | \n",
"
\n",
" \n",
" 4 | \n",
" -1.560731 | \n",
" 0.127616 | \n",
" 2.606517 | \n",
" 0.994567 | \n",
"
\n",
" \n",
" 5 | \n",
" 1.243707 | \n",
" -0.522960 | \n",
" 0.073443 | \n",
" 0.483926 | \n",
"
\n",
" \n",
" 6 | \n",
" 1.651448 | \n",
" 0.254195 | \n",
" 0.295707 | \n",
" -2.312916 | \n",
"
\n",
" \n",
" 7 | \n",
" -0.208332 | \n",
" -1.197274 | \n",
" 2.738847 | \n",
" 0.038823 | \n",
"
\n",
" \n",
" 8 | \n",
" -0.295732 | \n",
" -0.211062 | \n",
" 0.181727 | \n",
" 0.827109 | \n",
"
\n",
" \n",
" 9 | \n",
" 1.247613 | \n",
" 0.318213 | \n",
" -0.525624 | \n",
" 0.119192 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0 1 2 3\n",
"0 1.198139 0.255351 -2.163206 -0.546918\n",
"1 -0.757948 0.719486 0.944935 0.961493\n",
"2 -1.231672 -0.301289 0.015839 0.183131\n",
"3 1.005350 0.040537 1.347831 0.562388\n",
"4 -1.560731 0.127616 2.606517 0.994567\n",
"5 1.243707 -0.522960 0.073443 0.483926\n",
"6 1.651448 0.254195 0.295707 -2.312916\n",
"7 -0.208332 -1.197274 2.738847 0.038823\n",
"8 -0.295732 -0.211062 0.181727 0.827109\n",
"9 1.247613 0.318213 -0.525624 0.119192"
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"pieces = [df[:3], df[3:7], df[7:]]"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[ 0 1 2 3\n",
" 0 1.198139 0.255351 -2.163206 -0.546918\n",
" 1 -0.757948 0.719486 0.944935 0.961493\n",
" 2 -1.231672 -0.301289 0.015839 0.183131,\n",
" 0 1 2 3\n",
" 3 1.005350 0.040537 1.347831 0.562388\n",
" 4 -1.560731 0.127616 2.606517 0.994567\n",
" 5 1.243707 -0.522960 0.073443 0.483926\n",
" 6 1.651448 0.254195 0.295707 -2.312916,\n",
" 0 1 2 3\n",
" 7 -0.208332 -1.197274 2.738847 0.038823\n",
" 8 -0.295732 -0.211062 0.181727 0.827109\n",
" 9 1.247613 0.318213 -0.525624 0.119192]"
]
},
"execution_count": 79,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pieces"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1.198139 | \n",
" 0.255351 | \n",
" -2.163206 | \n",
" -0.546918 | \n",
"
\n",
" \n",
" 1 | \n",
" -0.757948 | \n",
" 0.719486 | \n",
" 0.944935 | \n",
" 0.961493 | \n",
"
\n",
" \n",
" 2 | \n",
" -1.231672 | \n",
" -0.301289 | \n",
" 0.015839 | \n",
" 0.183131 | \n",
"
\n",
" \n",
" 3 | \n",
" 1.005350 | \n",
" 0.040537 | \n",
" 1.347831 | \n",
" 0.562388 | \n",
"
\n",
" \n",
" 4 | \n",
" -1.560731 | \n",
" 0.127616 | \n",
" 2.606517 | \n",
" 0.994567 | \n",
"
\n",
" \n",
" 5 | \n",
" 1.243707 | \n",
" -0.522960 | \n",
" 0.073443 | \n",
" 0.483926 | \n",
"
\n",
" \n",
" 6 | \n",
" 1.651448 | \n",
" 0.254195 | \n",
" 0.295707 | \n",
" -2.312916 | \n",
"
\n",
" \n",
" 7 | \n",
" -0.208332 | \n",
" -1.197274 | \n",
" 2.738847 | \n",
" 0.038823 | \n",
"
\n",
" \n",
" 8 | \n",
" -0.295732 | \n",
" -0.211062 | \n",
" 0.181727 | \n",
" 0.827109 | \n",
"
\n",
" \n",
" 9 | \n",
" 1.247613 | \n",
" 0.318213 | \n",
" -0.525624 | \n",
" 0.119192 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0 1 2 3\n",
"0 1.198139 0.255351 -2.163206 -0.546918\n",
"1 -0.757948 0.719486 0.944935 0.961493\n",
"2 -1.231672 -0.301289 0.015839 0.183131\n",
"3 1.005350 0.040537 1.347831 0.562388\n",
"4 -1.560731 0.127616 2.606517 0.994567\n",
"5 1.243707 -0.522960 0.073443 0.483926\n",
"6 1.651448 0.254195 0.295707 -2.312916\n",
"7 -0.208332 -1.197274 2.738847 0.038823\n",
"8 -0.295732 -0.211062 0.181727 0.827109\n",
"9 1.247613 0.318213 -0.525624 0.119192"
]
},
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.concat(pieces)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 连接"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### SQL 样式合并:"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"left"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key | \n",
" rval | \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 rval\n",
"0 foo 4\n",
"1 foo 5"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"right"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" key | \n",
" lval | \n",
" rval | \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 rval\n",
"0 foo 1 4\n",
"1 foo 1 5\n",
"2 foo 2 4\n",
"3 foo 2 5"
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.merge(left, right, on='key')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 添加"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 添加行到数据帧:"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df = pd.DataFrame(np.random.randn(8, 4), columns=['A', 'B', 'C', 'D'])"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" -1.114572 | \n",
" 0.097531 | \n",
" 0.022282 | \n",
" 0.219714 | \n",
"
\n",
" \n",
" 1 | \n",
" 1.040871 | \n",
" -2.641861 | \n",
" -0.197795 | \n",
" -0.430224 | \n",
"
\n",
" \n",
" 2 | \n",
" 1.064996 | \n",
" -0.815516 | \n",
" 2.375643 | \n",
" -2.706566 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.208141 | \n",
" 0.107715 | \n",
" -0.163068 | \n",
" 0.252386 | \n",
"
\n",
" \n",
" 4 | \n",
" 0.921251 | \n",
" -0.336959 | \n",
" 0.502700 | \n",
" 0.802547 | \n",
"
\n",
" \n",
" 5 | \n",
" 0.047286 | \n",
" 2.025958 | \n",
" 0.954283 | \n",
" 1.381018 | \n",
"
\n",
" \n",
" 6 | \n",
" 0.518963 | \n",
" -1.539909 | \n",
" 0.021547 | \n",
" 1.477309 | \n",
"
\n",
" \n",
" 7 | \n",
" -0.106894 | \n",
" 0.862488 | \n",
" -0.828176 | \n",
" -0.815590 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"0 -1.114572 0.097531 0.022282 0.219714\n",
"1 1.040871 -2.641861 -0.197795 -0.430224\n",
"2 1.064996 -0.815516 2.375643 -2.706566\n",
"3 0.208141 0.107715 -0.163068 0.252386\n",
"4 0.921251 -0.336959 0.502700 0.802547\n",
"5 0.047286 2.025958 0.954283 1.381018\n",
"6 0.518963 -1.539909 0.021547 1.477309\n",
"7 -0.106894 0.862488 -0.828176 -0.815590"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"s = df.iloc[3]"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" -1.114572 | \n",
" 0.097531 | \n",
" 0.022282 | \n",
" 0.219714 | \n",
"
\n",
" \n",
" 1 | \n",
" 1.040871 | \n",
" -2.641861 | \n",
" -0.197795 | \n",
" -0.430224 | \n",
"
\n",
" \n",
" 2 | \n",
" 1.064996 | \n",
" -0.815516 | \n",
" 2.375643 | \n",
" -2.706566 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.208141 | \n",
" 0.107715 | \n",
" -0.163068 | \n",
" 0.252386 | \n",
"
\n",
" \n",
" 4 | \n",
" 0.921251 | \n",
" -0.336959 | \n",
" 0.502700 | \n",
" 0.802547 | \n",
"
\n",
" \n",
" 5 | \n",
" 0.047286 | \n",
" 2.025958 | \n",
" 0.954283 | \n",
" 1.381018 | \n",
"
\n",
" \n",
" 6 | \n",
" 0.518963 | \n",
" -1.539909 | \n",
" 0.021547 | \n",
" 1.477309 | \n",
"
\n",
" \n",
" 7 | \n",
" -0.106894 | \n",
" 0.862488 | \n",
" -0.828176 | \n",
" -0.815590 | \n",
"
\n",
" \n",
" 8 | \n",
" 0.208141 | \n",
" 0.107715 | \n",
" -0.163068 | \n",
" 0.252386 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"0 -1.114572 0.097531 0.022282 0.219714\n",
"1 1.040871 -2.641861 -0.197795 -0.430224\n",
"2 1.064996 -0.815516 2.375643 -2.706566\n",
"3 0.208141 0.107715 -0.163068 0.252386\n",
"4 0.921251 -0.336959 0.502700 0.802547\n",
"5 0.047286 2.025958 0.954283 1.381018\n",
"6 0.518963 -1.539909 0.021547 1.477309\n",
"7 -0.106894 0.862488 -0.828176 -0.815590\n",
"8 0.208141 0.107715 -0.163068 0.252386"
]
},
"execution_count": 89,
"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": 90,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar'],\n",
" 'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],\n",
" 'C': np.random.randn(8),\n",
" 'D': np.random.randn(8)})"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" foo | \n",
" one | \n",
" -0.322029 | \n",
" 0.593835 | \n",
"
\n",
" \n",
" 1 | \n",
" bar | \n",
" one | \n",
" -1.485272 | \n",
" 0.700787 | \n",
"
\n",
" \n",
" 2 | \n",
" foo | \n",
" two | \n",
" 0.914429 | \n",
" 0.699238 | \n",
"
\n",
" \n",
" 3 | \n",
" bar | \n",
" three | \n",
" -1.552597 | \n",
" -0.003782 | \n",
"
\n",
" \n",
" 4 | \n",
" foo | \n",
" two | \n",
" 3.025511 | \n",
" 0.586944 | \n",
"
\n",
" \n",
" 5 | \n",
" bar | \n",
" two | \n",
" 0.499808 | \n",
" 0.383772 | \n",
"
\n",
" \n",
" 6 | \n",
" foo | \n",
" one | \n",
" -0.263149 | \n",
" -0.431824 | \n",
"
\n",
" \n",
" 7 | \n",
" bar | \n",
" three | \n",
" 0.967752 | \n",
" 0.946886 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D\n",
"0 foo one -0.322029 0.593835\n",
"1 bar one -1.485272 0.700787\n",
"2 foo two 0.914429 0.699238\n",
"3 bar three -1.552597 -0.003782\n",
"4 foo two 3.025511 0.586944\n",
"5 bar two 0.499808 0.383772\n",
"6 foo one -0.263149 -0.431824\n",
"7 bar three 0.967752 0.946886"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 分组, 然后应用函数统计总和, 存放到结果组:"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" A | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" bar | \n",
" -1.570308 | \n",
" 2.027663 | \n",
"
\n",
" \n",
" foo | \n",
" 3.354763 | \n",
" 1.448194 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" C D\n",
"A \n",
"bar -1.570308 2.027663\n",
"foo 3.354763 1.448194"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby('A').sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 按多列分组为层次索引, 然后应用函数:"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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.485272 | \n",
" 0.700787 | \n",
"
\n",
" \n",
" three | \n",
" -0.584845 | \n",
" 0.943104 | \n",
"
\n",
" \n",
" two | \n",
" 0.499808 | \n",
" 0.383772 | \n",
"
\n",
" \n",
" foo | \n",
" one | \n",
" -0.585178 | \n",
" 0.162011 | \n",
"
\n",
" \n",
" two | \n",
" 3.939940 | \n",
" 1.286183 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" C D\n",
"A B \n",
"bar one -1.485272 0.700787\n",
" three -0.584845 0.943104\n",
" two 0.499808 0.383772\n",
"foo one -0.585178 0.162011\n",
" two 3.939940 1.286183"
]
},
"execution_count": 93,
"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": 94,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('bar', 'one'),\n",
" ('bar', 'two'),\n",
" ('baz', 'one'),\n",
" ('baz', 'two'),\n",
" ('foo', 'one'),\n",
" ('foo', 'two'),\n",
" ('qux', 'one'),\n",
" ('qux', 'two')]"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tuples = list(zip(*[['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],\n",
" ['one', 'two', 'one', 'two','one', 'two', 'one', 'two']]))\n",
"tuples"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"index = pd.MultiIndex.from_tuples(tuples, names=['first', 'seconds'])"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" first | \n",
" seconds | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" bar | \n",
" one | \n",
" -0.558695 | \n",
" 0.105423 | \n",
"
\n",
" \n",
" two | \n",
" 0.271188 | \n",
" -0.217300 | \n",
"
\n",
" \n",
" baz | \n",
" one | \n",
" 0.093175 | \n",
" -0.225239 | \n",
"
\n",
" \n",
" two | \n",
" -0.093316 | \n",
" -0.791467 | \n",
"
\n",
" \n",
" foo | \n",
" one | \n",
" -0.145413 | \n",
" 0.126640 | \n",
"
\n",
" \n",
" two | \n",
" 1.120556 | \n",
" 1.117124 | \n",
"
\n",
" \n",
" qux | \n",
" one | \n",
" -1.304878 | \n",
" -1.166168 | \n",
"
\n",
" \n",
" two | \n",
" 0.522716 | \n",
" 0.857816 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B\n",
"first seconds \n",
"bar one -0.558695 0.105423\n",
" two 0.271188 -0.217300\n",
"baz one 0.093175 -0.225239\n",
" two -0.093316 -0.791467\n",
"foo one -0.145413 0.126640\n",
" two 1.120556 1.117124\n",
"qux one -1.304878 -1.166168\n",
" two 0.522716 0.857816"
]
},
"execution_count": 97,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df2 = df[:4]"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" first | \n",
" seconds | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" bar | \n",
" one | \n",
" -0.558695 | \n",
" 0.105423 | \n",
"
\n",
" \n",
" two | \n",
" 0.271188 | \n",
" -0.217300 | \n",
"
\n",
" \n",
" baz | \n",
" one | \n",
" 0.093175 | \n",
" -0.225239 | \n",
"
\n",
" \n",
" two | \n",
" -0.093316 | \n",
" -0.791467 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B\n",
"first seconds \n",
"bar one -0.558695 0.105423\n",
" two 0.271188 -0.217300\n",
"baz one 0.093175 -0.225239\n",
" two -0.093316 -0.791467"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 堆叠函数, \"压缩\" 数据帧的列一个级别:"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"stacked = df2.stack()"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"first seconds \n",
"bar one A -0.558695\n",
" B 0.105423\n",
" two A 0.271188\n",
" B -0.217300\n",
"baz one A 0.093175\n",
" B -0.225239\n",
" two A -0.093316\n",
" B -0.791467\n",
"dtype: float64"
]
},
"execution_count": 101,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stacked"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 被 \"堆叠\" 数据帧或序列(有多个索引作为索引), 其堆叠的反向操作为取消堆叠, 上面的数据默认反堆叠到上一级别:"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" first | \n",
" seconds | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" bar | \n",
" one | \n",
" -0.558695 | \n",
" 0.105423 | \n",
"
\n",
" \n",
" two | \n",
" 0.271188 | \n",
" -0.217300 | \n",
"
\n",
" \n",
" baz | \n",
" one | \n",
" 0.093175 | \n",
" -0.225239 | \n",
"
\n",
" \n",
" two | \n",
" -0.093316 | \n",
" -0.791467 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B\n",
"first seconds \n",
"bar one -0.558695 0.105423\n",
" two 0.271188 -0.217300\n",
"baz one 0.093175 -0.225239\n",
" two -0.093316 -0.791467"
]
},
"execution_count": 102,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stacked.unstack()"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" seconds | \n",
" one | \n",
" two | \n",
"
\n",
" \n",
" first | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" bar | \n",
" A | \n",
" -0.558695 | \n",
" 0.271188 | \n",
"
\n",
" \n",
" B | \n",
" 0.105423 | \n",
" -0.217300 | \n",
"
\n",
" \n",
" baz | \n",
" A | \n",
" 0.093175 | \n",
" -0.093316 | \n",
"
\n",
" \n",
" B | \n",
" -0.225239 | \n",
" -0.791467 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"seconds one two\n",
"first \n",
"bar A -0.558695 0.271188\n",
" B 0.105423 -0.217300\n",
"baz A 0.093175 -0.093316\n",
" B -0.225239 -0.791467"
]
},
"execution_count": 103,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stacked.unstack(level=1)"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" first | \n",
" bar | \n",
" baz | \n",
"
\n",
" \n",
" seconds | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" one | \n",
" A | \n",
" -0.558695 | \n",
" 0.093175 | \n",
"
\n",
" \n",
" B | \n",
" 0.105423 | \n",
" -0.225239 | \n",
"
\n",
" \n",
" two | \n",
" A | \n",
" 0.271188 | \n",
" -0.093316 | \n",
"
\n",
" \n",
" B | \n",
" -0.217300 | \n",
" -0.791467 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"first bar baz\n",
"seconds \n",
"one A -0.558695 0.093175\n",
" B 0.105423 -0.225239\n",
"two A 0.271188 -0.093316\n",
" B -0.217300 -0.791467"
]
},
"execution_count": 104,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stacked.unstack(level=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 数据透视表"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 查看数据透视表"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {
"collapsed": true
},
"outputs": [],
"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)})"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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",
" 1.894734 | \n",
" -2.293275 | \n",
"
\n",
" \n",
" 1 | \n",
" one | \n",
" B | \n",
" foo | \n",
" -1.362782 | \n",
" -0.130090 | \n",
"
\n",
" \n",
" 2 | \n",
" two | \n",
" C | \n",
" foo | \n",
" 0.843821 | \n",
" 0.649588 | \n",
"
\n",
" \n",
" 3 | \n",
" three | \n",
" A | \n",
" bar | \n",
" 0.496000 | \n",
" -0.623999 | \n",
"
\n",
" \n",
" 4 | \n",
" one | \n",
" B | \n",
" bar | \n",
" 0.457438 | \n",
" -0.495746 | \n",
"
\n",
" \n",
" 5 | \n",
" one | \n",
" C | \n",
" bar | \n",
" -0.645673 | \n",
" -0.517788 | \n",
"
\n",
" \n",
" 6 | \n",
" two | \n",
" A | \n",
" foo | \n",
" -1.247229 | \n",
" 0.242816 | \n",
"
\n",
" \n",
" 7 | \n",
" three | \n",
" B | \n",
" foo | \n",
" 1.666903 | \n",
" 1.620036 | \n",
"
\n",
" \n",
" 8 | \n",
" one | \n",
" C | \n",
" foo | \n",
" -0.585036 | \n",
" -0.344293 | \n",
"
\n",
" \n",
" 9 | \n",
" one | \n",
" A | \n",
" bar | \n",
" 0.277802 | \n",
" 0.688129 | \n",
"
\n",
" \n",
" 10 | \n",
" two | \n",
" B | \n",
" bar | \n",
" 0.988346 | \n",
" 0.868884 | \n",
"
\n",
" \n",
" 11 | \n",
" three | \n",
" C | \n",
" bar | \n",
" -2.202665 | \n",
" 0.232460 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D E\n",
"0 one A foo 1.894734 -2.293275\n",
"1 one B foo -1.362782 -0.130090\n",
"2 two C foo 0.843821 0.649588\n",
"3 three A bar 0.496000 -0.623999\n",
"4 one B bar 0.457438 -0.495746\n",
"5 one C bar -0.645673 -0.517788\n",
"6 two A foo -1.247229 0.242816\n",
"7 three B foo 1.666903 1.620036\n",
"8 one C foo -0.585036 -0.344293\n",
"9 one A bar 0.277802 0.688129\n",
"10 two B bar 0.988346 0.868884\n",
"11 three C bar -2.202665 0.232460"
]
},
"execution_count": 106,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 我们可以从上面的数据中, 非常容易的产生数据透视表:"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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.277802 | \n",
" 1.894734 | \n",
"
\n",
" \n",
" B | \n",
" 0.457438 | \n",
" -1.362782 | \n",
"
\n",
" \n",
" C | \n",
" -0.645673 | \n",
" -0.585036 | \n",
"
\n",
" \n",
" three | \n",
" A | \n",
" 0.496000 | \n",
" NaN | \n",
"
\n",
" \n",
" B | \n",
" NaN | \n",
" 1.666903 | \n",
"
\n",
" \n",
" C | \n",
" -2.202665 | \n",
" NaN | \n",
"
\n",
" \n",
" two | \n",
" A | \n",
" NaN | \n",
" -1.247229 | \n",
"
\n",
" \n",
" B | \n",
" 0.988346 | \n",
" NaN | \n",
"
\n",
" \n",
" C | \n",
" NaN | \n",
" 0.843821 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"C bar foo\n",
"A B \n",
"one A 0.277802 1.894734\n",
" B 0.457438 -1.362782\n",
" C -0.645673 -0.585036\n",
"three A 0.496000 NaN\n",
" B NaN 1.666903\n",
" C -2.202665 NaN\n",
"two A NaN -1.247229\n",
" B 0.988346 NaN\n",
" C NaN 0.843821"
]
},
"execution_count": 107,
"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分钟数据). \n",
"这是很普通的情况, 但不局限于金融应用."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 重新采样:"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"rng = pd.date_range('1/1/2012', periods=100, freq='S')"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2012-01-01 21689\n",
"Freq: 5T, dtype: int64"
]
},
"execution_count": 110,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts.resample('5MIN').sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 时区表示:"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"rng = pd.date_range('3/6/2012 00:00', periods=5, freq='D')"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ts = pd.Series(np.random.randn(len(rng)), index=rng)"
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2012-03-06 -0.766239\n",
"2012-03-07 0.453263\n",
"2012-03-08 -0.490956\n",
"2012-03-09 -1.291874\n",
"2012-03-10 -0.463390\n",
"Freq: D, dtype: float64"
]
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ts_utc = ts.tz_localize('UTC')"
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2012-03-06 00:00:00+00:00 -0.766239\n",
"2012-03-07 00:00:00+00:00 0.453263\n",
"2012-03-08 00:00:00+00:00 -0.490956\n",
"2012-03-09 00:00:00+00:00 -1.291874\n",
"2012-03-10 00:00:00+00:00 -0.463390\n",
"Freq: D, dtype: float64"
]
},
"execution_count": 115,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts_utc"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 转换到其它时区:"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2012-03-05 19:00:00-05:00 -0.766239\n",
"2012-03-06 19:00:00-05:00 0.453263\n",
"2012-03-07 19:00:00-05:00 -0.490956\n",
"2012-03-08 19:00:00-05:00 -1.291874\n",
"2012-03-09 19:00:00-05:00 -0.463390\n",
"Freq: D, dtype: float64"
]
},
"execution_count": 116,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts_utc.tz_convert('US/Eastern')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 转换不同的时间跨度:"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"rng = pd.date_range('1/1/2012', periods=5, freq='M')"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ts = pd.Series(np.random.randn(len(rng)), index=rng)"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2012-01-31 0.095301\n",
"2012-02-29 0.408777\n",
"2012-03-31 -0.790425\n",
"2012-04-30 0.090653\n",
"2012-05-31 0.317007\n",
"Freq: M, dtype: float64"
]
},
"execution_count": 119,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ps = ts.to_period()"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2012-01 0.095301\n",
"2012-02 0.408777\n",
"2012-03 -0.790425\n",
"2012-04 0.090653\n",
"2012-05 0.317007\n",
"Freq: M, dtype: float64"
]
},
"execution_count": 121,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ps"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2012-01-01 0.095301\n",
"2012-02-01 0.408777\n",
"2012-03-01 -0.790425\n",
"2012-04-01 0.090653\n",
"2012-05-01 0.317007\n",
"Freq: MS, dtype: float64"
]
},
"execution_count": 122,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ps.to_timestamp()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 转换时段, 并且使用一些运算函数. 下例中, 我们转换年报11月到季度结束每日上午9点的数据:"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"prng = pd.period_range('1990Q1', '2004Q4', freq='Q-NOV')"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ts = pd.Series(np.random.randn(len(prng)), index=prng)"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1990Q1 1.795697\n",
"1990Q2 0.311190\n",
"1990Q3 0.626286\n",
"1990Q4 -3.022472\n",
"1991Q1 0.482668\n",
"Freq: Q-NOV, dtype: float64"
]
},
"execution_count": 125,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts.head()"
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ts.index = (prng.asfreq('M', 'e') + 1).asfreq('H', 's') + 9"
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1990-03-01 09:00 1.795697\n",
"1990-06-01 09:00 0.311190\n",
"1990-09-01 09:00 0.626286\n",
"1990-12-01 09:00 -3.022472\n",
"1991-03-01 09:00 0.482668\n",
"Freq: H, dtype: float64"
]
},
"execution_count": 127,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 分类"
]
},
{
"cell_type": "code",
"execution_count": 128,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df = pd.DataFrame({'id': [1, 2, 3, 4, 5, 6], 'raw_grade': ['a', 'b', 'b', 'a', 'a', 'e']})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 转换原始类别为分类数据类型:"
]
},
{
"cell_type": "code",
"execution_count": 129,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df['grade'] = df['raw_grade'].astype('category')"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 a\n",
"1 b\n",
"2 b\n",
"3 a\n",
"4 a\n",
"5 e\n",
"Name: grade, dtype: category\n",
"Categories (3, object): [a, b, e]"
]
},
"execution_count": 130,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['grade']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 重命名分类为更有意义的名称(分配到 Series.cat.categories 对应位置):"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df['grade'].cat.categories = ['very good', 'good', 'very bad']"
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 very good\n",
"1 good\n",
"2 good\n",
"3 very good\n",
"4 very good\n",
"5 very bad\n",
"Name: grade, dtype: category\n",
"Categories (3, object): [very good, good, very bad]"
]
},
"execution_count": 132,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['grade']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 重排顺分类, 同时添加缺少的分类(序列 .cat 方法下返回新默认序列):"
]
},
{
"cell_type": "code",
"execution_count": 133,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df['grade'] = df['grade'].cat.set_categories(['very bad', 'bad', 'medium', 'good', 'very good'])"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 very good\n",
"1 good\n",
"2 good\n",
"3 very good\n",
"4 very good\n",
"5 very bad\n",
"Name: grade, dtype: category\n",
"Categories (5, object): [very bad, bad, medium, good, very good]"
]
},
"execution_count": 134,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['grade']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 排列分类中的顺序(不是按词汇排列):"
]
},
{
"cell_type": "code",
"execution_count": 135,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" id | \n",
" raw_grade | \n",
" grade | \n",
"
\n",
" \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",
" 4 | \n",
" 5 | \n",
" a | \n",
" very good | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" id raw_grade grade\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\n",
"4 5 a very good"
]
},
"execution_count": 135,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.sort_values('grade')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 类别列分组, 并且也显示空类别:"
]
},
{
"cell_type": "code",
"execution_count": 136,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"grade\n",
"very bad 1\n",
"bad 0\n",
"medium 0\n",
"good 2\n",
"very good 3\n",
"dtype: int64"
]
},
"execution_count": 136,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby('grade').size()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 绘画"
]
},
{
"cell_type": "code",
"execution_count": 137,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))"
]
},
{
"cell_type": "code",
"execution_count": 138,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ts = ts.cumsum()"
]
},
{
"cell_type": "code",
"execution_count": 139,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 139,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ts.plot()"
]
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 在数据帧中, 可以很方便的绘制带标签列:"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=['A', 'B', 'C', 'D'])"
]
},
{
"cell_type": "code",
"execution_count": 142,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df = df.cumsum()"
]
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 143,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plt.figure()\n",
"df.plot()\n",
"plt.legend(loc='best')"
]
},
{
"cell_type": "code",
"execution_count": 144,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEHCAYAAACjh0HiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4FFUXh9/ZTSUJ6SGNEEJvoYN0RDrSpQqCiIKKAjaw\noiJiQcWuKAgiSFHgQ5EuVXpoAUIIhIT03vtm5/vjbiWVEAjovM/Ds1PuzN7dLHPuPfec35FkWUZB\nQUFB4b+LqqY7oKCgoKBQsyiGQEFBQeE/jmIIFBQUFP7jKIZAQUFB4T+OYggUFBQU/uMohkBBQUHh\nP45iCBQUFBT+49xxQyBJklqSpDOSJP2p268vSdJxSZKuSpK0XpIkqzvdBwUFBQWFsrkbM4LZQIjJ\n/ofAZ7IsNwTSgCfuQh8UFBQUFMpAupOZxZIk+QKrgEXAC8BQIAnwlGVZI0lSF+BtWZYHlHcfNzc3\n2d/f/471U0FBQeHfSFBQULIsy+4VtbO4w/1YCrwCOOj2XYF0WZY1uv1owKeim/j7+3Pq1Kk700MF\nBQWFfymSJEVWpt0dcw1JkvQwkCjLclAVr39KkqRTkiSdSkpKqubeKSgoKCjouZNrBN2AYZIkRQDr\ngD7A54CTJEn6mYgvEFPaxbIsL5NluYMsyx3c3Suc2SgoKCgoVJE7ZghkWX5VlmVfWZb9gfHA37Is\nPwrsAx7RNZsC/O9O9UFBQUFBoWJqIo9gHvCCJElXEWsGy2ugDwoKCgoKOu70YjEAsizvB/brtsOB\nTnfjfRUUFBQUKkbJLFZQUFD4j6MYAgWF6kCWobiopnuhoFAlFEOgoFAdnFsHC90go9QgOAWFexrF\nECgoVAfn1orX6BPiNTMWUq/XXH/uJTSFUJhb071QKIe7slisoPCvx8pevG6cCkGrIHyf2H87o8a6\ndE8gy/BtV0gJg1euQy2Xmu6RQikoMwIFhdulMBeu/W3c1xsBgLRKZfjf32i1ZbvEDn4sjADAn3Pu\nXp8UbgnFECgo3C4ZUaDJh84zwdIOOj4pXgFiz9Rs3+4Gx7+Dz5pD0pWS586uMW5rCu5enxRuCcUQ\nKCjcLhnR4rX5cHg9FoYsgXnXQWUBcefEubNrIf0GXNwMMach/1/kMgrbJV6/7ghvO4r1ET3FGggc\nB35doSC7ZvqnUCHKGoGCwu2Sck281jYR0rWwBo9mwhAU5sCWp0te99JVsC9DRyszDnKTwbNV9fe3\nuslPN9/f8Sr4d4emD0NmDDjXB7UlXN4m3EgqZfx5r6H8RRQUqopWC0ErYfvLYr+2t/l5r9ZwbS+c\nX1/69Usawrn1cGWn+fGgVfBpU/iue7V3udrRFELCRfAMNB67tAX+eglO/iD2W4+Det0hLw2SLtdM\nPxXKRTEECgpV5eSP8Mds477a0vy8d1vx+udc4zELGxjxnXF/81OwdixcPyT2z6yBP543nv/ni+rt\n8+1w/SBc+N382N53oLgQus8t2f7QJxDQC1wCxOwIIOXqne/nXUQra3nv2HusvrS6prtyWyiuIQWF\nqnJ+nVgULsop/XzbyXDiR0gyqdT6RoJ4Valh05PG46seFmsMl24S4939JnR7nlK5ugcij8JDb1b9\nM1SWojxYNVRs56RA/Hk4Y/Lw82kPNk4l3UQPPCteXRuI1z/ngkdzcGt45/t8F7icepn1oWLG18On\nB/6O/jXboSqizAgU7im0sramu1A5tMWQcAnaT4UXQ2HupZJtLKyh50vGfb8uxu3AsebuFDA3AtaO\npb/vXy+LBdm3HeGX0XBoiViQLY+oE/D7dOOidmloCkXM/03IssyakDUkfdnWeHD7y+ZGIHA8ONeD\nuRdgXiTMi4BZQTDzMDTur/s8uiKFucmw4bHS+5CTAj/0EQvr9wnBScGG7V9CfqnBntweiiFQuGco\nKi5i8KbBvHzg5ZruSsWkXAVNHni2BAdPcCyj4qpbI+P25M3m51rpynL0mg91TBaF+y2EV29Ar3kg\nqaAoXxzXFsOJZSXfI/aMSGQ7v6HkuRvHYXk/CN4I/3xeeh+zk+BDf/h5GESd5EDIBnqt78WJuBNE\nZUXxwYkPGOGkokwT3Uw3U7B2AFsnsHUWI/6bF7pH6xTnEy/Cpa3m54o1cHU3xATB9nmlGqV7kfjc\neCwkC7r5dGPL1S1EZUbVdJeqhGIIFO4ZghKDiMmOYUfEDv649se9PTvQh4V6tSm/nauJC8TS1vxc\nl+dg+t/w4Kvw9GGYexG6zIJOOpeRe1OQtUbXUla8eHWqBzP/gWFfiv3lfUVY6t53ISvB/D30khcg\nwllNSQ0X0UnRJ4R76/pB4lYOYNaJhaTmp/L50feI2fM6AJlqNb+2HFD6Z3SqW/53oKfVI9Bphtje\nMFm4tna8JqKqfh0Pm3XnCjIhfH/l7lnDxOfE41HLg1ltZlFQXMBHJz+q6S5VCcUQKNwznEs8Z9h+\n7fBrHIs9VoO9KYW8dGP8f+xZsfDr1rj8a6zsIOBB8O9R8pxKhdanrdG94OgLAxYZDUa9bmJGELpD\n7KdFiNchn4BnS6LqPcABWxvj/TKi4Iu2xhkEQKLOiKitITkM1k+CZQ+KXIYv2oropB3zRZtWY7hh\naTQWqqTLxFzfa9g/Y20JU/8yjuwB1FbgajLrqYjOM4zbv4yGY1/D+95iNqDHwgYOfFj5e9YQRcVF\n7Ivah5e9Fy3dWjKy4UiCk4MrvvAeRDEECvcExdpiVoesxtXGlZauLQEISw+r4V6ZUJQHX3WEz1pB\n2B64/CfUaQnqSsRbTN4MU/8s9dTG0I1M/GsiR2KOlDzpUEesI0T+I/ajTxJlYcHw4KXsjtzN4D9H\nM8vTQ7hsHnhG188cuHFUbMuycBv594AO08TDNuQPiD0NPzxofJ/0GwBk9Xmd6V51AGhZUEColSX7\natXCQuem8fZqD/7dxMj+2RPwaoz4Z1Wr4u9Aj2sDaDup/DaafPEZQrdX/r41wBv/vEFOUQ4Fuoxp\nv9p+pOSnsCtiVw337NZRDIFClZBlmZUXVnIy/mS13G996HoyCjLwqOXBrw//ikctDy6n3kMx5/HB\nkJMIBRmwZjSkR0LDh8yayCZ+7X9i/mFb+DaxI0ll3jYiMwKg7JGkd1tIuACJl+HQpwyu60141g1e\n2P+CoUnqmJ/EusKAxeLA6Z+F3/8dJ0i8BI36Q/Nh5X++XvOJ1hpnEk8V2ZKnUnGwli39fXrhZu1M\nZmGmsb17E7C2Bwur8u9bGg8vhVE/im1LO5DUxnOOfsbtX8eXv1aQnSQMdA1xJFYY7+mB0wHo7dsb\ngBcPvMgXp7+g6D6qT6EYAgVAjMjT8tMq3f5G1g0+CfqE6bumV8v7H40Vo9jXHxA+6WYuzfgz/E/O\nJNaQVk/sWREH/88X4oETpfO112lpbNNI+MwPRh+k1apWDN402HBq5p6ZzD80n4yC8qUktlzdAkB4\nRnjpDRx9RCLWD32QLW1KbRLn0UjMTLo8I3zwFzcJl4uezjNFxJJvR7H/ynUR7QQw6XcR5fPgq2QX\nCQmIcU3G0d0hgM55wjB0qd+P3OICfg/7nS9Oi7yGsLQwWq1qxXN/P3frazlqSwgcA2+miPd28BLH\n3ZuJ2dMTe4xt33GC499DdJAwcDnJwiiDSMhb5Fm6xtEdJqswi/SCdGa3m81DfmJA0NC5IeOajAPg\nh+AfWHVp1V3vV1VRDIECAI/teIye63syfdd0EnMTKSouYvv17eRr8ktt/9zfzwEi3LOwuPC23z8i\nM4K+fn1p7d4agBmBM6hlUYuVF1aW2v7do++y4/qO237fMvlpsFh83f2mCJfc9bqI7GkyyNjGpx0A\nn58W0TjR2dGk5KVQpDWOBKOzyg7ZzCnKMTx8L6UYw0+LtEXG793GSXcwh9wxKwB4vOXjZvcxMyId\nponXw5+J117zxahdkmDaLtLnXuBiXhwM/ACe2g8N+4ooHyCzQIz4H2n8CJZDl/JjfCK7/CcyvMFw\nZMTI/IfgHygoLuD1w8Jg74/az5v/VDGPQW0h+tZUZ0BHfCOijep2hOEmhmz7K/BjH9j6HHzcUGRc\nmy6KH9cl6BVkizDYu0BsttBT8nPwMzs+tMFQw3Zps2VZlgnPCL/nAiEUQ6BAdmE255POA3A87jgT\ntk3g89Of88rBV9h+Xfhpg5OC+fLMlxRri5FlmesZxqIr6y6vq/A9NFoN3dd1Z3OYCKGMzIxk7r65\n5BblkpyXTFRWFAFOAYb2rdxbMbD+QE4lnDJzuQB8ffZrNl7ZyMsH71CYaXaSeZLYRV3Y56APjBmy\nDfsaXD6mhnBD6AbarW5n2E/JTzFsZxRkkJibiCzLxGTHkJArHmauNq7E58QbPucze56h4xrd6F2f\niNVvIemu9QGoX7s+T7c2ahetCVlj/I5cb0rUMk1GU6kYvmMS4/8cz9gdUzhQnGnWdM5+IRNd26q2\nyAt46SpePecjSRLL+i1jeisx+zsed5w8jdEls/XaTaGgt8rAD2H2OYNhBaD1BBj7cyn5FLrPufst\n8WrjCJFHhNzHYh9Y0V8shKdXXxjnqour+O3Kb2bH9DM5b3tzWZHW7q058egJRjcaTXBSMFfTrpJb\nZCzKcyD6AMO3DOelAy9xL3FHDYEkSXUlSdonSdIlSZIuSpI0W3fcRZKk3ZIkhelene9kPxTKx9QX\nH+AYQGJuomFam5KfQnJeMhP/msiy88t45eArhlHuM22ewUplxYXkCxW+R1x2HBkFGbx15C1ismN4\nePPD7Lmxh1MJp/jm7DcUy8UMDRhqdk1Tl6ZkFmYSmyNGX6GpoWQUZPDdOaNEg+nou9rY+Zp4ffB1\n4zG3xkJITf+gNQkFNe3DX9f/MrtVSp7REDy8+WEe2vgQG69sZODvA1katBQQD4/84nwCfw6k1apW\nHIsT0VIarQYa9BFhpd2eJz5HhI86WjvyVOBTfNzrYwBCUkNYdHwRUZlRfHn+W1rV90O2rwMtRoqo\nJR0arYbU/FTDNa8eepWghKASH9/JWjcLsXc3GLs2Hm14pvUz2FvaszNiJ4m5iWbXJOcll/OFVoBK\nBc7+Nx1Ti0zroZ+Vfs35dSKbuftcEV67QhfaGntGLIQvbVktaqcpeSksObWEd46+Yzj2Z/if7IsS\nNSfqO9YvcY2thS1tPNqQVZTFyK0jDSGlsiwbZtK7I3eTU1ZGeg1wp2cEGuBFWZabAw8Az0qS1ByY\nD+yVZbkRsFe3r1BDXEy5CMDO0Tt5rfNrZudS81PNYqN3Re5i8GYxlW/q3JSevj25kCIMQVJuElO2\nT+F43PES73E++bxhe+DvAw3bz+59lo1XNtLdp3uJ9PyOdcSoeFPYJgAe+eMRuq8zF2JbEbzilj4r\nALmpRp//zRRrIFWnJtrhCRj3C9TvBVN1C7+egfDwUl7z8OC5v59jW/g2YrJjeKSxSA7TL/7q0T+8\ntbKW9AIhv6CfZekfJl28u1Aahoetoy8AeyKF7zzAMQALlQUD/QcyqtEoQCy2j9w6kmXnRcJZ1FN7\nYMxKs378dOEnANrXac/TrZ8mqyiLqTumEpoaaphRdPbqTC3L0qOALNWWDKw/kK3XtpKryWVR90Vs\nHbEVlaRixu4Z3Mi8Ufp3WgXyNHnCaHm3A8e6Imlt7iWRZ6Fn1A9CxgPM8yX07Lj9x0p8brxhu6C4\ngIiMCF499Cox2TGMbDgSO0u7Uq/TuzgBfg/7nV8v/0rgz+aZ5KP+N+q2+1dd3FFDIMtynCzLp3Xb\nWUAI4AMMB/QrKauAEXeyHwrl879r/8O/tj9edl7Uq13P7NzqS6vZfn17qSMfj1oetHBrQVRWFBkF\nGXxw4gNOJ542POhAjIJWXVzF/ENl/6ds59GONx8o6Wdu6NyQhk4NCU0NLTF6erLVk7RyM46eb4nf\npols24KskueOfyeyWx98A+xcxQNoylaw9xDnJQk6PM4fN3azP2q/4XP1qduHBo7CjdPctTk2arGw\nqw+BNR0xn0o4ZfaWg+oPwrEUSQn9ArqeyMxIGjk3MjOYC7osMGwXFBsLv+iNJ4hAgH6/9eOLM2Kh\n98X2LzKz9Uy+7CMS0oISgsgqEt9FD59S8h1MGNbAGH3U1KUp9R3rM6bxGK6kXWHI5iGlh8FWgRf2\nv0Cv9b0odvIT0hXjfhEL5wMWicXlTjOE28zOTax36LGwFYYbhAxGaX/jWyA51/h367GuB0O3GGet\nPvZlZJNDif9H7x9/37D9ZCuRMKif6d4L3LU1AkmS/IG2wHGgjizLcbpT8UCdUto/JUnSKUmSTiUl\nJd2tbv7nkGWZG5k36OnbE0mS8LTzNJzzsPUwbE9sOpGtI7bibmvUz3e1daWFawsAFh5byK5IET9t\n+tCLzo5myaklJd7X1caVbj7dcLFxYdWgVSV8rXoCHAO4mn7VzBXhZefFrLazCHQP5FTCKV7Y/wLF\n2uLKf+hE3cLsqVJmE1d2iIzenpX34Xbz6UZnr8483OBhALr7dOfEoyfoU7cP19LF7CImu/RSjisG\nrMDR2pHto7Zz/rHzBE8J5vSk07jZuplFTOVp8riSdqXEw0clqXi/+/tmx1xtXA2zDYDTiafNzgc4\nBaCSVPT07YmVyoq4nDhDOKqvvW+5n7WlW0tauLagnUc7GjoJN9n8TvMNv5UZe2aUWNOpCodjDgMQ\nmhZa8uSLl2GwSQZvs2Ei4ujJffBGvDDceiKPlry+HDRaDVFZxvUF09+y6brI1BZTGd5weJn3UUkq\nLFWWpZ57sO6DzG43u8Q9a5K7oj4qSZI98DswR5blTMkkrlqWZVmSpBK/HFmWlwHLADp06HB/CI/c\nh6Tkp1BQXGD2ID464ShqlZpibTGbwjYRmxPLqEajsFJb8WWfL/nyzJf09++Pp52nwY2wM8Koqa93\njyw4ssBsZPpWl7eQkAhKCGJS80k0dW6KtmwFGwDaerRlV+QuziaeNRxTSSpUkoqB/gNZE7KG3ZG7\neffYu7zT9Z1y7mSCgxdkJ4gFxyaDRfaujSNc2AQRh6DNo+XG/gOoJTXFcjELuy1kREMxoR3RcAS5\nRbk81vwxJEnC296bo3FHkWWZq+lCfrmhU0NS8lJ4pdMrJOUm0dZDiLk5WDkY7m2ptqSuQ11C00L5\n+eLPjGs6jpH/G0lCbgJ96/Ut0ZehDYbS2r01QzYPAWBKiyl8GvQpkZmRzDs4z+Ce6uHTg9GNRxvc\nGSpJhbe9NysvrjTcq7NX53I/t6XKkl+H/IpW1qKSxDjSQmVBR6+OhryJtqvb0sOnBx/3+pi9N/aS\nkJvAtJbTyr2vKasuGsMuY7JjaO7avPwLHH3g2ZtmhnMv6cpnXjYK31WCD098yLrQdRwcdxBnG2eS\n8swHodNaTuPJVk9ib2Vf4b12P7KbguIClp1fxu9hRvnuRs6NDP9HXjn4Ckt6LcFabV3pPt4J7rgh\nkCTJEmEE1siyrH8qJEiS5CXLcpwkSV5AYtl3ULiTxGWLiZm3ndEQmP7IH2thrhTZwq0F3/UzLtbW\ntqpt2A5wDMDV1pWT8Sf57tx3ZkYAxIPI087T4E8HUKOmPFq6ibj9t468ZTjW0VOsHbTxaMO+sftY\ncmoJW65u4YmWT+BX26/U+5hhWjfgqw7i1bWRsci6tUPJa0zQylq0spaZrWcajACAm60bz7czRul4\n2nmSp8kjNieW94+/T51addg0bBNSBUYGxKznr+t/cTn1Ml+c+cLg9pnYdGKp7f1q+zEkYAit3VsT\n6CZ80Q9vftiszae9P8XGwjwXYU77OczZJ6KFfhv6W6UecJIkoZbM/27zOs6jkVMjlp5eSrFczP7o\n/VxIvmBwnY1tPLZS9wZjRA5QYlG6suTYOhJuZUWr3W9ydf+72I9fi2eDig2C/jd7OfUyXby7lFgE\nn9h0YqU/h6utKwCz283G2cYZb3tv4rLjsLGwobGzkCbZH7Wfg9EH6Vev3618vGrnTkcNScByIESW\n5U9NTm0Fpui2pwD/u/lahbtDTI5wWZTlmqkMz7R+BgcrB34Z/IshxPDrs8Y48PFNxhM8JdjM7VRZ\nvOy8zPY3Dt3Ii+1fNOy72boxpcFItLKWK7FlLADfTE4prsYUEzmLWq7lXp5ZkImMbGYES0P/eaft\nmIZGqyHQPbBSRgBgSMAQw7beCCzvv7xcQ/dBjw+Y0HQCTV2aljg3r+O8EkYA4CG/h1jUfRGt3VvT\nwKlBpfpWGs42zjzR6gmzY3tuGBPDIjMjK3WfhJwErqZfpZdvLyxUFiTkJFR4TXh6ONN3TSc6K9rg\nlvrs9FIm+njSsZ4vI3296Hf4RR7a8JAhaseUmOwY1oYI6Wu1Shi40NRQbmTeYH3oerPZmnutMkqL\nloOzjTOz281mTOMxhoGC3hAAVc7DiciIoNWqVoYclGJtMWtD1lbJ3XSn1wi6AZOBPpIkndX9Gwx8\nAPSTJCkM6KvbV6gB9Ikxt2MInm7zNIfGHcLByoGu3l3NFhRf6vCSIVu4KrjZuhm2v+/7PU1dmuKk\nT7LS4RwlFl/Ttj0vMlDLI/aMEG974BnhEroZSQVdyygEo+NGloiOKW+xEIxGLDYnFgcrB17uUPm8\nh56+PTk8/rBhf3a72XTy6lSpa9UqNV8/ZDTEA/0HMql52fo+wxoM45fBv2BxszppFdg0bBNrBq8h\n0C2QNSFrDMdN8ynKY+lpEVLrX9ufFq4t2B6xne/OfcfxuONlrj3M3DOT43HHeXLXkwT+HMiKCys4\nFC0qvuWb1EdOzEtkf9R+LiZf5MMTHxqSuoZvGc7iE4uZf2i+4SF6Iv6EwdXmbG2MbleV9pupApIk\n8feYv4Gqhd7G58QbFq63X9/OheQLTN4+mcUnFpuFV1eWO+oakmX5MFDWEOihMo4r3EWisqJwsnYy\nG/VUBf1ICsyLy3T3ub26u2qVmjGNx3Aj8wZdfbqW2sbZRozg01VqkYH6dhmyDhGHYaVupC2phFxE\n/HnzNs+ehDKkHPToF4ADHAPKbWc6A1rUbRFe9l7ltC6Jo7UjzVyaEZIawtQWU2/p2p6+PflpwE+4\n2rqWGvF1p2jkLJRIRzUaZRYyrH/YBScFU8+xHtZqazO/+LX0a4z4n3CzOVg58GTgk5xNPMusv2cZ\nZpdf9vmS3nV7G645GH0QgLgc4d6Mzhb5LZ8FidyDfvX6sTvSRNVUx/ht4wEY4D8AFxsXw4zLoA0F\nHIo5ZNj+tPenvHr4VSyk6n1cutm64WDlwJW0W5fI+P7894ZtC5UFz+x5hrQCIRFzMeUimYWZFc5Y\nTVFKVd6HxGTH4GztXGa8961wI/NG5fzqt8Dc9nPxqOVBZ6/Ot+Vu0PNWl7fKPpmVgPXmGdSq50ua\nupzRmiwbjQAI/Z5HN0L0SVGL98QyeD2+ZM2AUriecR1LlSW+DuVH2LjZutHGvQ0hqSG08aigbkEZ\nrBiwgqzCrCqN1jt4dqjSe1YHIxuNpG2dttSyqEW/3/qRnJfM56c/58dgITZnobJgcffFDKw/kPic\neIMRABFe6WjtSK+6vczumVUoQkHzNfm8fPBl9kftL7cPH/b4kEXdF7Fw97P8kVhS7uFY3DFaubUq\ncXxSs0mGamP96/WniUsTfhv6G1KZY9qqIUkSff36sjNiJ552niw7v4w+dfvweR/zAkJaWYuEZOZW\nNNUFOxp71GAEQGR+T985nQ1DSylUVAaKxMR9hizLDPx9YLWIvWm0GkJSQ2jkdAt68pXAo5YHc9vP\npat36SP4auUvsV7gVlxMgrvuc+x7v2S75JskrbvNEZXFmg0Vqp0vX6uUEQCh7VOvdr0KH84qScXq\nwas5NekUzjZVS563t7K/5ZnEvYBKUhHgGICnnSdqSc13574zGAEQv71XD7/K2cSzhkVtH3sfgiYF\nmWkp/TrkVwb5C32n1w6/RkRGBG8deauEEdBHFrnYuNCvXj/+GvUXlmpLbC1sWTjgB5Y6dmBuqvFh\n6WXnRXBysCGWXx++e2rSKTMD+l739wyfp7LrO7fC6MajydXkGhIB/47626BaKssy8w/Np/XPrZl3\naB7ZhcZM6djsWLr7dKdDnQ6GhNDNw4wV8EJSQ0oEa5SHYgjuM/TT3+DkYL4/930Frcvmx+Afabu6\nLVmFWXfngX2nSBOLkHWLNBwnj0yVJFQqb2bvO6JC1/NnhevI3aSgjNpCJCZVkvCM8ArdQgpGiuXi\nElIgfg5+WKosmX9oPgXFBTwc8DB/jPwDK7W5rHVLt5aGhzHA0C1D2X59O5YqS7556BtGNxrNwm4L\nDTUBFnRZwKe9P6Wug7Fqmlql5qEmo5iWkcUfXT9kw8MbaOPRhjOJZ/jpwk9YSBZ42XkhSRLWamua\nuwijMqHpBGwtKjc4qCqmGcg9fXsCMHf/XC6nXmbW37MM7qrt17fT5dcu/Bku6lrE5cThZeeFvaUx\ngqmhs7nO1IIjC6gsiiG4h9kZsZMvz3xp2C8oLuCRrcbQy6/OflWl8DqtrDUoZgI84P3A7XW0JijI\nFoVLEi6Ad1vq1e1GRmEm3erVhaw42PSUuUG4cRSajwCX2/OX74ncQ1RWlNmDRqHyPN7ycVYMWMHq\nwavJ0+QZEu0WdFlQZgLWzcYBxOyhh28P3u76NiMajuCZNs/Q3ad72ZnRTsL96V9URDPXZjRwbEBW\nYRZRWVFoZA1qWYb9H0BmLF72XmwatolXOr5SPR+6kjzb5llACNON+WOMYQ3EVIPr1UOvklGQQXpB\nOt723mWum7nalB/5djOKIbiHeenASyw7v8wwJfz89OfkanLN2pjKOVQW01C+Nu5tbmlR6Z5h+yu6\nwiVaGPA+fiYx4jEWaq6GbII/RPYmeWmQm1JSmbMK7L0hSjea5g8olI9pFFkrt1Z09OyIi42L4Vhf\nv76lhraa8npn88izm7Op+/v359u+32KpLt2Y6A0BGx4DWTZkRQO81+09CN4I+xfDp83gAz8aqe2q\nJYqqMrzX7T0mNJ1g1ic9/er14/0e75sl+un1tjztPJnQdAKAQd5EP6t4ocML3ArKYvE9immo3OnE\n07Rya8WakDUMazCM+Z3m892579gWvq1Syp83o89yXT1oNS3cWlRbn+8a0afgrC400cIGfDsySm7L\n5rDNhKb3/VZoAAAgAElEQVSFMrCuCOs8H5cplvd+1j20K4gGqgwXUy7Sy7dXCYE8hbJZ1H0Rc9rN\nYU3IGnr5GheA1w5eS2xOLAP8B1R4j/FNx3M1/SoNnBoYHn63hGnIcUEmjV2MrsHhDYbB5yaCcPkZ\nsGEKTC8ZcXQnGN5wuEGuYlH3RWwO22zQo+rvLwY4MwNn0sS5CT9fErNcH3sfOtQRaxl7HtljCBxZ\n0msJKXkphjoXlUUxBPcopuFrKy+uZGRDkTQ1vsl4EZPe8WXOJp1lR8QOXu74Mh61PMq5mzl6ddDG\nzo3LnI7fVXKS4dCn0O4x8CiZDGUgMUQYgEydTNXkzeBcH9SW2GLJN32/4aGNxqjkfaoCtGd/pG+c\nTp6idvlRPhURkRHB9YzrJeSyFSrGvZY7c9rPMTvWyr0VrdxLRu2UxRsPvFH1Dpgu9OalUdfZn9nt\nZlOnVh3xu0q/AS4BkKor8hN9AlKuGetB3CWGNRiGn4Mfk7dPprdvbwb6C6XeDp4d6ODZgXq167H1\n2laWD1huCL+tY2eUarO1sDVEs20buY16U+uVfJNSUFxD9yCn4k8x7+A8AKY0n8LJ+JMsDVqKrYUt\nzVybGdp18RLyxWUtGqflp5WYMVxMucj60PUA1RJ+Wi0c/VqUVjz2jdiP0v0nNEWW4ZsH4MiXcOE3\nUSayQR8zn79HLQ8eCzAKgc2u487cc58Tr1ZDt9mi6PptoHfDmbo6FO4jxug0jK4IXazpraaLimIx\nOjXYPjpDo3dThf5FTdDGow1bR2zlg54l82zHNhnLL4N/qZQ20a2EhSuG4B5k0fFFhqnd7HazsbWw\nJTEvkdburc38ljNaz6CpS1P+DP/TkCJvypQdU5iwbYJZuclT8adKtLtjFGuEG8eU2DNw7W/jflGe\ncVE35SoE/yYkor9sBztN/MI3y0K0Hl/qW77c4z3+N8Q8fvqgvQM8tKBCIbmKCEsPw8/Bz2wEpnAf\nYa/7u21/Rfzuzm8QQQcp10BlCc1HwrCvhLqpha34PVaDkmpVqO9Yv8xaB3cCxRDcJfbe2EuHXzpU\nmE4uy7JBLXLpg0uxVFuK6StCt98US5UlAY4B5GpyWXxiMcFJwYZz8TnxhnKSel37DaEbDJLQG4du\nrJ4PVh6734IfHxL6/mmRUJQPy3rD6pFQqKsvcHo15CYL0bfES3DWxKAd/QqSdDLEcbos1a7Piezf\nlmUX9Qhwa8Ybnd9gRXohHhoNv9tZUyBrSM5LZlPYpjLrMFdEWFqYIXNW4T7EwcSAn14Nm54U5S3j\ng6G2l6iU1m6yqOGsyYOglXDh9zJv92/iv2kICrLh4hYovgNlDstgycklFBQXcCS2/MIdmYWZZBdl\n81KHl3jIT/i79QqcpWWKmqbcm6b0mxZDf/PIm8iyzK+XfzUcK02YrNoo1sBPQ4S7B+CHPmIx7mMT\nf2vCRV2n14NXG+g4XUT3XNsr6tXqiTohRmVrRov9B541zwEog3FNx9Hx8X3M83yQS9bWbAnbwhen\nv2DBkQV0XNOR6bumG6QwZFlmQ+gG8yLwN5GvyedG1g3FENzPuARAT53e03YT3adre8HhJq2tpjrl\n1ohD/Bf47xmC+GD4sj1snAIhf9y1t9WHx71++HXS89PLbKfXTTEVgXu769v8NOAnQ5SAKYPqD2J5\n/+UABs0SWZb531Uh6Dq60WgyCjJIyksy+BXLlWy4VQqy4dJWWDPGWP4x/jxEHi7Z1iQzktRw+HuR\n8M82fdhYFB5EYfhXo8GyFsSdgwMfGs/VvoUs29re9Bv8NXUd6vL12a8NGkEgFsxDU8Vs40LyBRYe\nW8jcfXNL3OJ6xnVWXFjBvqh9aGVtqZIECvcRzUwW+m1MqsJZ3JSrMPZn8GptXDy+mbA9EPJn9fev\nhvjvGYKgVZCtq0OaVEr1ozvA2cSzhpBNwKzcHYgHt0arAYxqoKbyy9Zqazp4digzxb2TVyc6e3U2\nPNiCk4P5O0r44QfVF+n5y84v42r6VSY1m8SYxmOq6ZMBW2fBhskQtssYtx8fXLJdv4XQYpSoIgWw\neQYc1FWZ6vgEeJgUH2k2TNQE8G4HJ38Q8d0Ao5ffcvckSeLJVk+SVpBmNmMCY2RWSGoIIDScTOst\nx+fEM2zLMD4L+oxXDorkotKMscJ9RJ2Wxu2p24w1kLU3FUhSqUXVs+sHIbsU2fI1o2H9o5B8FXJS\n4PDSkve4j/jvGYKMaPFjcPYXo827wBM7zXXa0wvSDQ9+WZaZsG2CoY1+RnCzDn9FNHZuzNX0qxRr\niw3ZmisGrDBosKwPXU9BcYGhIla1EWUi5mWrSxLK0WU7+3WBabvEiL/jEzDmJ/AxX+egtg/UcgF7\nd2gzCR79zTg6Mw0l9esqDEQVaF+nvWHbx96HJ1s9SXPX5vxw/gfCM8INMdsFxQVM3zXdsI5jWrJQ\nzz0TaaVQNVRqo9vHJQB6zQPPVtDv3ZJtvXVCgUErIf6CcYBzzVgGlO+6w7qJsGeBWAu7T7mv8wj0\nSVeVFoPKS4cr26HxIFGM/PQqIU3sf3tSyWWh0Wo4GX+SQq0oPLGk1xJePfQqRdoirqZfxUplRWha\nqEE0avrO6STkJmCttjbLvKwMTZybUFBcwNz9czmXJAxcE5cmOFg5MKzBMLZe20qfun140O/B6v2Q\nRSaZzjrjRk4KWNnDtB1i32+N+TXjfxVx256twL+b8fiIr83bOehknAd9BJ1nVLmLpkZ1x+gdhu1L\nKZcYvqVk3dkTcScYHDDYMDvT08ylWYm2Cvcho38Uvz8rXVTOzFLcmACdnoId82Hfe+IfwMQNsHas\n2LZ1gbxUiNKVycyuuIjOvcp9bQguN2uO0/hxeL39dsWNEy7Cr7pFSK/WInnp3K9wcnm1G4LC4kIu\npVziSOwRvj33LQDvdn2XAf4DaO7SnMGbB/NZ0GclFo6Pxwu3RAvXFresdKiveGRatNzBUtQYWNR9\nEYu6L6ry5ykTWQad2Bd+XURo6OnVcPxbcConkaXp4Mrd/4FnRRhfh8rXuy2N0mQHytPon3doHh+f\n+pjkvGTsLO1YN2Qdakl9X6qAKpSCpS24N6m4nUoNlnZQlGM8pjcCANP3wOoRwqiAcBUN+0pEHt1n\n3LeuoYR4sYiTvm49ckW+OVmGb7tCeiRYO4oQREcfaNRfLGwe/75aF44/C/qMydsnGxK3AEMava+D\nLw2dGpYwAo82e9SwvaTXklt+zwAnczXMd7u+e0dkcw1oCoS4W1EODF4CDzwNmnyxZgBGbZfbwaoW\ndJ1lXmO4imwcupGdo3ca9m/WdZnVZhZqSW2QQNC7hwbXH4y/oz91a9e9a9ozCvcQ9XuWPGbnAbOC\nRNbxiG/Nz+27AwOuu8B99csu1hZzKOYQvXx7MWvlKPReveyVi7DsPg7rhg2RVKXYNr3FBnjmKFjr\npFt92sHlP0WCCcCbKUKS+DYJTROLtqn5qYDIB9D7liVJYlSjUXx08iM6enYkuzCbR5s9yvCGw3m6\n9dPkafKqVNvXWm3NEy2fICkviQVdFpSq2FhtrHtUfG9NdIVe3JuIhTVJJUTgAB756c69fxW4OVy2\nmWsz/hjxB2eTztLXry/2VvY8FfgUMjLZRdk8sfMJLqdert6FdYX7j1Hfi6i4PQuEcCGAoy+46QYS\n/t1hwjqRHR9xyDwS6T7ivjIEv4T8wpJTS3iu7XP0O2Es+Bz90Vr4aC2uM2bgMXdOyQv10SyDl4iZ\ngJ42k2CvySJRTBD4deZ2sbMwZgSObTzWkA+g55HGj1DbqjY9fXuaFSxxtHbE0dqRs1Hp/BUchyTB\n6qOR+DrbsmpaJ7wcy9dGv1nL5Y5xWRc2F7pNaPx7tAA7VzHDurJD1Py1v/Ui33cbf0d/M/E4SZKQ\nkKhtVZv3u7/P1mtbaeJSCReCwr8XG0fh6nHwgvWToPEAePCmGtxNBgmDsNhXRLtptSI57T7ivjIE\n+jjwjXu/4ItLMvFOcLyJxPDjYtE45fvv2Vw/maeGLzS6RQqyIVznN2/3mPkNHeqASwNI1cWXx56p\nFkNgOhpvW6dklI6tha1BbfBmZFlmxNf/mB27kpDN1rOxaLQyofFZfDGhmiN/boWcm4qQNxsqjAAY\nF99q35Sccx/SyLkRL3Z4saa7oXCv0KgvvBFf9nlrB+FGun4Q/lkKPW5NBrqmuT/MVmEO8uW/GP3s\nZkYc0fLF98UAbOihorClcKNYO4ks4Z7zfzdoxgNw/Dvx+tACsChFqGnmIZj5j5CpTQqplu6aykjc\nLAtREVkFmlKPh8Rl8vHOULaeizWTqL7rZNww3/cyqcWrr+bkqSRdKfwH6aEbOJxcDklXhKLuzQOn\ne5QaMwSSJA2UJClUkqSrkiTNL7dx8hWKVz6KVb6GiQeMC8OWTZ251MyDxmPTcG5gXNk/vXUJhO6A\n/Ew48gU0GVy2hbayA8+WYuHn/EbQFlfuAySGwLaXSm0fkRnBqEajODLhiFmGcGVIyyk02/9jVnc8\na9uw5awxlDEzv3RjcVfIEDkKuOjkIuqZhH/2XwgPf2Z+TEHhv0JAb2EMsuLg646iPOqKimst3AvU\niCGQJEkNfA0MApoDEyRJal7mBbVcmW9prrfv1TUVB3c/IjMjSX5mB7Ub5BLqK9xBzmfC4ddxwiWU\nnwFdnq24UxnRIgLm8GdiX1MotIg0hYa6uABEHoW3HYUk8skfIPW62W2S85JJzU8lwDEAByuHit/3\nJlJ1huDrie04+mofWvk6Ep9pLpIWnnRrRSeqlQxdktW4X2Do5+Brkmlby0WEet7JaCUFhXuZFqNA\nNhkcpoSJ2cE9Tk3NCDoBV2VZDpdluRBYB5TuNAe0dp7YJpovZ9g6aejm1prsomz67pxMbP3OvDlZ\nTawzOCbrPtaZNUJe1qcSsgD6kX30KZ32fWf4rgfsfE0IpuWKCCBDhJGeQ58IY/HrROToIF4/LBaS\nTItS3wrJ2cIQ+DjbGhaHf5ra0azN1nOxJa67ayRdFok0Hs2g/VTloa+gYIpnS6FeCkaBu2TFEJSF\nD2Cavx+tO2ZAkqSnJEk6JUnSqcLQMDOXkLVjEda1NQxoOgZna/GlL7YSo+YENxWOqRKt/etyPGo/\nL/nWI64greIeTdApc17ZDn/OFWJTSSFi1A8i+UxTIBaFdIRbWlB8bi183ZHEqzsI+/NZQ35AVUtA\nBsdkoJKgoYe94diDTT346fGOHJ73IK19HbmSkFWle1cLMUFQp4ViABQUymLkMrByMKroplwtv/09\nwD27WCzL8jJZljvIstwh31J0M8cbJAstTgG54N0WtUsAB8YdwFJlySGN7mFvV4RHBmglieleddip\nLmT+ofKXIABk34584VWP91yd0QaVEgO/8zV4zwMi/4Hmw4mfsoXhvt60qe9HL4ciBtb1ZrStWKdY\nmpCE5ZZZlZK5vhibwfCv/yE9V8wELsZk0MjDAXtr8xnQg0088HWuRQN3e8KTckq71Z0n6YrQW2lS\nycxgBYX/Io37w2vRYt3RtRGE76/pHlVITRmCGKCuyb6v7lipxLpqmTdVzXudx3J1hB8ho+bBIysA\nEfs9qfkkAB5Pz8TLogibIrDUmBd/D0kpOyKoqLiIc0nn+MFGZn1tB/6xvanIuZW9+X4tN65aGbNd\nU9VqikxGyC7FxXB+ncharoD5vwdzLiqdw1dFpFFESg4B7mVXJvJ0tCEpqwCt9i5EDhVki2Iyeq6I\nUo3lFYVRUFAwoelgoWeWn1HTPSmXmjIEJ4FGkiTVlyTJChgPbC2rsSzBdS+Js3IHZmnm8GhQQxYf\nK+CV385RrJWZ3XY2QZOCeKHRWAp0z3D7PPN7jP1zLHsj95ZaqnH6rulM3m7UB7lspcsDmLhBxAY/\nsRsWpBtDJVVqQ/UvPYOL1IZt52KdG0unVqgp1vL4Tyc4Fi5Cya4lZVOgKWbzmWiCY8QPZNbaMzz3\n6xkiU3Kp71qLiPETSF1bsvykh4M1Gq1MWm5hiXPVSk6KqN70m4nOT3ywKADvcOuZzwoK/0maDAFt\nEYTtrumelEuNGAJZljXALGAnEAJskGX5Ylnt3W3dmdZyGtcXP0z/5qLc3PcHw9lwKprj11NQq9Qi\niWvQR7R4WGjXL2mzAEdrR5b2Xmq4z5z9c3h85+NkFWbp+0FISginE08DolC8h40bX7g48Xi7AeQH\n9IIpf0Cd5sInritufaUgmY9OCi39Oe3m0MmzE+9O2s9sS18Ci2R8Bn0GaitIvU56biEzVgexLzSJ\nuevPkluo4aFPDtBqwS7mrhcqoQHudnjlJHN5/3E0WpnRflbknT1LwrsLKU5Pp/CGMXbf3UFYusSs\ngtv/Q5TH6ZXiNXSbeI0JEnpMdTvd2fdVUPg3oY+q+/0J+OvlGquBXBFSjSYnVZIOHTrIp06JkXxU\nai49Ptpndt7GUsXOOT2p52pHzvET3JgyBb+fVmDXpQsAGQUZdF9nVBht5NyIHj49KNIWsfrSagCe\nb/s8TwY+yZqQNXx55ktydIqDZyafMYqNabVw7Buez77AvjiR/Rv06Dl2XYqnRyN3HG1NxNE+b0O6\ncyvaXxrDHquXyMWGjQ5TGDXhCYZ9Zcwcfn94czq98wxFEREADBm5hGMeYaR8/73ZZ2x2Wbi2LsZm\nMOSLwwS42/H3i71v41tF/ChNF30jj8DuBaIOgL6gPMCkTWJEc/xbeCHkX5E5rKBw13jbRH9o5uG7\nmnApSVKQLMsVhk3es4vFZVHXpRbrn3rA7Fh+kZbj10V4p6W3kArO3LGT6OeeJ6RZc6S/jzDOdxjz\ngnxoEiUTlhbGigsrDEYAwM3WDRAqoMcmHjMc12cJy7JMbnE+cpdnOZdmXG9o/MZ2Zq09Q+t3djH6\nWxExlJpTSAReqK7t4Wn1VuqrEmihiuTtnHc5E3zBcO2kB/wYYZFsMAIAp2d3IufY0RKfO+rZWeRf\nuUJTz9oAhCflkFdYyeS30vi0OawdZ9yPOwc/DYLoE+ZGAGDXm8II+HZSjICCwq1iKsCYe29mGt93\nhgCgc4ArV94bxMePBNKrsRA3e+U3sTBr6Sn81+nr15O1ezfIMjFzX+CRl7bTflckC38pxjHHOAuq\nV7se9pb29PDtYfYeXz8kiqTE58SzKWwTgT8H0nltZ3ZG7CQ1P5UpzacwzOUbs2uCItPIzC+i3cLd\nzI0fQG0pl5csN5q1mXJ8CBE2E7n0Rnfmu2USOdlc/yhp7CMUhF3FaYy56mX23r2kr1uPWiXx0SOB\nAFyKy6zS94csQ2YMhBllmc0UWvW0GitK+SXqvHbNhpZso6CgUD4tR8HTusGdPh/pHuO+NAQAVhYq\nxnSoy6ppRp/1+pM3kCwtKbQyRv24TJkCbdoh5xlXj78/1oKhAeKhtnn4Zo5OPGqYEejRS0HH58az\n4MgCw/Elp0StgDFNxhAeZ0nruk5M6GTU3o9LF1E2Z+RGhGhNA6PMqZV6mcy//gLAfc5s6ukWhjWJ\nici5uVg3agRqtdk1mlTxI2rhLWYFSVVdJ8gzyav4bRrsfksoK+p5KxXmRcLI7821hB54xrCZuWMn\nmTuM1b4UFBTKoZau4mBeJXKaaoD71hCY8uFo4XOb93swU386wfBBC/mw/UScxo3laI+RfK/xNWuv\nOnGeedIg9o/dj6Wq9KInVrL4w606KaqGWWpkPNJkcpPjqWvvi5OFN0fDU/B1sqWui1EeOjrNWLrx\nUNdVaKZsgw7mNYsBtHGhZGzaBIDrU09Rq11bLOrUMZy38KxDnfnm+Q9FukVjVzshnpeSY24IYsIv\nCn9k2B4hfBVhrmLKpa3ivF5GGuDC7/DP5+btVGqwdQKVivw0SZQYcGlgVqshZs4cYubMRS6qOFdC\nQeE/jz7b2HRGkBUPm2dCQQ0miOr4VxgCPxdj3P3+0CSQJPbXbceJkU/xzt+RhDmLkbn9K8YHa+ba\ndbjauprdJy/4ArJGQ1Z+Eb0/OoZcbMW5tANIssyXqxz56rtiln9ezKOXXBnz/RHePL6SSV/O5dHa\n2UzsLGYFOy4Iqdq10zvz1MD2WNTvXkoMsURhmHGtQMpPB1mm/pbNhmNWvr64TJ5E0wvBhmP5ly5R\nEB6Os50wXinZxhDSUxGpfLlc5FawZjRsewFWDoaES+KYthg26EJkD35c9pc5y1iAO/fkSa7PeJOk\n2NYwZqXhuGmAQf6Vez99XkGhxrGwBmd/iDxsjBz6fbpQLNDrm9Ug/wpD0Lm+C/MGGitQdQlwxdvR\nhtnrzpKWW0T7h3szrd98fvHqRPb7YvRbFBdH7unThmvSt2whYswY0jdv5tJPv2KjKcQ92Z4nDsbT\n96wal0SjJW8VquZKfBZd4y7glJ5I7MQJPN9HVCzaGBRNU08HujQwMTIPvSXE2GYchOl/Q20fCi+d\nBUBtI8FH9WHf+1g4O9PwwAH8VizHupkolC5ZWND0QjAuU6cCUHj9OtYWahxtLYnLyEeWZWRZ5vDV\nZOwwF6cD4NsuQin10KfGY6WtB4Ao1q2rvFSUmGhYv8iMsCY7LB1trpjtFISGGi7J2r69zL+LgoKC\nCW0eFVnGUScgKVRUNAOhV3ZtX7mX3mn+FYZApZJ4uncDnu4tpJHfHtaC2X0bIUkwqKUnbwxpjq1/\nPb4/EM6YE0VkdetDQUgIkRMf5eMtZzky/Xni5r8KQPybb1H788VMubSdEWEaBp+SeXKHefLWP3GF\neOSa+/pc0hNxsxeJaK19nczrBTvXE/LMXq3Jz7EnK96e/MuXQJJpOFSXUH3wI8hLx7KOB3Yu6Uj7\n3odiITctWVjg8pgYzWtSRNRBoK8jZ26kMf/3YNou3M2piDTa2KWSiw27HMcij/rR6JJa1lvUUvXr\nKhLC9DQeBA8vFYqJ/d8z5EkA5J0+A4Da2Zmi6GiinppB5KTJaPPyyN6/HwDb9u1J+XG5WZ6DgoJC\nGXSeKSr6XdkO/3xhfi7hQunX3CXuqwplFTGnbyOe6hGAs50VTTwdGN7GBxtLseAa4GZn0OjZliRS\nmQEu/PYnD58qmfVXtzAD0s3Tk1/tNoO3jv1E75izNNDp8ls3a0pByGXyzp6lTV0f9oQk4Odaq9T+\nycXFRE5+DG1mJipLO6wcNKhM14M/9IfX42CdTqwqLw3s60CDB1G7i3WQYp0haOHtyI+HwrkcL/yL\nh68m8ZVDENft2/FUwghYC/teWohnQhi2UQcBWOr2Jk/0c8Jhxyzo/ZqougTQ4fESfc2/EIxkaUnd\n774lYpz4tvIvXeJK5weQC4Vh9HpvIeGDBpP511+4zZxZ6mdWUFDQYVMbnOuX7gra9Qa4NoTGA2tE\n0PFfMSPQY22hxtnOWCZSbwQA6rsZ1xH+8Q40bL94ep1hWyMZv4720cG0D84jQlcG4aKLP50fGcDL\nPURtg7rZSag9PPD/5Res6tcnYfEHfPtIc354rAOPdalXav+KYmLQZoqQT22RCmvHmwvMyOaFLE7+\nAPveg01PorK2xqJOHXJOnACgnmstNCZ6Q4FSOE5FCST7DTQce3DJfj5kClpZYqWmP0uPpNHq6+tc\nG7HVaARuInXNGsKHjyDlx+VYN2mCTWAg3p8sQe0qXF16I2ATGIh1/frYtm1L5s5dpd5LQUHhJtwa\nlX3u1/Fwfv3d64sJ/ypDUB7jTUI8rzr5MmrIe3zUfiKWujoES9uMYX73p9lerzNHvFoa2rqNGgOr\nN9Lmh68Y1tqba05GtWzvhe+isrPDffZsitPT0URcp1/zOjjYlIxEkrVaop+fDYBdV5HxbKMrr4mN\nI7waDZJKJHYB1DZR5U4Nh5PLcRw2jNyjx9AkJ+PvajRs7aQrvGKxDlllQas+4zFlZZgtgQU/8LZm\niuHY48uOmLXRamVyCjTIWi0JC98zrAHUHjIESZJwHDKExv8cBkvxuXw+/QS/FctF15s1pSAkxBDa\nqqCgUA62ujBSKwcRjj1hPbQ16pwZ/v/fZf4zhqCBuz1hiwbx8oAmAORZ2nDN0Zgl++nzA/Hs1pkv\n2o7h68CR5LuKqUDbybNp1rElDVs0oIG7Pd0aunLxlQ+p1bkztXQSFlb16wNQeD2ixPvKhYVcDmxN\n8tffUHD5MgDeH36I59sLcHlXl3Fo4yjqHMw4ZLxw2g54fAc8L3z1HP4M23ai/nH087Np6+cEgAot\nm6zfpkNWKMUOzXBxq8PVRYNoX8/ZcKtvpvVmwVBRH2F86B6+Xz2b5GU/GM6/88dFRj/3PZebizYq\nOztsWrbE5dGJZp/FaeRIAGp16YLaXiiyWriLhL6oGYprSEGhQrrOAs9AeO4UDFwMTQaKSn96kkLL\nvvYOct9pDVUHk5cfJy23EFc7a+Z/JEbKjQ4fIkaypdfH+wFYNaUd3dwtsXBzK+dOAm1BAVc6dMT5\nscnUeflls3OFERFcGzjIsO/71Zc49DVxy5z8EQIeFNrlWq1YHwgcZy71vPlpOLcWeeBHRC0PIufQ\nIRqOzefKoG9I1tamx47BhG70Ru1gR+OTxu+p76cH6OjvzOJRwhXWf8a3fH7AuEjlOHIkGZuNIat6\nGh87itrJqcRxuaiIwuhorHWGD6A4PZ3wUaPQxCfQ+OgR1I6OJa67HeTiYiLGjacgLAzbwEDqrf65\n4osUFO43bhyHP54X9Y5fDAVL24qvqQT/Wq2h6mD1E53587kerJrWiXq/rsXliWlYuLlRz9WO7ye3\np5lXbbo0qlMpIwCgsrbGplUrcg4dNouxl4uLyT5wwKythYd57WU6ThdGAEClgonrS+r9938P3Jsi\nHfsa90dFUZjMKwW02DmeVj9OI3SjmNkUZ+WQttEoabHnhV68P9IocPVBgHn0081GINXagWvfrkft\n5ERWfhEnI8zdPZKlpZkRAFA7OeHzySeg1ZLzz00JbJVAlmWiZswktFNnsvbuJX7he2hNssBTVqwg\n/8IF5IICck+epCg+/pbf404jFxcT9847ZO5S1kruNKmrVnFjxoya7kb149cZ2kwUOUeL7r7M+3/S\nEIHUGVYAACAASURBVJhSq21bs1H8gBaebJ/dAyuLW/tqHEeOoODKFXJPnjQcS/zkUxIWf2DWzsrf\n/9Y7aecq/IjpkVjtmirufdaRjAhbEo6ZRxikfPud2b5pGKtnVhJqNzfGjl9KgY158ZsIhzq81WU6\nCZaiFOcLG84x5rujpOZUXPfANjAQtbMzWbqwUhBrIkVxcWVeIxcVcWPaEyR9tpTsAwfQZmYS/ews\n0tas4UrXbkTNmEnG1q0kfSLyHyRdjYj8kLILDN0p8s6fLzeDOu/sWdJ/XUfM82KtSKH6Sf5+GddH\nP0LC4g/IOXCQotjbr9udGxREzIsvIWu1FTe+G7g0MG7/veiuvvV/3hBUF46DxUg9V+fC0qSlkf77\n74bztTp2pNHRI6hr167aG/iI9QG1lXHGEXvMGWSJgNntqLd2LVYBARTFxpKvW+zV5uaiSUoi9/Rp\ntIWF5AWdxtLLi2aetXmnyzTCuw5gp18njs5ZzEfj3uaakw/7LicCcDZKPNA2nIqiIiS1mlodOpC5\n9Q/CR4ykODOTrF27ufpgH2JefKnUaxI+/picI0dIWbasxDk5L4/sAweIfWUeAN6fLKHhgf2AUWbj\nblEUG0vE2HHEvfGG2fGsPXu4/sgY4he+R+SjRp2mwqiKvy+FWyfps8/Iv2gsWZK6Zk2V7iPLsuHB\nHzVjJpnbtqG5V2aZ9Xsat3V5RbdCUXw8Yb0fJPGTT8wGpJVBMQTVhMpOjLCTv/iSnOMnCOvSFW2G\nUVqi3uqfsXB2LuvyivFqbdx84wWzU9ZPr6FWu7aGHIOo6U+SF3yB8OEjCOvRk8iJjxIa2JrC69ex\n9PSkuXdtzjjW41mPfixtN5bAgT3Z91JvAA5fTSY6LdcgaPfB9stk5FWsJ6RfMC+4fJmsPXvJ19VP\nyNy2jYLwcLO22vx80n42SoBb1vOjzk0PWrseQg3WJjCQ2gMHonZyQmVvT+GN6n/QpixfTkjTZobQ\nWFMKo6MByPjfVsPsTpOSQvSs58i/cIE03QPJrmtXAKJmPk1xdna191HBnIKrVSsIn7Hlf1xu3oKC\nsDDDsat9HjJzR9YYNrVh/g3ooRs8RR4pv/1NZG77C018PCk//FhC1bgiFENwB4iZPdts333u3Nu/\nqZXRleM0Yaph26F/f8O2PtZfk5RExJgxFN08OrW0xO3pmTzZM4B2fsbF4Bbe5gu83T80T3ePSM4p\ntUuZ+UWGNRHbdm0Nx7P3/W02cg8fPISQps1IXbuWwugYimKFy8j+oYdwHDkS78Uf4DLpUTzffQfH\nkSNx6N8fvx+W0WDPbvzXr0NSq5EkCW12Nmlr1pB/6VK1it0lfiwUZQuuXTM7Lmu1FJi4olJXrSLn\n2HHSN2wAxJqJHrenRdRUcUoKqStXVVvfFCD+vZJuEk1s2W7H8sjasweAhA8/QmtisLP27DVrp83L\nozizijLvt4ONI3R9Tmwnm+h45WfC9vllzhJkrdZsxnSrKIagGnF7bhaAmZ/Yfe5c3GY8VT1v4K17\n2KotkWqJ7GWfz4waQn4/LMN5ojHk07at8eFs0zqQZsHnsWneHB8nW1ZO60TPxu6smNoBWyuRePfq\nIKNeU+f6LuyYI0blESklDUFiZj6Bb+9i+WFRu9mhd2/qb96E4yOjyT50mJxjx0tEECW8u5BrffsS\nMV7kOrg+PhXvxe9TS2dEnMeOxXvx+/h+IcLprHx9zaU6dFwfNZrLga1LHK8yKvHfID/ksuGQJi2N\nqCefMswC9DOeG1OnkvS5iLxq+PdefL/5BvcXXsC2gzEwI+/s2err238cbW4uab/8YnbMumlTCqOj\nkYtvvTBTUZxYW8g5fBgQs1GAwhuRhvfT5ucTM2cuVzp1rvLM47awdRJSMDFGAUiOfi2KQ33V0XhM\na/z88QveJvOvv1DZ2xs+kzan9AFcaSiGoBpxf/ZZmpwzfwg4jR5VRusq8Ph2eEU8eBts347/xg1I\nJjULLH18cJ87B4BaHTpQb80veL3/Po2OHqHe6tVmt6ptY8nP0zrRp6lR+npGrwb0b14HK7WKVdM6\n4e0kQtjiM0qK2Z2LFm4vvdoqgM3/2zvvsKiOtYH/Zpel9w6CFMGOGltMLLHFqCnG5DMxTVNN7+Wq\nKTeml5vc3BSTmGqaxjSNNSbRWBIbNmyIiAUUBURAepvvj7Pssi4IAstS5vc8+3h2zpw5c3bkvDPv\nvKVbN/ymTkUYDFRkZ+MxbixuQ4YQ9tGHFtdWeVc7de12fs9fbQaOlKTecy+5i5fUXr+e6D20DfKT\nL5tnnql33mWygvK943aifrRMMOTUrRsOAQF4jByB/7S7EEIQvWwZTrExKvZSE5H10Ufs79vP9N2p\nqzZR8b35JmRRkYV6pz6UHDhAyV7zCk/n4UGnZcsQTk5kvfc+x2c+zf6+/UgeOcpk7Xf6u3lW+33N\nQvRwOFwtUukJLfEWBRlQkk/Rl49RNt0f/nmfivwCcozWgj43XE/g448DUFKDX1NtKEHQxOicnEzH\nnTduqLcJar0wuJgSXBiCAnGJs859qvfwIHr5Mjq89y5Cp8P7mok4+Pigc3S0qlsTc6b0J+nlcTgb\n9Hg4OeBi0JNRQwKc5bu1pbm3q2W7TrGx+N+vJbBx6dWboI8+wv2SSwh67ln03t4mB7SwD2ejd7e0\nXKqL6EWLTLMdgPy//uL4k09SfrrhyT5kZSUVZ7R4TZUFBRQnJiLLy03LbJfevQl68kl0bm54XWMW\n6u6DL7Zqyyk6CrfBQyhLS2sZOudWjCwvJ/Mds6NV1KKFRM77jpg1f5kcK6tHwa0PxYla/bAPZ+PU\npQvhH3+E0Otx6qo5mVblB6mo5iV/+rvvODThatKffobSw4cp2rHDImqxzQjuCUXZcPqwFlngkBYv\nrLJMULr9Tw6/tpyU5YGU//osScbVqFd0Af4hu3CKjgag9FBKba1bYTNBIIR4UwiRKIRIEEL8IoTw\nrnZuhhAiWQixXwhx2bnaaY1E/bqIqJ9/qtEpqzlwiopq3Ma0ESEEPq4GPlt/iMpqcY1OF5SyJEET\nBAlpOZRVWJrf+d58M5Hfz+dI/+F0eWYF769KxvfGG7WVybzv8J70f7gZvbLPB6foKLyvvtqq/MBF\nF9e40QtQuH07KROv4dTnX9R4vuzoUaisxHWAtuQ+dPVEEntqAtZ14ECL1UzoKy/javyjc+nTx7ox\n0JILVVay/4K+9tExtxHKT540HYe89irOXbqgc3HBEBSEY7iWX+T4v6ZTkV+3+iN//d8cue02bZZv\nMOA+eDDRixbiahQokd9+i/ekSejOsujzMq7myzM0S7qDY8dxePINHLnxpiZ5xnMSaFwtv9sH3r0A\nSvOpGP4q+38K4eCtWl6VyjIdORlmv56QAbnokhbi2LEj6PXnpday5Yrgd6CnlLIXkATMABBCdEcL\n/tkDGAvMFkLoa22lFeLcuTPO3bvbuxtNQqdALZTE4z/s5FR+CUWlFTy7aDel5ZU8MjqWjDMlbDti\nOSMXDg449+rFhNma1cPXGzX9qxACx7AwQl58EZ2zMw3Bd8oU/O66y5S3oYrCWvTyR264kZJ9+8h4\n4w2rc6fnzTN5fbv062t1PvTNN60Eqt+0u9B5eeF64YU13s+pU7TpOGnghefUY2fOnk3RLvuGH7YH\nsqyMypJzp1ktTdOi+/pOnYrXhAkW54TBgJcx3MmpTz+xuhY0M9G8FSsoy8gg9c47KdywkbwlS3Dt\n08fkk2Jqz8GBkBdfoMvmTQS/MAsAQ1gYoS/Xbsufv/5v2676IoZwKtmPwkxzX/NSrVfQmf8UoXMS\ndL65DOGsCTKx5UOcOgaRO/dDq/q1YTNBIKVcKaWsCq+5EagKhD8BmC+lLJFSHgKSgYE1taGwPx/c\npL0gf9l+jH4v/cEtn21iSUI6vcK8uG2wNhuZvyWVh+dv52SetpfwyrJ9RM1YZmrD3bnpop3r3NwI\nfPwxLW/DxRfT6Q8thLiVhRSYEulUUZXLASB/zRpOvq4Jh7AP3sfvNstQ3B6XjsYQdJYXOOA+bBhd\nNm007SucjeugQaakQgCp991HTWFcKouLyXr3PQ5PmkTx3r21PW6rQ1ZWUnr4sPm7lJQePUr219+w\nr2s3cn76icS4XuzvXfOKqoqiBC34mt/d02o0GAh55WUMYWFaPoy0YyRfOoaMt83hnYu27+DYI4+S\nMm68xXXe119/zvtWrTZ0Ltr+mMH4/ezVfeqdd7L/gr6NUkuei8LtO8iId+LIKj8KyuMoGvgfcpf9\nBoBnhOX/a7/Ouei7DIFbjJECfn+OgLBdlBfXf37dXHsEtwNVqaw6ANX/atOMZRYIIaYJIeKFEPGZ\nmZnN0EVFTXg6G7hvuNnjMd44+7+iVwheLgbCfFz4ZfsxFu04zoWv/Mk3G48wZ62lbtJRr/03y8ov\n4VhO086iDEFBoNNRdsza0/Rs567Ue+41H999D7K4GN9bb8Vj1CgLCyeXfv3wf/DBBvVH5+hI9C8/\nE7N6FQAFa9aSv/ovSg4e5Mhtt1G8dy+VJSUWeuhD11zbZoRB9tyvODh2nMkD/NDVEzk45jLTRnz6\n02Z/kYKNm2ptp+TAARxCQ3Dw9a3xvBCCDu+8A+XlHBw9mrLUVAvnxCo/lirLmdh1a+m08je8rrj8\nnP03hGrhWlwHanPTjp99it/ddxO7fh2x69YSNHMmHpeaY4VVV2E1JRn/eUs7kIKjP57i8GNvU7R9\nO4GPPkiHh68j7LXnTHV9u+ZDaF8IM1uuOfuen3l1o6ZqQog/gJoCYzwtpVxkrPM0UA6clyuglHIO\nMAe0oHON6aeicTw1titTLopk0KuarfUTYzpz5xBNBdI12IO00+aX+zMLNVWHh7MDf08fyVu/7efn\nbdoyv/9Lmg334dfO/cd4PgiDAUNICKWHD1mdKz2sqaT0Pj5UnD5t8hOoPkN37W+2Solevgydk5Pp\nZdAYDCEhpuMzK1ciDA4UbtjIoWuuBSD8s08t6h+65lpi169rWuOCWqjILyDn++9xHTigRoODhpC/\n/m/SHnoIaVyFFW7fjkNAwDk3dNNnziRm1Z81nqvIPo2D37l/C+cunWs9V3bE0nKrykihLhwjIoj8\nfj7OxlWdY8eOBBot8RwCAvCdcgu+U24he+5cTr76Wq0hRaSUlGdk1riqrIuSgwdrNEF2jIjAe/JN\n4OWFc0YG8AK+XfPRBXXWQloD3KOZxTp8MOS87tmoFYGUcrSUsmcNnyohcCtwBXCTNP/1HQPCqzUT\nZixTtGCCPM3WUL3DvdHptOV6l2BNRdIlyFJVEu7jiqezgQ4+LpwpKWfF7oY5ANUH5+7dKKrBmab0\niCYIOhpfuoaQEIr27CGxm3n/psoCBbRN9qYQAlVEL1uKU7du5C5cSM4PP1qcy1u2zKp+9lzbO6JV\nlpSQPGoUGW++yeFJ1zXIFr8mchcuNAkBgIJ16zkwZKhFnYDHzR7xgU89Rdnx45RXW+1XFheT+e67\nZLz1NgXr16P3PbfBgzAY8L3jdosyWV5O5gcfNOq3dOnd22of4WxcB2nGDhW1qIbyV60i+ZJLLMa5\n7MQJSlKsJyxVyMpK9nXtRsrlVwAQ8e03RP3yM53j4+m8eRPRSxabVq6GwEC6bN1M4EMPwLS/QG+c\n0wfHQXAcYtb5qaxsaTU0FngKuEpKWV2p9SswWQjhJISIAmKBzbbqh6JpqK6nDfI0b/SO6a4tCB8e\nHUuPULPVxdSLtSxtQ2K0mdgj35tnOMVlTfPyqcIxMoqyY8etdPFF27ej9/fHuXt3vG+YTEVWlkXe\nBLdhQ2tVPTQFTtHR+NcSKbNgwwatTteudN68CYfgYMqO1T4fkuXl5C5e3OgXd8GGDRahT8rrULuW\nnczg2GOPW3ldV3Hqiy/JnD2b0pQU9AHmGXz+autk7H633YZwdSXwqadwu2gQAHkrV1KWkUHBxo3s\n73MBWbM/5NQn2gZwfUKaBz35JBHffoPXhKsAyHznHbLee7/O6xpL1Z7BsUcfoyghwep8lYnp6e/m\naf/+8APJw0eQMn48lcXWfjlg6Yjodc01uPbrh3O3bujd3dB7elp4sgPo3DwQI/9lEXXAfPL8Xu22\n3CN4H/AAfhdC7BBCfAQgpdwDLAD2AiuA+6WUTftmUNiES7trzmchXmZB0Dvcm+SXxzE+LoTe4dof\nx6yrenD9AM3ev3uoJw+NjKG4zGximnTyTJP2S+/nC+XlJkc1gNylS8lfvZqKrCwADEHBVOTmmsxM\ng2ZMJ/yDD5q0HzXhUE01EL18GZ7jNSul8uPpOMXGEr3wF/Senug93MlbtrxWM9icH3/k+JNPWa0s\nzpecH35EuLjQwei9Xbipdj29dt8fyFu2jNR770OWn51aFTJef52sd9+jeO9ePIaPoFui2WFLuLgQ\nvXQJXhOuIuCxxxAODnTdthW/22/DuVs3HCMiKFj/N8nDLuHordZ5s51izpHWsRqu/foR/OKLOHXp\nQvbX39R9QRPg4GeeQFTf96iieKcmHArj4ynas4cTz5p1+kU7dpC7aBElh8yrA1laavKg9rzqSkJf\naXz00Zi/rIVxbdjSaihGShkupexj/NxT7dzLUspOUsouUsrl52pH0XL46OZ+rH1yhFUqTgfjZvCj\nozszY1xXrh8QbnF+ZDez97JBL1i0o/EhhC3ub5zVH3v0UdPmYOHGjQB4X3cdAI7RmoVTZV4evrfd\nhq/RA9rWOASYBYFTVBQd3n7bJAyqW7DovTQhWrhtu1UbFfn5nHheM2tsrNdycUICnmPGmHTgJ158\n6Zz1qwIZlh09Ss5PP1ususrO2ijVeWrqQe/J16P386Pzxg04depE6Ouv4z/tLqu2Xfr3q3Hl4BQb\nS/TiX/G76856P5fO0RH3YcOQRrNUh9AQAh55BJ2XF+4jR9a7nfoiHMzbq9UtimR5OZUFBRTGx+Nl\n9Hk5fZZwyv7iS47/azop48aTPXcupampJPbqTd6y5QgnJzrUYOrcEAzB9c9roDyLFfVGrxN09HOt\n9XyAhxN3X9IJZ4Ol2VqfcG9mju/Kw6Ni6R3mzdqkTMormi4GfJUjUME/G9jfrz9H776b8swsnGJj\nCJ71PIDpxacdd62pGZvgEKipxqoHB/R/8EHcBg/G68orTGXBL7wAaGGvz1Zx5cyfbzpuTBz+4qQk\nyjMzMXQIxTE8HK8JE6jMzz9nvumydHMIkbzFi0kaMJAzqzSLqKLtmioj4ttvCJ41C98pWsTL4H//\nm9i1ayy87GvCtf8Aq7LIHxbQ8au5OMXG1mg2ei6ce2h7P46RkcSuWoX/PXfTZdNGwmfbZuVX5XNQ\nuGUL5VlZVJaWktgzjnTj7N/N6H2eu3AhANFLFiOcnS2SVZ189TXS7rvP9F3vZztV5blQgkDRLEwb\n1olHL+3MzYMiOJCRT7+X/mDrkaaxwXbt399idl+wZi35f/2FQ2CQ6WXiGB6uef2i2fo3FzpHR2JW\nr6LD22+Zypyiouj42acWOnBDWAcQgpwFC0js1t0ijk5FnlmVVtKIxDxHb78DgMpCzcrL86orATg1\np2anrMriYgq3bcNz/DjcR4+iMD6eyvx88lasoGDjRo49olnTuMTF4XP9dZopL9p+UvUYWLXhOdYc\nVCDouWfp+OUXuMTFNdgr3u2ii3AfMYKw996tu3IT4HPddbgYrc7S7n/A5LNQtUFsCA3FuYeWBzz8\n009xiokx+SlUp+SA5gEcNGM6EV9+2Qw9t0YJAkWzMqFPKDoBuUVlXPvh+cVbrw29uztddyUQNGO6\nRbkhPMzie+SC7wmbPRvD2elCbYwhJMRClVATOkdHXAcONG0YVm0mF+9PMtnH+06dQunRoxRs3ESZ\nMezB+eBgDFPuNVFTWbj01iK45i5ZUuMmdPHu3VTm5uJ5xZV4XWFevVScyjY5b7kNG1qnhU1t6Fxc\nCP3Pf/C/7z58b7wRt0YKaL2XF+EfzsYptn57C02B/72ab0rRzp1Wm/2GDh3o+PlnxKxdg/uQwYCW\nszziu+8Ie/89ABxjNB8d57g4fKdO1cJD2IGmc/lUKOqBEIKZ47vx0lJtZrtidzpje4bUcVX98J06\nFd+pU6nIy+P0d/PwnvR/FucNQUGmWWtLxOvqq02btwWbNuPUpStZxlhHvrfdhuuAAWTP/Yqjt96K\n+/DhhH9UvxACUkqK9+6lPCMDzyuuwLmLFmRN7+5OyKuvkj5jBideeomg6dMpO3aMU59+RuHmzZSl\npYFOh0vvXggHB/QB/lRkZpmisgY++QS+U6c27pnrcPBq6bgPHoxDSAjl6el4T/o/dG7uZBtn9Q5B\n2oq0+trIMSICxwjNoq7z5k2g01FZUNggf4OmRAkCRbNz86AISsorefO3/dzzzTb+nj6SDsaQ12cj\npaSiUpo2pOuD3tMT/3taX4JzjxHDqfK2yP/zT/L/NDtbBTz4ADg44D5yJPmrVlFyHpElT3/9DSdf\neQXAKm5PlUNdzrz5VOYXkLd4scX5gIcfNq0kYteupXj3Hg5PmgRoPhh1rXTaA1WhTNxHjMBj5EiK\ndu9C5+hY5x5HVdpavbu7zftYF0o1pGh2nA167h8Rw7iemlXDvuO1R+l847f9xDy9nOW7bOeQ1lLQ\ne3sT8d13NZ7Tubqic3TUNj6FoOzIUfLXrrWoU5aeTs7ChRRu3WpRXrW56z5ypGkDswrH8HDcR48C\nsBAC3jdMxnfqFPzuvMNUJoTAJa4nHd79H66DBrWZwIqNpcoKrCp5UcRXXxH+2WfnuqTFoQSBwm68\nPFELb7D/5Bk+X3+IIzVkQpu/WTOX/HR97R6ZbQnXvhfge+utgJZVDswvGhNGq6K0Bx8i/fnnTcVp\nDz1M+vQZHLnpZgunpZKkJLwnTSJ89geIGhyNqof29hw/HrdhQwmeOZOgGTNq3PT1HDOGiC+/qNMq\nqL0Q/PTTRH4/HyejIBA63XlbPNkbta5T2A0fVwMeTg789/ckyisln65L4Z8Z2uxUSsmmQ9mcLtSC\nZ+05nsu+9Dy6hXieq8kayThTjItBb+X/0FIJmv4vAv/1FEhJwYYNuF1sOYsP+3A2affehywpIWf+\n9/jddhuGsDCLwHXF+/bhesEFVBYUUJGdjSEs7OzbmHAfNYqIr7+qV2gFhTXCwcG08d5aUSsChd0Q\nQvNLKDcmvTmeW2zyL5j5y24mz9mIXid4ZHQsxWWVjPvfOtYknV8kWiklA1/+k5Fvram7cgtCCIHQ\n6XAfPNhqdukxYgSRPywwfS/auZOinQlQzfKn4B/NIqtKfeTY0dpssfq9XAcMUEKgHaMEgcKuxARa\nbpSlG/MjzzOqhPzdHelebRWw/8T5Zf06mJkPQOaZEn7amtaYrrYoXOLi6By/BRwcKEk+aErKHr1k\nMQ6hIZz6eA4V+fnkrVyJ3tcX9xEj7NxjRUtGCQKFXXnuiu5cFO3HrRdHAhB/JNvCv2D6uK70CjO7\n8L+yLLHGRC+1cSjLHO/w201HGt/hFoTe3R3HiAhKDh40BVpzCAoi+JlnkKWlZL79X84sX4Hb4MEN\nzginaB8oQaCwK37uTsybNohJ/TUd9sdrUkwex89d0Z2JF4QR7OXM7YPNuVn31zNo3ZqkTFYlao5X\nl/cKYUdqDqXlTRfaoiXg1KkTJUlJpqxgOnd3PEaOxCk2ltNGCyTva6+1Yw8VrQElCBQtAn93zQIl\n8YT5Je/vYbZKee7K7sQ/MxonBx0vL607zMLuY7lM/XyzScU0LNafSokpnWZbwSmmkylNp/+DD5j2\nE5yNCWd8broJt0E151dWKKpQgkDRIvBxNW9U3jEkiodGxXJZD0svYH93J268sCPrk7NMOQ26Pruc\nZxfuRkrJJ2tTeOIHLdftQ/PNUTz7hHsT5qMFy/tmY9tSDzl2MqcR9brqKtOx/7S7cIyKsvKuVihq\nQpmPKloEjg46HhgRA8Ajo2Nr9STuH+HLF38fJjkjn45+rhSXVfL1xiOEervw+opEQDOzT8ksYEKf\nUB4eFYuni4EyozXSx2tTuOWiCJNgaO1UN1usHtDMMTKSTsuts6ApFDWhBIGixfDEZV3qrBMbpFkZ\nJWfks/uYOdNWlRAA+GmbZh00MMqX6ABr9/01SZncdGFEY7vbInAMCyP4hVk4VVsZKBTni1INKVoV\nkX5uOOgEy3enM/3nXRbnnrysC89cbs47EO1vKQS2PjMaR72Op3/ZzYaDp5qlv82Bz3XX4dqvn727\noWjFKEGgaFU4Oui4oKM3v+05aXXurqHR3Dk0mq/vGMitF0cyKNoyyYefuxM3DdLC/M5abJ3sXqFo\nryjVkKLVcUWvULYc1kxMr+4TygMjY0g6mY+jgzavGRobwNDYgBqvfeby7jjqdXy8NoXI6UtZ++SI\nc2ZdUyjaA2pFoGh1jIsz52L97/V9iAn0YHxc/XIa6HWC+4yb0gA3fLKxyfunULQ21IpA0eoI9HDm\n31d2J7eorEFRHr1czMHnagjGqVC0O2z+ZyCEeFwIIYUQ/sbvQgjxrhAiWQiRIIToa+s+KNoetw2O\n4pHRnRt8/eanRzGmexCp2UXc/922JuyZQtH6sKkgEEKEA2OAo9WKxwGxxs80oH759hSKJiTQw5lI\nfzcAliakm/wMFIr2iK1XBP8FngKqRwmbAHwlNTYC3kKIpklaq1CcBzdfGEGYj5Yic9biPZSUWydw\nVyjaAzYTBEKICcAxKeXOs051AFKrfU8zlp19/TQhRLwQIj4z8/xi0CsU9aGjnysrHhkGwDcbj/LE\nDwl27pFCYR8aJQiEEH8IIXbX8JkAzASea2jbUso5Usr+Usr+AQE1mwIqFI3F3cmBe4drXrnxh7Pt\n3BuFwj40ympISjm6pnIhRBwQBew0WnWEAduEEAOBY0D1dElhxjKFwi78a2xXDHod7686wMm8YoI8\nGx67v6CknHUHsrisR1Cry1uraL/YRDUkpdwlpQyUUkZKKSPR1D99pZQngF+BKUbroUFArpQyLTGg\npwAAH+dJREFU3Rb9UCjqy1W9Q6mUsHLPiUa18/HaFO75Zisr95o9n3/cmsZn6w81tosKhc2whxX1\nMiAFSAY+Ae6zQx8UCgs6Bbjh4eTAVxuOsP3o6Qa1UVxWwbt/HgBgR2oOAKXllTzxw05eXLLXFDpb\noWhpNIsgMK4MsozHUkp5v5Syk5QyTkoZ3xx9UCjOhRCCmCB3DmTkM3H2P3XWr6iUVFZapsw8lFVg\nOk7N1lJkniooqfG8QtGSUH6VCoWR2EBztNK1SdaWaskZ+Tz/6x6KyyoY+85aHphn6YiWVC2F5saU\nUxSWlpN1ptRUdrqgFIWiJaJCTCgURmKqCYIth7MZ1tlsrXYyr5jRb68BINDTiQMZ+RzIyKeyUqLT\naZvCv+05gb+7I29f14cpn2/mkfk7cHMy/4ll5ptXBwpFS0KtCBQKI9WthX7fe9Kk+tl65DTXVFMX\nfbvR7CifYEyOczyniGW7TnBJ50CGxvoT18GLlXtP8st2s0Hcw/N38PWGw7Z9CIWiAShBoFAYGd4l\nkB6hnoyPCybxxBl+33eSHak5XPvhPxzLKTLVO5ZTRHSAG3qd4A+jddC8zZpwuLS7ZjY6prs537Kv\nmzkf87ebqkdbUShaBkoQKBRGvFwMLH1oKE9f3h2Au7/eyuvLzSkw+4R7m47fub4PPTt48evO42Sc\nKWZjyil6h3kxtqcWInti3w4MjfUH4KJOfiQ8P4br+oeReOIMz/+qkuIoWhZqj0ChOIsO3i6m4w0p\nWkrLxQ8MIS7MiyUJx6mU0CvMmyAPJ3am5jDpow0czyni9iFRpuvCfFz5+o4L2Xokm85BHng4G4jw\n04LcffnPYZ69ojt6nXI4U7QM1IpAoaiB2webX+oezg7EhXkBWna0q3qHAphm/0dOFVJWIRkU7WfV\nTr8IXzyctfwHkUZBoF2jTEkVLQclCBSKGpgxvisPjtQymRWW1uwINvGCDmyaOYoO3i70CPXkwijf\nGutVMSTG33S8Nz2v6TqrUDQSJQgUihow6HUMiNRe7BVnOY5VIYQgyNOZv6ePZOlDQ3F1PLem1cvV\nwOonhgOw97gSBIqWgxIECkUthPs2fVL7KH83ugZ7sDMtp8nbVigaitosVihqIdLPldsHR5mS1zQV\nQ2L8+XT9IbYdPU3fjj5N2rZC0RDUikChqAUhBM9d2d3CGqgpePRSLdfyNbP/IbewrEnbVigaghIE\nCkUzUz3sxJ7juXbsiUKhoQSBQmEHfrjnIkDFH1K0DJQgUCjsQJdgD0BLWqOikirsjRIECoUd8DCq\nh9YdyOJ/xmQ2CoW9UIJAobADQgiqIkws2nGMsopK+3ZI0a5RgkChsBOrHh/OgEgfTheWseVQNqDl\nTH63mVYIi3Yc45+DWc1yL0XLRgkChcJORPq78fEt/QH4dedxAKZ9vZW3f0/iZF6xTe+dml3Iw/N3\ncOMnm6xSbiraH0oQKBR2xNfNkcvjQvhxaxof/nXQVL5sV3qTtF9YWm5Vtvd4HlO/2Gz6Hj1zGSv3\nnGiS+ylaJ0oQKBR25tFLYymvlLy+wpz7oL6xiBbvPE7k9KWsqSHH8t7jeXR/7jdW7LZ8yY9/dx0p\nmZbRT2f+srsBPVe0FWwqCIQQDwohEoUQe4QQb1QrnyGESBZC7BdCXGbLPigULZ2YQA9CvbQ0mQ+O\njKFvR2/SThfVcZXGg/O2AzD1881W5xYnaOqmGT8nmFRNZ29KL3lwCNPHdSUrv4QNB081+BkUrRub\nCQIhxAhgAtBbStkD+I+xvDswGegBjAVmCyH0tuqHQtEa8PdwAiDYy5lQbxc2pJziqvfXc+MnGzme\nU7NQkNJSt3/Tpxv5ZXua6XvSiTMAnC4sY+rnm0lIy+GR73cAMLpbEJtmjqJnBy+u7x8OKC/n9owt\ng87dC7wmpSwBkFJmGMsnAPON5YeEEMnAQGDD+TReVlZGWloaxcW23VRrCpydnQkLC8NgMNi7K4oW\nio+rltfYy8XA9QPCWZKQTkKa9mKe/VcyL10dZ3VN9lmOaH8nn+Lv5FN4OhsY3iWQhGO5XNU7lC2H\ns0k8cYar3v/bVPfpy7sR5KmtQrxdDTgbdOw9nseK3emM7Rliq8dUtFBsKQg6A0OFEC8DxcATUsot\nQAdgY7V6acYyC4QQ04BpAB07drRqPC0tDQ8PDyIjIxGi5ab8k1Jy6tQp0tLSiIpq2uBlirbDwChf\n1iRl4u3iyJBYfzY/PYqnf9nN73tP1qomqioP8HAi84w5VMUdc+OZP20QmWdKuLR7EGN6BPHAd9st\nro3yN2dLE0IQ7OnMz9uP8fP2Y6x7aoRNQnArWi6NUg0JIf4QQuyu4TMBTcj4AoOAJ4EF4jze2FLK\nOVLK/lLK/gEBAVbni4uL8fPza9FCALQ/Mj8/v1axclHYj3sv6cS3d17I4Bgt3WWghzOfTOnPFb1C\nSM7Ir/Gaz/8+hKNex5IHhzDvrkEW55bvSsegF4zqFsgVvUItzvWPsA593Tvc23S89cjpxj6OopXR\nKEEgpRwtpexZw2cR2kz/Z6mxGagE/IFjQHi1ZsKMZedNSxcCVbSWfirsh04nGBzjb/V/pVeYF2mn\ni8g4YzmRKCgpZ2lCOjde2JEgT2cGRfvy0c39eObybgDEHzlNgLuTKWvaixN64OnswKR+Yfzvhgus\n7n/zoAjT8ebD2WScKeblpXtrFUKKtoUtrYYWAiMAhBCdAUcgC/gVmCyEcBJCRAGxgLXJg0KhMKXL\n3HLIcpa+/WgO5ZWSEV0DAW2yMbZnMENjtdXznuN5+Lg5murfclEkCc9fxpuTetPB2zrRTvVVQtKJ\nMzy+YCefrDvE6LfXNPkzKVoethQEnwPRQojdwHxgqnF1sAdYAOwFVgD3Sylrzg7eSli4cCFCCBIT\nE+uurFCcBz07eOFs0LHtqKUg2HzoFDoB/c5S83QOcmegUXjsOY+8yEII9r0wlit7hxJ/5DTrDqjQ\nE+0JmwkCKWWplPJmo6qor5RyVbVzL0spO0kpu0gpl9uqD83FvHnzGDJkCPPmzbN3VxRtDINeR5S/\nO5+tP0Ryxhk+XZfCzZ9uYkF8Gj07eOHuZGnvIYTg+7sHoRMweUB4La3WjIujngi1SdwuUTmLG0l+\nfj7r169n9erVXHnllcyaNcveXVK0MUK9nNmXnsfot9dalE8eWPOLXghB0kvj0OvOf2/q6gtCOVVQ\nSoCHE1n5JXy36Sg3zNnIf6/vQ7DR6U3R9mgTgmDW4j31dsmvL91DPfn3lT3qrLdo0SLGjh1L586d\n8fPzY+vWrfTr169J+6Jo39wxNIo/EzOsyu8fEVPrNQ76hi32YwI9ePUazWfheE4RJWWV/LQtjU/W\npfDsFd3Pee1f+zMoKq1gXJzyQ2httAlBYE/mzZvHww8/DMDkyZOZN2+eEgSKJuXiTv5MHhDO/C2p\nPDwqluKyCvpG+GBo4Mu+voR6u/DWdb1Jzy0i/nC2xbmEtBzKKirpF6HtR0gpufWLLQAcenW8spRr\nZbQJQVCfmbstyM7OZtWqVezatQshBBUVFQghePPNN9UfgqJJeXxMF0Z2DWRk18AGz/YbSpS/G0vP\nioZa5aU8fVxXrugVgpODOUrM6v0ZeLs60rejtb+ComWioo82gh9//JFbbrmFI0eOcPjwYVJTU4mK\nimLdunX27pqijRHg4cSYHsHNLgRAEwQ5hWX8tFWLY1Q9xtFryxN56scE0k4Xmspu/zKea2b/0+z9\nVDQcJQgawbx585g4caJF2bXXXqushxRtiskDtRAvj/+wk/u/3cbq/Zb7FSXllSSdPGN1XW5hWbP0\nT9F42oRqyF6sXr3aquyhhx6yQ08UCtvh7uTAsM4BrE3KZOmudJOaaNZVPfjPb/vZeuQ0W4+cpkuQ\nB+7ODqYQFSlZ+Vyg1EOtArUiUCgUdTJ9bFeL7y4GPTdd2JHnrjRbEr11XW+ev7IHXi5alN1P1qU0\nax8VDUcJAoVCUSeR/paOZnFhXjjodUzqH86Y7kGM6hpIzw5exIV5sXHGKACW7TrRIPVQfkk5sxbv\n4fP1hygua9VBB1oNShAoFIo6cXV04M3/68XwLloso9hAd9O5OVP689mtA0zfXRz1vHR1TwASjuVY\nZUWrieSMM/yTrIW1WLAllS/+PswLS/byzcYjTfkYilpQewQKhaJeTOofzrV9w/hqw+E6k9dc1iOY\nZxbu5pbPNtM5yJ1fHxiCs8E6EWFZRSUCLLymh3U2h52ft/kodw6NtrpuTVIm4T4uRAe4W51TnD9K\nECgUinqj0wluHVx3giV/d3Pk06ST+SSk5TIwypei0gpKyyvxcjUQfzib//toAxMvsMxLtTYpk2BP\nZ/6vXxgfrjlIeUUlDnodWw5n8+qyfWw7mgNAsKczG2eOatoHbKcoQaBQKJqcsx0qf9meRtrpQh5b\nsBOAw69dzqZD2cZz1ulI8orLCPF2pqJSknGmhFBvF774+5BJCIC2lwCwKvEkHbxd6RLsYavHafMo\nQdAI9Ho9cXFxSCnR6/W8//77XHzxxfbulkLRIlh0/2Dyisv4fP0h5m1OZd7mVNO59NwicovMG8lD\nYvzxc3eke4gnry5PpHOQhylvwtHsQkK9XTicVYiHkwNTLo7geE4xK/ecIPFEHrd/GY+ro569L4xt\n9mdsKyhB0AhcXFzYsWMHAL/99hszZsxgzRqVyEOhAHP6yy5BHox8aw35JeW4OeopKK1gU0q2hTdy\ngIcT/72+DwD9I30I93XFoNMhhLZ5/MqyfexNz8NRr+PJy7qy/8QZlu1KZ+w7mhd/YamyLmoMShA0\nEXl5efj4KOcZheJsAj2d2TRzFK6OeiolXPDCSh5dsAM3Rwe6BHnQo4MnT4zpYqpfFcgOYPKAjszb\nfNT0/Y6h2v5El2AP+kX48M/BU4DlnoTi/GkbgmD5dDixq2nbDI6Dca+ds0pRURF9+vShuLiY9PR0\nVq1adc76CkV7xc2YQEcvoEeoFxtSTpFfUk50gBtvX9en1uueubybhSB46jKzwOgU4G4SBFn5pRSV\nVuDiaG2ZpKgb5UfQCKpUQ4mJiaxYsYIpU6ZYBORSKBTWvHpNnGkGf10dWdTcnBz49s4LmTYsmoX3\nD7bYhPZx1TyYq/YSjuUU1tiGom7axoqgjpl7c3DRRReRlZVFZmYmgYGB9u6OQtFiifR3I/6ZS+td\nf3CMP4Nj/K3Kh3YO4N1VyVzbL4x3/zzAwcwCYgKV5VBDUCuCJiIxMZGKigr8/Pzs3RWFol0wINKX\nnc+N4f4RnXA26FiwJVWtyBuIzVYEQog+wEeAM1AO3Cel3Cy0td3/gPFAIXCrlHKbrfphS6r2CECL\n0T537lz0eqWjVCiaCy+jesjV0YE/EzNYn5zF0NiAOq5SnI0tVUNvALOklMuFEOON34cD44BY4+dC\n4EPjv62OigplsqZQtASmj+3KUz8lcPhUIUNjz+/agpJyyiulKWpqe8SWqiEJeBqPvYDjxuMJwFdS\nYyPgLYRQ2a4VCkWDmdi3A0JA1pmSetWvrkK69YvN9J61kpLy9juxs6UgeAR4UwiRCvwHmGEs7wCk\nVquXZiyzQAgxTQgRL4SIz8zMtGE3FQpFa8eg1+HsoOd/fx4g40zxOet+ui6FqBnLTCGutxzWEumc\nyi+1eT9bKo0SBEKIP4QQu2v4TADuBR6VUoYDjwKfnU/bUso5Usr+Usr+AQFK56dQKM5NkfHF/tn6\nQ+es99LSfQBMnP0PkdOXmsr/3HeS+7/bRml53WGz2xqN2iOQUo6u7ZwQ4ivgYePXH4BPjcfHgOrG\nw2HGMoVCoWgwl3YP4ve9J9GfFfCuOtVzK+9Lz7M49+yiPQAsTUhnxSND6RrsSXvBlqqh48AlxuOR\nwAHj8a/AFKExCMiVUqbbsB8KhaId8N4NF2DQCxbEp1FeQzKc/SfOsPe49vKPqZZYZ3xcsFXdse+s\nY+WeE7brbDNQUVl/U1pbCoK7gLeEEDuBV4BpxvJlQAqQDHwC3GfDPigUinaCs0FPXAcvsvJLmLcl\nlWFvrGbrEU3/vyrxJJe9s5ZHvt+Bo4OO6/qHma7795U9MOi1VcS9wzsxpnsQANO+3tr8D9FAkjPO\nkJGn7Y28unwfC7akMnnOhnpfbzNBIKVcL6XsJ6XsLaW8UEq51VgupZT3Syk7SSnjpJTxtupDc3Di\nxAkmT55Mp06d6NevH+PHjycpKcne3VIo2iVvTuoNwNx/DnM0u5BHv9eiAz80b4epzmU9grnpwgjT\nd393J+bePpBLOgdw/4gYRhsFAcCOVHP+g5ZKWUUlo99ey8TZ//DH3pN8vCaFp35KMG2C14e2EWLC\nTkgpmThxIlOnTmX+/PkA7Ny5k5MnT9K5c2c7906haH90CnAn2NOZ5Ix8QMtlEDNzGeXV1CTjewbj\n5uTAAyNi8HFzRK8TXNzJn4s7aWEsugSZw1RM/ymBFY8Ma96HOE82GAPvHcsp4s6vGjavVoKgEaxe\nvRqDwcA999xjKuvdu7cde6RQKIK8nDmRV0yghxMZZ0oshABgynP8RLVIptXpFeZlOm4NESvWJDXe\nvL5NCILXN79OYnZik7bZ1bcr/xr4r3PW2b17N/369WvS+yoUisZRZTP0wU19mb85lZ+2pfHKxDgW\n7jjG5kPZhPu6nPt6Idg96zKGvbHaZJLaEjldUMpdX8UTf6T+KqDaaBOCQKFQKKp4eWJP1iZl0T/C\nh74dfXjm8m74uDlyea8QkjPO4OpY92vP3cmBWy+O5L9/JFFYWl6va5qbhGO5JiFwRa8QpIRdx3JZ\n8+RwomYsO6+2Wt7TNYC6Zu62okePHvz44492ubdCoaiZHqFe9AjV1Dt6AT5uWu4DLxeDRfazuugc\n5I6Umr/B+VzXXBzPKQK0vAz3DY+he6gnlZXSImdDfVFhqBvByJEjKSkpYc6cOaayhIQE1q1bZ8de\nKRSKpqCL0aHs8QU7bXaPgpJynvxhJ68u31ev+v/5bT9/7jsJaIJAJ2DL06PpHqr1VafThMCcW/ox\ntoe1f0RtKEHQCIQQ/PLLL/zxxx906tSJHj16MGPGDIKD6z8ACoWiZRLp54qjg4703GIOnDxj4ZXc\nVKzen8EPW9P4eE1KnbkU7py7hfdXJ3PH3HgOZRXw3qpkKiU46K1f42N6BPPRLfXfv2wTqiF7Ehoa\nyoIFC+zdDYVC0cQIIfjX2K68uGQvl/53LQCHX7u8Se9xNNucXnPmL7t4+vLuuDs5UFJegYNOh944\nwy8pr+CPfRmmuiP+81eT9kOtCBQKhaIWugVbpr7ccji70W0eOVVASXkFh7IKePO3/abyeZtT6fnv\n3/hz30m6PLOCp35MAGDrkWyGvL4agIkXWAZqrhIUjUUJAoVCoaiFKt17FZM+2sDMX3aRkplvVTfj\nTDFppwutyqvz8tK9XPLmX7y1MomVe04gJbxxbS/euLYX3UK0e90xV3MK+2lbGhWVkms/3ECmMc/C\nY5eaHVU7eLvwx2OXWN+kAShBoFAoFLXg7erI/SM6WZR9t+koI99aYxHULSEth4Ev/8l1H204Z7C3\ndQeyAC3k9c/bjhET6M51A8K5bkA4ix8YbFW/usD53+Q+hPu6EuHnCsC4nsFE+bs16vmqUIJAoVAo\nzsGDI2P5+o6BVuVVYSxOF5Ry+5dbADieW8zNn26qsZ3yikpSMgsAOJhZwP6TZ5g2LNp03kGv4/Nb\n+5u+63WC/cYN6qfHd2NCH00ttOLhYUy9KIIHR55nTs5zoDaLFQqF4hw4G/QMjQ1g/rRB5BWVEeTp\nzIQP/ubnbWmUVlRSUFJOVrXsZhtSTrH7WC49O3hZtHMoq4DSikpuGRTB1xuPANqsvjojuwZxy6AI\njuUUsSoxg8eMpqvX9jNHS3Vx1DNrQs8mfUYlCBQKhaIeDIr2AyC3sAyAj9emWJz/ZEp/EtJymLM2\nhXmbj/LyxDiL84kntNn9DQM7ck3fDmScKcHD2WB1nxev7klKZj6rEjMoLa/ExaDHx9W6XlOiBEEj\n0Ov1xMXFUVZWhoODA1OmTOHRRx9Fp1MaN4WireJVw0s50s+VS7sHcWn3IHYdyyW+hhDQCWk5OOgE\nnQLdcHLQn/Me0QHuPHlZF978bT+xQe4N8hY+H5QgaAQuLi7s2KHFOc/IyODGG28kLy+PWbNm2bln\nCoWiOXj80s5sOXKaWVf1MJVF+rmx5VA2UprDPRSWljNvcyq9w73rFAJVhPlowfEu6Wz7nO1KEDQR\ngYGBzJkzhwEDBvD888/bXIIrFAr78fmt/Skuq2R8XIjVuTAfFwpKK8gtKsPbVYtztP5AFvkl5Tw6\nuv55Si6PC6G8QnJVn9Am63dttAlBcOKVVyjZ17RhqJ26dSV45szzuiY6OpqKigoyMjIICgqq+wKF\nQtEqGdm19r/v6ADNpHPv8Tw6BbqzIzWHu41pL/tF+NT7Hg56ncUmsS1pE4JAoVAoWgoDo/zQCdh0\nKJtZi/eaTEC7Bnvg4lg/tVBz0yYEwfnO3G1FSkoKer2ewMBAe3dFoVDYCXcnByol/O/PA6ayK3qF\n8Oo1cee4yr60CUHQEsjMzOSee+7hgQceUPsDCoXCxH3DO3Hv8E41moq2FBpl5yiEmCSE2COEqBRC\n9D/r3AwhRLIQYr8Q4rJq5WONZclCiOmNub+9KSoqok+fPvTo0YPRo0czZswY/v3vf9u7WwqFws4s\nuPsi0/FTY7u2aCEAjV8R7AauAT6uXiiE6A5MBnoAocAfQoiq7fIPgEuBNGCLEOJXKeXeRvbDLlRU\ntNx8pgqFwn707egNwBNj6m8lZE8aJQiklPuAmlQhE4D5UsoS4JAQIhmoCtaRLKVMMV4331i3VQoC\nhUKhqAkHva7JcxfYElu5wHYAUqt9TzOW1VZuhRBimhAiXggRn5mZaaNuKhQKhaJOQSCE+EMIsbuG\nzwRbdkxKOUdK2V9K2T8goGbPurpSu7UUWks/FQpF+6RO1ZCUcnQD2j0GhFf7HmYs4xzl54WzszOn\nTp3Cz8+vRVvpSCk5deoUzs7O9u6KQqFQ1IitzEd/Bb4TQryNtlkcC2wGBBArhIhCEwCTgRsbcoOw\nsDDS0tJoDWojZ2dnwsKax0NQoVAozpdGCQIhxETgPSAAWCqE2CGlvExKuUcIsQBtE7gcuF9KWWG8\n5gHgN0APfC6l3NOQexsMBqKiohrTfYVCoVAAojXor/v37y/j4+Pt3Q2FQqFoVQghtkop+9dVTwXO\nVygUinaOEgQKhULRzmkVqiEhxBlgfz2rewG57aheW7u3P5Blh/u2ht+mNdy7qce5vm22pd+mKZ+l\ni5TSo85WpJQt/gPEn0fdOe2pXhu8d73GWo1Ly7x3U49zfdtsY79Nkz1LfX/ntqgaWtzO6rW1e9vr\nvq3ht2kN927qca5vm23pt7HFs5yT1qIaipf12PlWtH7UWLcP1Dg3D/X9nVvLimCOvTugaDbUWLcP\n1Dg3D/X6nVvFikChUCgUtqO1rAgUCoVCYSOUIGghCCHy6zj/19lZ4BStDzXO7YfWNNYtShDU9cMp\n2g5qrNsHapxbBy1KELR3hBDDhRBLqn1/Xwhxqx27pLABapzbD61lrFucIBBCuAsh/hRCbBNC7KpK\ngCOEiBRC7BNCfCKE2COEWCmEcLF3fxUNR411+0CNc8unxQkCoBiYKKXsC4wA3hLmzDOxwAdSyh5A\nDnCtnfqoaBrUWLcP1Di3cGyVmKYxCOAVIcQwoBItp3GQ8dwhKeUO4/FWILL5u2dTyrEUzm09rVl7\nHWs1zu1jnKGVjHVLXBHchJbopp+Usg9wEvOPV1KtXgUtU5A1hiNAdyGEkxDCGxhl7w7ZmPY61mqc\n28c4QysZ65b4o3sBGVLKMiHECCDC3h2yNUIIB6BESplqzOy2GzgEbLdvz2xOuxprNc7tY5yh9Y11\nixEEVT8c8C2wWAixC4gHEu3aseahB3AQQEr5FPDU2RWklMObuU82ox2PtRrn9jHO0MrGusWEmBBC\n9AY+kVIOtHdfmhMhxD3AQ8AjUsqV9u5Pc9Aex1qNc/uhNY51ixAErfGHUzQMNdbtAzXOrYsWIQgU\nCoVCYT9aotWQQqFQKJoRuwkCIUS4EGK1EGKv0avwYWO5rxDidyHEAeO/PsZyIYR4VwiRLIRIEEL0\nrdbWVGP9A0KIqfZ6JoU1TTzOK4QQOdVd9hUth6YaayFEHyHEBmMbCUKI6+35XO2C+ubGbOoPEAL0\nNR57AElAd+ANYLqxfDrwuvF4PLAczTllELDJWO4LpBj/9TEe+9jrudTHNuNsPDcKuBJYYu/nUh/b\njTXQGYg1HocC6YC3vZ+vLX/stiKQUqZLKbcZj88A+9A8DicAc43V5gJXG48nAF9JjY2AtxAiBLgM\n+F1KmS2lPA38DoxtxkdRnIMmHGeklH8CZ5qz/4r601RjLaVMklIeMLZzHMhAc0hT2IgWsUcghIgE\nLgA2AUFSynTjqROYXdE7AKnVLkszltVWrmhhNHKcFa2IphprIcRAwBGjTb7CNthdEAgh3IGf0MzM\n8qqfk9raUJk1tQHUOLcfmmqsjSvBr4HbpJSVTd5RhQm7CgIhhAHtP8y3UsqfjcUnq1QBxn8zjOXH\ngPBql4cZy2orV7QQmmicFa2AphprIYQnsBR42qg2UtgQe1oNCeAzYJ+U8u1qp34Fqix/pgKLqpVP\nMVoaDAJyjcvN34AxQggfozXCGGOZogXQhOOsaOE01VgLIRyBX9D2D35spu63b+y1Sw0MQVsiJgA7\njJ/xgB/wJ3AA+APwNdYXwAdousJdQP9qbd0OJBs/t9l7B159bDbO64BMoAhNn3yZvZ9PfZp+rIGb\ngbJqbewA+tj7+dryR3kWKxQKRTvH7pvFCoVCobAvShAoFApFO0cJAoVCoWjnKEGgUCgU7RwlCBQK\nhaKdowSBQqFQtHOUIFAoFIp2zv8DyJfz6BR3gnQAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 获取数据输入/输出"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## CSV"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 写入 csv 文件:"
]
},
{
"cell_type": "code",
"execution_count": 145,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df.to_csv('temp_file_foo.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 读取 csv 文件:"
]
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\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",
" -1.199395 | \n",
" 1.387735 | \n",
" -1.798714 | \n",
" -0.633652 | \n",
"
\n",
" \n",
" 1 | \n",
" 2000-01-02 | \n",
" -0.908396 | \n",
" 1.301464 | \n",
" -2.751684 | \n",
" -0.756612 | \n",
"
\n",
" \n",
" 2 | \n",
" 2000-01-03 | \n",
" -1.214637 | \n",
" 1.722991 | \n",
" -2.878235 | \n",
" -1.103410 | \n",
"
\n",
" \n",
" 3 | \n",
" 2000-01-04 | \n",
" -1.444817 | \n",
" 1.526782 | \n",
" -1.434901 | \n",
" -0.878478 | \n",
"
\n",
" \n",
" 4 | \n",
" 2000-01-05 | \n",
" -2.336566 | \n",
" 0.792154 | \n",
" 0.702733 | \n",
" -1.161456 | \n",
"
\n",
" \n",
" 5 | \n",
" 2000-01-06 | \n",
" -1.141497 | \n",
" -0.123991 | \n",
" 0.006881 | \n",
" -0.231437 | \n",
"
\n",
" \n",
" 6 | \n",
" 2000-01-07 | \n",
" -0.903127 | \n",
" -0.106136 | \n",
" -0.105336 | \n",
" 0.636556 | \n",
"
\n",
" \n",
" 7 | \n",
" 2000-01-08 | \n",
" -0.363628 | \n",
" 0.484380 | \n",
" 0.604074 | \n",
" 2.070136 | \n",
"
\n",
" \n",
" 8 | \n",
" 2000-01-09 | \n",
" -2.381704 | \n",
" -1.328455 | \n",
" 2.261637 | \n",
" -0.153917 | \n",
"
\n",
" \n",
" 9 | \n",
" 2000-01-10 | \n",
" -2.071101 | \n",
" -1.512707 | \n",
" 3.693099 | \n",
" -0.840669 | \n",
"
\n",
" \n",
" 10 | \n",
" 2000-01-11 | \n",
" -2.565354 | \n",
" 0.130182 | \n",
" 1.843764 | \n",
" -1.024025 | \n",
"
\n",
" \n",
" 11 | \n",
" 2000-01-12 | \n",
" -2.319995 | \n",
" -0.495654 | \n",
" 1.502985 | \n",
" 0.329354 | \n",
"
\n",
" \n",
" 12 | \n",
" 2000-01-13 | \n",
" -3.597537 | \n",
" -0.941485 | \n",
" 2.316260 | \n",
" 0.292277 | \n",
"
\n",
" \n",
" 13 | \n",
" 2000-01-14 | \n",
" -2.936507 | \n",
" -1.304660 | \n",
" 1.623378 | \n",
" 2.056469 | \n",
"
\n",
" \n",
" 14 | \n",
" 2000-01-15 | \n",
" -3.434638 | \n",
" -0.557851 | \n",
" 3.005293 | \n",
" 2.351642 | \n",
"
\n",
" \n",
" 15 | \n",
" 2000-01-16 | \n",
" -4.416633 | \n",
" -0.263922 | \n",
" 3.217599 | \n",
" 1.910207 | \n",
"
\n",
" \n",
" 16 | \n",
" 2000-01-17 | \n",
" -3.620688 | \n",
" 2.576329 | \n",
" 3.666597 | \n",
" 3.099960 | \n",
"
\n",
" \n",
" 17 | \n",
" 2000-01-18 | \n",
" -2.781963 | \n",
" 2.665356 | \n",
" 4.350962 | \n",
" 3.136723 | \n",
"
\n",
" \n",
" 18 | \n",
" 2000-01-19 | \n",
" -3.103494 | \n",
" 2.206880 | \n",
" 2.800751 | \n",
" 3.927562 | \n",
"
\n",
" \n",
" 19 | \n",
" 2000-01-20 | \n",
" -4.747767 | \n",
" 3.565885 | \n",
" 3.328753 | \n",
" 5.492230 | \n",
"
\n",
" \n",
" 20 | \n",
" 2000-01-21 | \n",
" -3.959743 | \n",
" 3.567764 | \n",
" 0.668938 | \n",
" 4.408660 | \n",
"
\n",
" \n",
" 21 | \n",
" 2000-01-22 | \n",
" -4.307452 | \n",
" 4.313845 | \n",
" 0.268082 | \n",
" 4.341462 | \n",
"
\n",
" \n",
" 22 | \n",
" 2000-01-23 | \n",
" -4.820593 | \n",
" 3.535090 | \n",
" -0.237196 | \n",
" 3.653925 | \n",
"
\n",
" \n",
" 23 | \n",
" 2000-01-24 | \n",
" -4.343503 | \n",
" 3.313142 | \n",
" 0.196462 | \n",
" 3.228989 | \n",
"
\n",
" \n",
" 24 | \n",
" 2000-01-25 | \n",
" -4.012244 | \n",
" 2.340642 | \n",
" -0.239219 | \n",
" 2.294877 | \n",
"
\n",
" \n",
" 25 | \n",
" 2000-01-26 | \n",
" -5.584496 | \n",
" 2.627301 | \n",
" -0.933413 | \n",
" 2.826616 | \n",
"
\n",
" \n",
" 26 | \n",
" 2000-01-27 | \n",
" -5.349654 | \n",
" 1.431231 | \n",
" -1.747397 | \n",
" 3.038043 | \n",
"
\n",
" \n",
" 27 | \n",
" 2000-01-28 | \n",
" -7.274830 | \n",
" 2.160869 | \n",
" -1.533647 | \n",
" 3.606827 | \n",
"
\n",
" \n",
" 28 | \n",
" 2000-01-29 | \n",
" -7.485718 | \n",
" 1.098004 | \n",
" -1.062377 | \n",
" 3.421171 | \n",
"
\n",
" \n",
" 29 | \n",
" 2000-01-30 | \n",
" -6.304430 | \n",
" -0.640919 | \n",
" -1.360975 | \n",
" 2.629127 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 970 | \n",
" 2002-08-28 | \n",
" -91.161762 | \n",
" -18.283552 | \n",
" 12.647657 | \n",
" -18.508526 | \n",
"
\n",
" \n",
" 971 | \n",
" 2002-08-29 | \n",
" -89.573510 | \n",
" -18.504441 | \n",
" 14.460417 | \n",
" -17.223896 | \n",
"
\n",
" \n",
" 972 | \n",
" 2002-08-30 | \n",
" -88.798781 | \n",
" -16.765993 | \n",
" 16.420495 | \n",
" -18.875415 | \n",
"
\n",
" \n",
" 973 | \n",
" 2002-08-31 | \n",
" -88.407509 | \n",
" -17.379462 | \n",
" 16.765101 | \n",
" -20.467720 | \n",
"
\n",
" \n",
" 974 | \n",
" 2002-09-01 | \n",
" -89.670998 | \n",
" -16.868724 | \n",
" 15.976802 | \n",
" -20.654874 | \n",
"
\n",
" \n",
" 975 | \n",
" 2002-09-02 | \n",
" -87.923717 | \n",
" -18.770030 | \n",
" 16.433847 | \n",
" -18.946714 | \n",
"
\n",
" \n",
" 976 | \n",
" 2002-09-03 | \n",
" -85.777104 | \n",
" -20.938777 | \n",
" 17.576698 | \n",
" -19.501421 | \n",
"
\n",
" \n",
" 977 | \n",
" 2002-09-04 | \n",
" -85.720509 | \n",
" -19.315577 | \n",
" 15.530183 | \n",
" -18.799975 | \n",
"
\n",
" \n",
" 978 | \n",
" 2002-09-05 | \n",
" -86.116354 | \n",
" -19.413728 | \n",
" 13.943714 | \n",
" -18.217563 | \n",
"
\n",
" \n",
" 979 | \n",
" 2002-09-06 | \n",
" -86.582680 | \n",
" -20.141059 | \n",
" 14.162898 | \n",
" -17.635551 | \n",
"
\n",
" \n",
" 980 | \n",
" 2002-09-07 | \n",
" -86.085200 | \n",
" -19.333936 | \n",
" 13.006658 | \n",
" -18.078151 | \n",
"
\n",
" \n",
" 981 | \n",
" 2002-09-08 | \n",
" -84.737067 | \n",
" -18.058932 | \n",
" 14.705133 | \n",
" -17.673837 | \n",
"
\n",
" \n",
" 982 | \n",
" 2002-09-09 | \n",
" -84.024475 | \n",
" -17.711860 | \n",
" 15.487204 | \n",
" -16.985294 | \n",
"
\n",
" \n",
" 983 | \n",
" 2002-09-10 | \n",
" -83.368774 | \n",
" -17.535428 | \n",
" 16.391717 | \n",
" -16.527879 | \n",
"
\n",
" \n",
" 984 | \n",
" 2002-09-11 | \n",
" -84.670374 | \n",
" -18.167918 | \n",
" 16.634557 | \n",
" -16.062619 | \n",
"
\n",
" \n",
" 985 | \n",
" 2002-09-12 | \n",
" -85.539085 | \n",
" -17.902050 | \n",
" 16.435134 | \n",
" -16.825358 | \n",
"
\n",
" \n",
" 986 | \n",
" 2002-09-13 | \n",
" -85.822989 | \n",
" -17.396826 | \n",
" 15.872258 | \n",
" -16.078469 | \n",
"
\n",
" \n",
" 987 | \n",
" 2002-09-14 | \n",
" -86.006952 | \n",
" -18.925765 | \n",
" 15.711982 | \n",
" -15.066963 | \n",
"
\n",
" \n",
" 988 | \n",
" 2002-09-15 | \n",
" -84.027412 | \n",
" -18.777929 | \n",
" 17.269961 | \n",
" -14.160437 | \n",
"
\n",
" \n",
" 989 | \n",
" 2002-09-16 | \n",
" -84.371619 | \n",
" -20.118414 | \n",
" 15.642104 | \n",
" -15.423790 | \n",
"
\n",
" \n",
" 990 | \n",
" 2002-09-17 | \n",
" -85.164808 | \n",
" -19.817076 | \n",
" 13.001907 | \n",
" -15.164830 | \n",
"
\n",
" \n",
" 991 | \n",
" 2002-09-18 | \n",
" -84.218649 | \n",
" -19.546377 | \n",
" 15.276487 | \n",
" -15.387791 | \n",
"
\n",
" \n",
" 992 | \n",
" 2002-09-19 | \n",
" -83.044203 | \n",
" -19.228630 | \n",
" 15.735577 | \n",
" -14.381051 | \n",
"
\n",
" \n",
" 993 | \n",
" 2002-09-20 | \n",
" -85.338968 | \n",
" -20.112770 | \n",
" 15.090700 | \n",
" -15.749164 | \n",
"
\n",
" \n",
" 994 | \n",
" 2002-09-21 | \n",
" -85.016944 | \n",
" -19.630807 | \n",
" 14.161316 | \n",
" -17.186947 | \n",
"
\n",
" \n",
" 995 | \n",
" 2002-09-22 | \n",
" -86.204378 | \n",
" -20.593557 | \n",
" 14.169823 | \n",
" -18.647361 | \n",
"
\n",
" \n",
" 996 | \n",
" 2002-09-23 | \n",
" -87.236501 | \n",
" -19.624129 | \n",
" 13.717445 | \n",
" -18.860626 | \n",
"
\n",
" \n",
" 997 | \n",
" 2002-09-24 | \n",
" -85.017293 | \n",
" -18.796620 | \n",
" 12.349552 | \n",
" -19.443635 | \n",
"
\n",
" \n",
" 998 | \n",
" 2002-09-25 | \n",
" -82.876770 | \n",
" -19.974321 | \n",
" 13.262328 | \n",
" -22.083206 | \n",
"
\n",
" \n",
" 999 | \n",
" 2002-09-26 | \n",
" -83.219573 | \n",
" -20.518671 | \n",
" 14.674183 | \n",
" -21.022386 | \n",
"
\n",
" \n",
"
\n",
"
1000 rows × 5 columns
\n",
"
"
],
"text/plain": [
" Unnamed: 0 A B C D\n",
"0 2000-01-01 -1.199395 1.387735 -1.798714 -0.633652\n",
"1 2000-01-02 -0.908396 1.301464 -2.751684 -0.756612\n",
"2 2000-01-03 -1.214637 1.722991 -2.878235 -1.103410\n",
"3 2000-01-04 -1.444817 1.526782 -1.434901 -0.878478\n",
"4 2000-01-05 -2.336566 0.792154 0.702733 -1.161456\n",
"5 2000-01-06 -1.141497 -0.123991 0.006881 -0.231437\n",
"6 2000-01-07 -0.903127 -0.106136 -0.105336 0.636556\n",
"7 2000-01-08 -0.363628 0.484380 0.604074 2.070136\n",
"8 2000-01-09 -2.381704 -1.328455 2.261637 -0.153917\n",
"9 2000-01-10 -2.071101 -1.512707 3.693099 -0.840669\n",
"10 2000-01-11 -2.565354 0.130182 1.843764 -1.024025\n",
"11 2000-01-12 -2.319995 -0.495654 1.502985 0.329354\n",
"12 2000-01-13 -3.597537 -0.941485 2.316260 0.292277\n",
"13 2000-01-14 -2.936507 -1.304660 1.623378 2.056469\n",
"14 2000-01-15 -3.434638 -0.557851 3.005293 2.351642\n",
"15 2000-01-16 -4.416633 -0.263922 3.217599 1.910207\n",
"16 2000-01-17 -3.620688 2.576329 3.666597 3.099960\n",
"17 2000-01-18 -2.781963 2.665356 4.350962 3.136723\n",
"18 2000-01-19 -3.103494 2.206880 2.800751 3.927562\n",
"19 2000-01-20 -4.747767 3.565885 3.328753 5.492230\n",
"20 2000-01-21 -3.959743 3.567764 0.668938 4.408660\n",
"21 2000-01-22 -4.307452 4.313845 0.268082 4.341462\n",
"22 2000-01-23 -4.820593 3.535090 -0.237196 3.653925\n",
"23 2000-01-24 -4.343503 3.313142 0.196462 3.228989\n",
"24 2000-01-25 -4.012244 2.340642 -0.239219 2.294877\n",
"25 2000-01-26 -5.584496 2.627301 -0.933413 2.826616\n",
"26 2000-01-27 -5.349654 1.431231 -1.747397 3.038043\n",
"27 2000-01-28 -7.274830 2.160869 -1.533647 3.606827\n",
"28 2000-01-29 -7.485718 1.098004 -1.062377 3.421171\n",
"29 2000-01-30 -6.304430 -0.640919 -1.360975 2.629127\n",
".. ... ... ... ... ...\n",
"970 2002-08-28 -91.161762 -18.283552 12.647657 -18.508526\n",
"971 2002-08-29 -89.573510 -18.504441 14.460417 -17.223896\n",
"972 2002-08-30 -88.798781 -16.765993 16.420495 -18.875415\n",
"973 2002-08-31 -88.407509 -17.379462 16.765101 -20.467720\n",
"974 2002-09-01 -89.670998 -16.868724 15.976802 -20.654874\n",
"975 2002-09-02 -87.923717 -18.770030 16.433847 -18.946714\n",
"976 2002-09-03 -85.777104 -20.938777 17.576698 -19.501421\n",
"977 2002-09-04 -85.720509 -19.315577 15.530183 -18.799975\n",
"978 2002-09-05 -86.116354 -19.413728 13.943714 -18.217563\n",
"979 2002-09-06 -86.582680 -20.141059 14.162898 -17.635551\n",
"980 2002-09-07 -86.085200 -19.333936 13.006658 -18.078151\n",
"981 2002-09-08 -84.737067 -18.058932 14.705133 -17.673837\n",
"982 2002-09-09 -84.024475 -17.711860 15.487204 -16.985294\n",
"983 2002-09-10 -83.368774 -17.535428 16.391717 -16.527879\n",
"984 2002-09-11 -84.670374 -18.167918 16.634557 -16.062619\n",
"985 2002-09-12 -85.539085 -17.902050 16.435134 -16.825358\n",
"986 2002-09-13 -85.822989 -17.396826 15.872258 -16.078469\n",
"987 2002-09-14 -86.006952 -18.925765 15.711982 -15.066963\n",
"988 2002-09-15 -84.027412 -18.777929 17.269961 -14.160437\n",
"989 2002-09-16 -84.371619 -20.118414 15.642104 -15.423790\n",
"990 2002-09-17 -85.164808 -19.817076 13.001907 -15.164830\n",
"991 2002-09-18 -84.218649 -19.546377 15.276487 -15.387791\n",
"992 2002-09-19 -83.044203 -19.228630 15.735577 -14.381051\n",
"993 2002-09-20 -85.338968 -20.112770 15.090700 -15.749164\n",
"994 2002-09-21 -85.016944 -19.630807 14.161316 -17.186947\n",
"995 2002-09-22 -86.204378 -20.593557 14.169823 -18.647361\n",
"996 2002-09-23 -87.236501 -19.624129 13.717445 -18.860626\n",
"997 2002-09-24 -85.017293 -18.796620 12.349552 -19.443635\n",
"998 2002-09-25 -82.876770 -19.974321 13.262328 -22.083206\n",
"999 2002-09-26 -83.219573 -20.518671 14.674183 -21.022386\n",
"\n",
"[1000 rows x 5 columns]"
]
},
"execution_count": 146,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.read_csv('temp_file_foo.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## HDF5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 写入 HDF 存储:"
]
},
{
"cell_type": "code",
"execution_count": 147,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df.to_hdf('temp_file_foo.h5', key='df')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 读取 HDF 存储:"
]
},
{
"cell_type": "code",
"execution_count": 148,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 2000-01-01 | \n",
" -1.199395 | \n",
" 1.387735 | \n",
" -1.798714 | \n",
" -0.633652 | \n",
"
\n",
" \n",
" 2000-01-02 | \n",
" -0.908396 | \n",
" 1.301464 | \n",
" -2.751684 | \n",
" -0.756612 | \n",
"
\n",
" \n",
" 2000-01-03 | \n",
" -1.214637 | \n",
" 1.722991 | \n",
" -2.878235 | \n",
" -1.103410 | \n",
"
\n",
" \n",
" 2000-01-04 | \n",
" -1.444817 | \n",
" 1.526782 | \n",
" -1.434901 | \n",
" -0.878478 | \n",
"
\n",
" \n",
" 2000-01-05 | \n",
" -2.336566 | \n",
" 0.792154 | \n",
" 0.702733 | \n",
" -1.161456 | \n",
"
\n",
" \n",
" 2000-01-06 | \n",
" -1.141497 | \n",
" -0.123991 | \n",
" 0.006881 | \n",
" -0.231437 | \n",
"
\n",
" \n",
" 2000-01-07 | \n",
" -0.903127 | \n",
" -0.106136 | \n",
" -0.105336 | \n",
" 0.636556 | \n",
"
\n",
" \n",
" 2000-01-08 | \n",
" -0.363628 | \n",
" 0.484380 | \n",
" 0.604074 | \n",
" 2.070136 | \n",
"
\n",
" \n",
" 2000-01-09 | \n",
" -2.381704 | \n",
" -1.328455 | \n",
" 2.261637 | \n",
" -0.153917 | \n",
"
\n",
" \n",
" 2000-01-10 | \n",
" -2.071101 | \n",
" -1.512707 | \n",
" 3.693099 | \n",
" -0.840669 | \n",
"
\n",
" \n",
" 2000-01-11 | \n",
" -2.565354 | \n",
" 0.130182 | \n",
" 1.843764 | \n",
" -1.024025 | \n",
"
\n",
" \n",
" 2000-01-12 | \n",
" -2.319995 | \n",
" -0.495654 | \n",
" 1.502985 | \n",
" 0.329354 | \n",
"
\n",
" \n",
" 2000-01-13 | \n",
" -3.597537 | \n",
" -0.941485 | \n",
" 2.316260 | \n",
" 0.292277 | \n",
"
\n",
" \n",
" 2000-01-14 | \n",
" -2.936507 | \n",
" -1.304660 | \n",
" 1.623378 | \n",
" 2.056469 | \n",
"
\n",
" \n",
" 2000-01-15 | \n",
" -3.434638 | \n",
" -0.557851 | \n",
" 3.005293 | \n",
" 2.351642 | \n",
"
\n",
" \n",
" 2000-01-16 | \n",
" -4.416633 | \n",
" -0.263922 | \n",
" 3.217599 | \n",
" 1.910207 | \n",
"
\n",
" \n",
" 2000-01-17 | \n",
" -3.620688 | \n",
" 2.576329 | \n",
" 3.666597 | \n",
" 3.099960 | \n",
"
\n",
" \n",
" 2000-01-18 | \n",
" -2.781963 | \n",
" 2.665356 | \n",
" 4.350962 | \n",
" 3.136723 | \n",
"
\n",
" \n",
" 2000-01-19 | \n",
" -3.103494 | \n",
" 2.206880 | \n",
" 2.800751 | \n",
" 3.927562 | \n",
"
\n",
" \n",
" 2000-01-20 | \n",
" -4.747767 | \n",
" 3.565885 | \n",
" 3.328753 | \n",
" 5.492230 | \n",
"
\n",
" \n",
" 2000-01-21 | \n",
" -3.959743 | \n",
" 3.567764 | \n",
" 0.668938 | \n",
" 4.408660 | \n",
"
\n",
" \n",
" 2000-01-22 | \n",
" -4.307452 | \n",
" 4.313845 | \n",
" 0.268082 | \n",
" 4.341462 | \n",
"
\n",
" \n",
" 2000-01-23 | \n",
" -4.820593 | \n",
" 3.535090 | \n",
" -0.237196 | \n",
" 3.653925 | \n",
"
\n",
" \n",
" 2000-01-24 | \n",
" -4.343503 | \n",
" 3.313142 | \n",
" 0.196462 | \n",
" 3.228989 | \n",
"
\n",
" \n",
" 2000-01-25 | \n",
" -4.012244 | \n",
" 2.340642 | \n",
" -0.239219 | \n",
" 2.294877 | \n",
"
\n",
" \n",
" 2000-01-26 | \n",
" -5.584496 | \n",
" 2.627301 | \n",
" -0.933413 | \n",
" 2.826616 | \n",
"
\n",
" \n",
" 2000-01-27 | \n",
" -5.349654 | \n",
" 1.431231 | \n",
" -1.747397 | \n",
" 3.038043 | \n",
"
\n",
" \n",
" 2000-01-28 | \n",
" -7.274830 | \n",
" 2.160869 | \n",
" -1.533647 | \n",
" 3.606827 | \n",
"
\n",
" \n",
" 2000-01-29 | \n",
" -7.485718 | \n",
" 1.098004 | \n",
" -1.062377 | \n",
" 3.421171 | \n",
"
\n",
" \n",
" 2000-01-30 | \n",
" -6.304430 | \n",
" -0.640919 | \n",
" -1.360975 | \n",
" 2.629127 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 2002-08-28 | \n",
" -91.161762 | \n",
" -18.283552 | \n",
" 12.647657 | \n",
" -18.508526 | \n",
"
\n",
" \n",
" 2002-08-29 | \n",
" -89.573510 | \n",
" -18.504441 | \n",
" 14.460417 | \n",
" -17.223896 | \n",
"
\n",
" \n",
" 2002-08-30 | \n",
" -88.798781 | \n",
" -16.765993 | \n",
" 16.420495 | \n",
" -18.875415 | \n",
"
\n",
" \n",
" 2002-08-31 | \n",
" -88.407509 | \n",
" -17.379462 | \n",
" 16.765101 | \n",
" -20.467720 | \n",
"
\n",
" \n",
" 2002-09-01 | \n",
" -89.670998 | \n",
" -16.868724 | \n",
" 15.976802 | \n",
" -20.654874 | \n",
"
\n",
" \n",
" 2002-09-02 | \n",
" -87.923717 | \n",
" -18.770030 | \n",
" 16.433847 | \n",
" -18.946714 | \n",
"
\n",
" \n",
" 2002-09-03 | \n",
" -85.777104 | \n",
" -20.938777 | \n",
" 17.576698 | \n",
" -19.501421 | \n",
"
\n",
" \n",
" 2002-09-04 | \n",
" -85.720509 | \n",
" -19.315577 | \n",
" 15.530183 | \n",
" -18.799975 | \n",
"
\n",
" \n",
" 2002-09-05 | \n",
" -86.116354 | \n",
" -19.413728 | \n",
" 13.943714 | \n",
" -18.217563 | \n",
"
\n",
" \n",
" 2002-09-06 | \n",
" -86.582680 | \n",
" -20.141059 | \n",
" 14.162898 | \n",
" -17.635551 | \n",
"
\n",
" \n",
" 2002-09-07 | \n",
" -86.085200 | \n",
" -19.333936 | \n",
" 13.006658 | \n",
" -18.078151 | \n",
"
\n",
" \n",
" 2002-09-08 | \n",
" -84.737067 | \n",
" -18.058932 | \n",
" 14.705133 | \n",
" -17.673837 | \n",
"
\n",
" \n",
" 2002-09-09 | \n",
" -84.024475 | \n",
" -17.711860 | \n",
" 15.487204 | \n",
" -16.985294 | \n",
"
\n",
" \n",
" 2002-09-10 | \n",
" -83.368774 | \n",
" -17.535428 | \n",
" 16.391717 | \n",
" -16.527879 | \n",
"
\n",
" \n",
" 2002-09-11 | \n",
" -84.670374 | \n",
" -18.167918 | \n",
" 16.634557 | \n",
" -16.062619 | \n",
"
\n",
" \n",
" 2002-09-12 | \n",
" -85.539085 | \n",
" -17.902050 | \n",
" 16.435134 | \n",
" -16.825358 | \n",
"
\n",
" \n",
" 2002-09-13 | \n",
" -85.822989 | \n",
" -17.396826 | \n",
" 15.872258 | \n",
" -16.078469 | \n",
"
\n",
" \n",
" 2002-09-14 | \n",
" -86.006952 | \n",
" -18.925765 | \n",
" 15.711982 | \n",
" -15.066963 | \n",
"
\n",
" \n",
" 2002-09-15 | \n",
" -84.027412 | \n",
" -18.777929 | \n",
" 17.269961 | \n",
" -14.160437 | \n",
"
\n",
" \n",
" 2002-09-16 | \n",
" -84.371619 | \n",
" -20.118414 | \n",
" 15.642104 | \n",
" -15.423790 | \n",
"
\n",
" \n",
" 2002-09-17 | \n",
" -85.164808 | \n",
" -19.817076 | \n",
" 13.001907 | \n",
" -15.164830 | \n",
"
\n",
" \n",
" 2002-09-18 | \n",
" -84.218649 | \n",
" -19.546377 | \n",
" 15.276487 | \n",
" -15.387791 | \n",
"
\n",
" \n",
" 2002-09-19 | \n",
" -83.044203 | \n",
" -19.228630 | \n",
" 15.735577 | \n",
" -14.381051 | \n",
"
\n",
" \n",
" 2002-09-20 | \n",
" -85.338968 | \n",
" -20.112770 | \n",
" 15.090700 | \n",
" -15.749164 | \n",
"
\n",
" \n",
" 2002-09-21 | \n",
" -85.016944 | \n",
" -19.630807 | \n",
" 14.161316 | \n",
" -17.186947 | \n",
"
\n",
" \n",
" 2002-09-22 | \n",
" -86.204378 | \n",
" -20.593557 | \n",
" 14.169823 | \n",
" -18.647361 | \n",
"
\n",
" \n",
" 2002-09-23 | \n",
" -87.236501 | \n",
" -19.624129 | \n",
" 13.717445 | \n",
" -18.860626 | \n",
"
\n",
" \n",
" 2002-09-24 | \n",
" -85.017293 | \n",
" -18.796620 | \n",
" 12.349553 | \n",
" -19.443635 | \n",
"
\n",
" \n",
" 2002-09-25 | \n",
" -82.876770 | \n",
" -19.974321 | \n",
" 13.262328 | \n",
" -22.083206 | \n",
"
\n",
" \n",
" 2002-09-26 | \n",
" -83.219573 | \n",
" -20.518671 | \n",
" 14.674183 | \n",
" -21.022386 | \n",
"
\n",
" \n",
"
\n",
"
1000 rows × 4 columns
\n",
"
"
],
"text/plain": [
" A B C D\n",
"2000-01-01 -1.199395 1.387735 -1.798714 -0.633652\n",
"2000-01-02 -0.908396 1.301464 -2.751684 -0.756612\n",
"2000-01-03 -1.214637 1.722991 -2.878235 -1.103410\n",
"2000-01-04 -1.444817 1.526782 -1.434901 -0.878478\n",
"2000-01-05 -2.336566 0.792154 0.702733 -1.161456\n",
"2000-01-06 -1.141497 -0.123991 0.006881 -0.231437\n",
"2000-01-07 -0.903127 -0.106136 -0.105336 0.636556\n",
"2000-01-08 -0.363628 0.484380 0.604074 2.070136\n",
"2000-01-09 -2.381704 -1.328455 2.261637 -0.153917\n",
"2000-01-10 -2.071101 -1.512707 3.693099 -0.840669\n",
"2000-01-11 -2.565354 0.130182 1.843764 -1.024025\n",
"2000-01-12 -2.319995 -0.495654 1.502985 0.329354\n",
"2000-01-13 -3.597537 -0.941485 2.316260 0.292277\n",
"2000-01-14 -2.936507 -1.304660 1.623378 2.056469\n",
"2000-01-15 -3.434638 -0.557851 3.005293 2.351642\n",
"2000-01-16 -4.416633 -0.263922 3.217599 1.910207\n",
"2000-01-17 -3.620688 2.576329 3.666597 3.099960\n",
"2000-01-18 -2.781963 2.665356 4.350962 3.136723\n",
"2000-01-19 -3.103494 2.206880 2.800751 3.927562\n",
"2000-01-20 -4.747767 3.565885 3.328753 5.492230\n",
"2000-01-21 -3.959743 3.567764 0.668938 4.408660\n",
"2000-01-22 -4.307452 4.313845 0.268082 4.341462\n",
"2000-01-23 -4.820593 3.535090 -0.237196 3.653925\n",
"2000-01-24 -4.343503 3.313142 0.196462 3.228989\n",
"2000-01-25 -4.012244 2.340642 -0.239219 2.294877\n",
"2000-01-26 -5.584496 2.627301 -0.933413 2.826616\n",
"2000-01-27 -5.349654 1.431231 -1.747397 3.038043\n",
"2000-01-28 -7.274830 2.160869 -1.533647 3.606827\n",
"2000-01-29 -7.485718 1.098004 -1.062377 3.421171\n",
"2000-01-30 -6.304430 -0.640919 -1.360975 2.629127\n",
"... ... ... ... ...\n",
"2002-08-28 -91.161762 -18.283552 12.647657 -18.508526\n",
"2002-08-29 -89.573510 -18.504441 14.460417 -17.223896\n",
"2002-08-30 -88.798781 -16.765993 16.420495 -18.875415\n",
"2002-08-31 -88.407509 -17.379462 16.765101 -20.467720\n",
"2002-09-01 -89.670998 -16.868724 15.976802 -20.654874\n",
"2002-09-02 -87.923717 -18.770030 16.433847 -18.946714\n",
"2002-09-03 -85.777104 -20.938777 17.576698 -19.501421\n",
"2002-09-04 -85.720509 -19.315577 15.530183 -18.799975\n",
"2002-09-05 -86.116354 -19.413728 13.943714 -18.217563\n",
"2002-09-06 -86.582680 -20.141059 14.162898 -17.635551\n",
"2002-09-07 -86.085200 -19.333936 13.006658 -18.078151\n",
"2002-09-08 -84.737067 -18.058932 14.705133 -17.673837\n",
"2002-09-09 -84.024475 -17.711860 15.487204 -16.985294\n",
"2002-09-10 -83.368774 -17.535428 16.391717 -16.527879\n",
"2002-09-11 -84.670374 -18.167918 16.634557 -16.062619\n",
"2002-09-12 -85.539085 -17.902050 16.435134 -16.825358\n",
"2002-09-13 -85.822989 -17.396826 15.872258 -16.078469\n",
"2002-09-14 -86.006952 -18.925765 15.711982 -15.066963\n",
"2002-09-15 -84.027412 -18.777929 17.269961 -14.160437\n",
"2002-09-16 -84.371619 -20.118414 15.642104 -15.423790\n",
"2002-09-17 -85.164808 -19.817076 13.001907 -15.164830\n",
"2002-09-18 -84.218649 -19.546377 15.276487 -15.387791\n",
"2002-09-19 -83.044203 -19.228630 15.735577 -14.381051\n",
"2002-09-20 -85.338968 -20.112770 15.090700 -15.749164\n",
"2002-09-21 -85.016944 -19.630807 14.161316 -17.186947\n",
"2002-09-22 -86.204378 -20.593557 14.169823 -18.647361\n",
"2002-09-23 -87.236501 -19.624129 13.717445 -18.860626\n",
"2002-09-24 -85.017293 -18.796620 12.349553 -19.443635\n",
"2002-09-25 -82.876770 -19.974321 13.262328 -22.083206\n",
"2002-09-26 -83.219573 -20.518671 14.674183 -21.022386\n",
"\n",
"[1000 rows x 4 columns]"
]
},
"execution_count": 148,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.read_hdf('temp_file_foo.h5', key='df')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Excel"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 写入 excel 文件:"
]
},
{
"cell_type": "code",
"execution_count": 149,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df.to_excel('temp_file_foo.xlsx', sheet_name='Sheet1')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 读取 excel 文件:"
]
},
{
"cell_type": "code",
"execution_count": 150,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
"
\n",
" \n",
" \n",
" \n",
" 2000-01-01 | \n",
" -1.199395 | \n",
" 1.387735 | \n",
" -1.798714 | \n",
" -0.633652 | \n",
"
\n",
" \n",
" 2000-01-02 | \n",
" -0.908396 | \n",
" 1.301464 | \n",
" -2.751684 | \n",
" -0.756612 | \n",
"
\n",
" \n",
" 2000-01-03 | \n",
" -1.214637 | \n",
" 1.722991 | \n",
" -2.878235 | \n",
" -1.103410 | \n",
"
\n",
" \n",
" 2000-01-04 | \n",
" -1.444817 | \n",
" 1.526782 | \n",
" -1.434901 | \n",
" -0.878478 | \n",
"
\n",
" \n",
" 2000-01-05 | \n",
" -2.336566 | \n",
" 0.792154 | \n",
" 0.702733 | \n",
" -1.161456 | \n",
"
\n",
" \n",
" 2000-01-06 | \n",
" -1.141497 | \n",
" -0.123991 | \n",
" 0.006881 | \n",
" -0.231437 | \n",
"
\n",
" \n",
" 2000-01-07 | \n",
" -0.903127 | \n",
" -0.106136 | \n",
" -0.105336 | \n",
" 0.636556 | \n",
"
\n",
" \n",
" 2000-01-08 | \n",
" -0.363628 | \n",
" 0.484380 | \n",
" 0.604074 | \n",
" 2.070136 | \n",
"
\n",
" \n",
" 2000-01-09 | \n",
" -2.381704 | \n",
" -1.328455 | \n",
" 2.261637 | \n",
" -0.153917 | \n",
"
\n",
" \n",
" 2000-01-10 | \n",
" -2.071101 | \n",
" -1.512707 | \n",
" 3.693099 | \n",
" -0.840669 | \n",
"
\n",
" \n",
" 2000-01-11 | \n",
" -2.565354 | \n",
" 0.130182 | \n",
" 1.843764 | \n",
" -1.024025 | \n",
"
\n",
" \n",
" 2000-01-12 | \n",
" -2.319995 | \n",
" -0.495654 | \n",
" 1.502985 | \n",
" 0.329354 | \n",
"
\n",
" \n",
" 2000-01-13 | \n",
" -3.597537 | \n",
" -0.941485 | \n",
" 2.316260 | \n",
" 0.292277 | \n",
"
\n",
" \n",
" 2000-01-14 | \n",
" -2.936507 | \n",
" -1.304660 | \n",
" 1.623378 | \n",
" 2.056469 | \n",
"
\n",
" \n",
" 2000-01-15 | \n",
" -3.434638 | \n",
" -0.557851 | \n",
" 3.005293 | \n",
" 2.351642 | \n",
"
\n",
" \n",
" 2000-01-16 | \n",
" -4.416633 | \n",
" -0.263922 | \n",
" 3.217599 | \n",
" 1.910207 | \n",
"
\n",
" \n",
" 2000-01-17 | \n",
" -3.620688 | \n",
" 2.576329 | \n",
" 3.666597 | \n",
" 3.099960 | \n",
"
\n",
" \n",
" 2000-01-18 | \n",
" -2.781963 | \n",
" 2.665356 | \n",
" 4.350962 | \n",
" 3.136723 | \n",
"
\n",
" \n",
" 2000-01-19 | \n",
" -3.103494 | \n",
" 2.206880 | \n",
" 2.800751 | \n",
" 3.927562 | \n",
"
\n",
" \n",
" 2000-01-20 | \n",
" -4.747767 | \n",
" 3.565885 | \n",
" 3.328753 | \n",
" 5.492230 | \n",
"
\n",
" \n",
" 2000-01-21 | \n",
" -3.959743 | \n",
" 3.567764 | \n",
" 0.668938 | \n",
" 4.408660 | \n",
"
\n",
" \n",
" 2000-01-22 | \n",
" -4.307452 | \n",
" 4.313845 | \n",
" 0.268082 | \n",
" 4.341462 | \n",
"
\n",
" \n",
" 2000-01-23 | \n",
" -4.820593 | \n",
" 3.535090 | \n",
" -0.237196 | \n",
" 3.653925 | \n",
"
\n",
" \n",
" 2000-01-24 | \n",
" -4.343503 | \n",
" 3.313142 | \n",
" 0.196462 | \n",
" 3.228989 | \n",
"
\n",
" \n",
" 2000-01-25 | \n",
" -4.012244 | \n",
" 2.340642 | \n",
" -0.239219 | \n",
" 2.294877 | \n",
"
\n",
" \n",
" 2000-01-26 | \n",
" -5.584496 | \n",
" 2.627301 | \n",
" -0.933413 | \n",
" 2.826616 | \n",
"
\n",
" \n",
" 2000-01-27 | \n",
" -5.349654 | \n",
" 1.431231 | \n",
" -1.747397 | \n",
" 3.038043 | \n",
"
\n",
" \n",
" 2000-01-28 | \n",
" -7.274830 | \n",
" 2.160869 | \n",
" -1.533647 | \n",
" 3.606827 | \n",
"
\n",
" \n",
" 2000-01-29 | \n",
" -7.485718 | \n",
" 1.098004 | \n",
" -1.062377 | \n",
" 3.421171 | \n",
"
\n",
" \n",
" 2000-01-30 | \n",
" -6.304430 | \n",
" -0.640919 | \n",
" -1.360975 | \n",
" 2.629127 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 2002-08-28 | \n",
" -91.161762 | \n",
" -18.283552 | \n",
" 12.647657 | \n",
" -18.508526 | \n",
"
\n",
" \n",
" 2002-08-29 | \n",
" -89.573510 | \n",
" -18.504441 | \n",
" 14.460417 | \n",
" -17.223896 | \n",
"
\n",
" \n",
" 2002-08-30 | \n",
" -88.798781 | \n",
" -16.765993 | \n",
" 16.420495 | \n",
" -18.875415 | \n",
"
\n",
" \n",
" 2002-08-31 | \n",
" -88.407509 | \n",
" -17.379462 | \n",
" 16.765101 | \n",
" -20.467720 | \n",
"
\n",
" \n",
" 2002-09-01 | \n",
" -89.670998 | \n",
" -16.868724 | \n",
" 15.976802 | \n",
" -20.654874 | \n",
"
\n",
" \n",
" 2002-09-02 | \n",
" -87.923717 | \n",
" -18.770030 | \n",
" 16.433847 | \n",
" -18.946714 | \n",
"
\n",
" \n",
" 2002-09-03 | \n",
" -85.777104 | \n",
" -20.938777 | \n",
" 17.576698 | \n",
" -19.501421 | \n",
"
\n",
" \n",
" 2002-09-04 | \n",
" -85.720509 | \n",
" -19.315577 | \n",
" 15.530183 | \n",
" -18.799975 | \n",
"
\n",
" \n",
" 2002-09-05 | \n",
" -86.116354 | \n",
" -19.413728 | \n",
" 13.943714 | \n",
" -18.217563 | \n",
"
\n",
" \n",
" 2002-09-06 | \n",
" -86.582680 | \n",
" -20.141059 | \n",
" 14.162898 | \n",
" -17.635551 | \n",
"
\n",
" \n",
" 2002-09-07 | \n",
" -86.085200 | \n",
" -19.333936 | \n",
" 13.006658 | \n",
" -18.078151 | \n",
"
\n",
" \n",
" 2002-09-08 | \n",
" -84.737067 | \n",
" -18.058932 | \n",
" 14.705133 | \n",
" -17.673837 | \n",
"
\n",
" \n",
" 2002-09-09 | \n",
" -84.024475 | \n",
" -17.711860 | \n",
" 15.487204 | \n",
" -16.985294 | \n",
"
\n",
" \n",
" 2002-09-10 | \n",
" -83.368774 | \n",
" -17.535428 | \n",
" 16.391717 | \n",
" -16.527879 | \n",
"
\n",
" \n",
" 2002-09-11 | \n",
" -84.670374 | \n",
" -18.167918 | \n",
" 16.634557 | \n",
" -16.062619 | \n",
"
\n",
" \n",
" 2002-09-12 | \n",
" -85.539085 | \n",
" -17.902050 | \n",
" 16.435134 | \n",
" -16.825358 | \n",
"
\n",
" \n",
" 2002-09-13 | \n",
" -85.822989 | \n",
" -17.396826 | \n",
" 15.872258 | \n",
" -16.078469 | \n",
"
\n",
" \n",
" 2002-09-14 | \n",
" -86.006952 | \n",
" -18.925765 | \n",
" 15.711982 | \n",
" -15.066963 | \n",
"
\n",
" \n",
" 2002-09-15 | \n",
" -84.027412 | \n",
" -18.777929 | \n",
" 17.269961 | \n",
" -14.160437 | \n",
"
\n",
" \n",
" 2002-09-16 | \n",
" -84.371619 | \n",
" -20.118414 | \n",
" 15.642104 | \n",
" -15.423790 | \n",
"
\n",
" \n",
" 2002-09-17 | \n",
" -85.164808 | \n",
" -19.817076 | \n",
" 13.001907 | \n",
" -15.164830 | \n",
"
\n",
" \n",
" 2002-09-18 | \n",
" -84.218649 | \n",
" -19.546377 | \n",
" 15.276487 | \n",
" -15.387791 | \n",
"
\n",
" \n",
" 2002-09-19 | \n",
" -83.044203 | \n",
" -19.228630 | \n",
" 15.735577 | \n",
" -14.381051 | \n",
"
\n",
" \n",
" 2002-09-20 | \n",
" -85.338968 | \n",
" -20.112770 | \n",
" 15.090700 | \n",
" -15.749164 | \n",
"
\n",
" \n",
" 2002-09-21 | \n",
" -85.016944 | \n",
" -19.630807 | \n",
" 14.161316 | \n",
" -17.186947 | \n",
"
\n",
" \n",
" 2002-09-22 | \n",
" -86.204378 | \n",
" -20.593557 | \n",
" 14.169823 | \n",
" -18.647361 | \n",
"
\n",
" \n",
" 2002-09-23 | \n",
" -87.236501 | \n",
" -19.624129 | \n",
" 13.717445 | \n",
" -18.860626 | \n",
"
\n",
" \n",
" 2002-09-24 | \n",
" -85.017293 | \n",
" -18.796620 | \n",
" 12.349553 | \n",
" -19.443635 | \n",
"
\n",
" \n",
" 2002-09-25 | \n",
" -82.876770 | \n",
" -19.974321 | \n",
" 13.262328 | \n",
" -22.083206 | \n",
"
\n",
" \n",
" 2002-09-26 | \n",
" -83.219573 | \n",
" -20.518671 | \n",
" 14.674183 | \n",
" -21.022386 | \n",
"
\n",
" \n",
"
\n",
"
1000 rows × 4 columns
\n",
"
"
],
"text/plain": [
" A B C D\n",
"2000-01-01 -1.199395 1.387735 -1.798714 -0.633652\n",
"2000-01-02 -0.908396 1.301464 -2.751684 -0.756612\n",
"2000-01-03 -1.214637 1.722991 -2.878235 -1.103410\n",
"2000-01-04 -1.444817 1.526782 -1.434901 -0.878478\n",
"2000-01-05 -2.336566 0.792154 0.702733 -1.161456\n",
"2000-01-06 -1.141497 -0.123991 0.006881 -0.231437\n",
"2000-01-07 -0.903127 -0.106136 -0.105336 0.636556\n",
"2000-01-08 -0.363628 0.484380 0.604074 2.070136\n",
"2000-01-09 -2.381704 -1.328455 2.261637 -0.153917\n",
"2000-01-10 -2.071101 -1.512707 3.693099 -0.840669\n",
"2000-01-11 -2.565354 0.130182 1.843764 -1.024025\n",
"2000-01-12 -2.319995 -0.495654 1.502985 0.329354\n",
"2000-01-13 -3.597537 -0.941485 2.316260 0.292277\n",
"2000-01-14 -2.936507 -1.304660 1.623378 2.056469\n",
"2000-01-15 -3.434638 -0.557851 3.005293 2.351642\n",
"2000-01-16 -4.416633 -0.263922 3.217599 1.910207\n",
"2000-01-17 -3.620688 2.576329 3.666597 3.099960\n",
"2000-01-18 -2.781963 2.665356 4.350962 3.136723\n",
"2000-01-19 -3.103494 2.206880 2.800751 3.927562\n",
"2000-01-20 -4.747767 3.565885 3.328753 5.492230\n",
"2000-01-21 -3.959743 3.567764 0.668938 4.408660\n",
"2000-01-22 -4.307452 4.313845 0.268082 4.341462\n",
"2000-01-23 -4.820593 3.535090 -0.237196 3.653925\n",
"2000-01-24 -4.343503 3.313142 0.196462 3.228989\n",
"2000-01-25 -4.012244 2.340642 -0.239219 2.294877\n",
"2000-01-26 -5.584496 2.627301 -0.933413 2.826616\n",
"2000-01-27 -5.349654 1.431231 -1.747397 3.038043\n",
"2000-01-28 -7.274830 2.160869 -1.533647 3.606827\n",
"2000-01-29 -7.485718 1.098004 -1.062377 3.421171\n",
"2000-01-30 -6.304430 -0.640919 -1.360975 2.629127\n",
"... ... ... ... ...\n",
"2002-08-28 -91.161762 -18.283552 12.647657 -18.508526\n",
"2002-08-29 -89.573510 -18.504441 14.460417 -17.223896\n",
"2002-08-30 -88.798781 -16.765993 16.420495 -18.875415\n",
"2002-08-31 -88.407509 -17.379462 16.765101 -20.467720\n",
"2002-09-01 -89.670998 -16.868724 15.976802 -20.654874\n",
"2002-09-02 -87.923717 -18.770030 16.433847 -18.946714\n",
"2002-09-03 -85.777104 -20.938777 17.576698 -19.501421\n",
"2002-09-04 -85.720509 -19.315577 15.530183 -18.799975\n",
"2002-09-05 -86.116354 -19.413728 13.943714 -18.217563\n",
"2002-09-06 -86.582680 -20.141059 14.162898 -17.635551\n",
"2002-09-07 -86.085200 -19.333936 13.006658 -18.078151\n",
"2002-09-08 -84.737067 -18.058932 14.705133 -17.673837\n",
"2002-09-09 -84.024475 -17.711860 15.487204 -16.985294\n",
"2002-09-10 -83.368774 -17.535428 16.391717 -16.527879\n",
"2002-09-11 -84.670374 -18.167918 16.634557 -16.062619\n",
"2002-09-12 -85.539085 -17.902050 16.435134 -16.825358\n",
"2002-09-13 -85.822989 -17.396826 15.872258 -16.078469\n",
"2002-09-14 -86.006952 -18.925765 15.711982 -15.066963\n",
"2002-09-15 -84.027412 -18.777929 17.269961 -14.160437\n",
"2002-09-16 -84.371619 -20.118414 15.642104 -15.423790\n",
"2002-09-17 -85.164808 -19.817076 13.001907 -15.164830\n",
"2002-09-18 -84.218649 -19.546377 15.276487 -15.387791\n",
"2002-09-19 -83.044203 -19.228630 15.735577 -14.381051\n",
"2002-09-20 -85.338968 -20.112770 15.090700 -15.749164\n",
"2002-09-21 -85.016944 -19.630807 14.161316 -17.186947\n",
"2002-09-22 -86.204378 -20.593557 14.169823 -18.647361\n",
"2002-09-23 -87.236501 -19.624129 13.717445 -18.860626\n",
"2002-09-24 -85.017293 -18.796620 12.349553 -19.443635\n",
"2002-09-25 -82.876770 -19.974321 13.262328 -22.083206\n",
"2002-09-26 -83.219573 -20.518671 14.674183 -21.022386\n",
"\n",
"[1000 rows x 4 columns]"
]
},
"execution_count": 150,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.read_excel('temp_file_foo.xlsx', sheetname='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.13"
}
},
"nbformat": 4,
"nbformat_minor": 2
}