{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Pandas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language.\n", "\n", "Library documentation: http://pandas.pydata.org/" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### General" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0 1\n", "1 3\n", "2 5\n", "3 NaN\n", "4 6\n", "5 8\n", "dtype: float64" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# create a series\n", "s = pd.Series([1,3,5,np.nan,6,8])\n", "s" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
2013-01-01 0.205240 0.527603 0.610052 0.469292
2013-01-02 0.818113-0.894390-1.602831 0.862170
2013-01-03-1.462109 0.483201-1.044973-0.534227
2013-01-04 0.719197-0.499809 1.145788-0.809526
2013-01-05-1.161051-0.115774-0.624413 0.474422
2013-01-06 0.000782 0.146544 0.033628-0.419772
\n", "
" ], "text/plain": [ " A B C D\n", "2013-01-01 0.205240 0.527603 0.610052 0.469292\n", "2013-01-02 0.818113 -0.894390 -1.602831 0.862170\n", "2013-01-03 -1.462109 0.483201 -1.044973 -0.534227\n", "2013-01-04 0.719197 -0.499809 1.145788 -0.809526\n", "2013-01-05 -1.161051 -0.115774 -0.624413 0.474422\n", "2013-01-06 0.000782 0.146544 0.033628 -0.419772" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# create a data frame\n", "dates = pd.date_range('20130101',periods=6)\n", "df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))\n", "df" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCDE
0 12013-01-02 1 3 foo
1 12013-01-02 1 3 foo
2 12013-01-02 1 3 foo
3 12013-01-02 1 3 foo
\n", "
" ], "text/plain": [ " A B C D E\n", "0 1 2013-01-02 1 3 foo\n", "1 1 2013-01-02 1 3 foo\n", "2 1 2013-01-02 1 3 foo\n", "3 1 2013-01-02 1 3 foo" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# another way to create a data frame\n", "df2 = pd.DataFrame(\n", " { 'A' : 1.,\n", " 'B' : pd.Timestamp('20130102'),\n", " 'C' : pd.Series(1,index=list(range(4)),dtype='float32'),\n", " 'D' : np.array([3] * 4,dtype='int32'),\n", " 'E' : 'foo' })\n", "df2" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "A float64\n", "B datetime64[ns]\n", "C float32\n", "D int32\n", "E object\n", "dtype: object" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df2.dtypes" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
2013-01-01 0.205240 0.527603 0.610052 0.469292
2013-01-02 0.818113-0.894390-1.602831 0.862170
2013-01-03-1.462109 0.483201-1.044973-0.534227
2013-01-04 0.719197-0.499809 1.145788-0.809526
2013-01-05-1.161051-0.115774-0.624413 0.474422
\n", "
" ], "text/plain": [ " A B C D\n", "2013-01-01 0.205240 0.527603 0.610052 0.469292\n", "2013-01-02 0.818113 -0.894390 -1.602831 0.862170\n", "2013-01-03 -1.462109 0.483201 -1.044973 -0.534227\n", "2013-01-04 0.719197 -0.499809 1.145788 -0.809526\n", "2013-01-05 -1.161051 -0.115774 -0.624413 0.474422" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "\n", "[2013-01-01, ..., 2013-01-06]\n", "Length: 6, Freq: D, Timezone: None" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.index" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Index([u'A', u'B', u'C', u'D'], dtype='object')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.columns" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 2.05240362e-01, 5.27602841e-01, 6.10052272e-01,\n", " 4.69292270e-01],\n", " [ 8.18112883e-01, -8.94389618e-01, -1.60283098e+00,\n", " 8.62169894e-01],\n", " [ -1.46210940e+00, 4.83201108e-01, -1.04497297e+00,\n", " -5.34226832e-01],\n", " [ 7.19196807e-01, -4.99809344e-01, 1.14578824e+00,\n", " -8.09525609e-01],\n", " [ -1.16105080e+00, -1.15774007e-01, -6.24412514e-01,\n", " 4.74421893e-01],\n", " [ 7.82298420e-04, 1.46543576e-01, 3.36282758e-02,\n", " -4.19771560e-01]])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.values" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
count 6.000000 6.000000 6.000000 6.000000
mean-0.146638-0.058771-0.247125 0.007060
std 0.957650 0.561381 1.036400 0.679012
min-1.462109-0.894390-1.602831-0.809526
25%-0.870593-0.403801-0.939833-0.505613
50% 0.103011 0.015385-0.295392 0.024760
75% 0.590708 0.399037 0.465946 0.473139
max 0.818113 0.527603 1.145788 0.862170
\n", "
" ], "text/plain": [ " A B C D\n", "count 6.000000 6.000000 6.000000 6.000000\n", "mean -0.146638 -0.058771 -0.247125 0.007060\n", "std 0.957650 0.561381 1.036400 0.679012\n", "min -1.462109 -0.894390 -1.602831 -0.809526\n", "25% -0.870593 -0.403801 -0.939833 -0.505613\n", "50% 0.103011 0.015385 -0.295392 0.024760\n", "75% 0.590708 0.399037 0.465946 0.473139\n", "max 0.818113 0.527603 1.145788 0.862170" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# quick data summary\n", "df.describe()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2013-01-01 00:00:002013-01-02 00:00:002013-01-03 00:00:002013-01-04 00:00:002013-01-05 00:00:002013-01-06 00:00:00
A 0.205240 0.818113-1.462109 0.719197-1.161051 0.000782
B 0.527603-0.894390 0.483201-0.499809-0.115774 0.146544
C 0.610052-1.602831-1.044973 1.145788-0.624413 0.033628
D 0.469292 0.862170-0.534227-0.809526 0.474422-0.419772
\n", "
" ], "text/plain": [ " 2013-01-01 2013-01-02 2013-01-03 2013-01-04 2013-01-05 2013-01-06\n", "A 0.205240 0.818113 -1.462109 0.719197 -1.161051 0.000782\n", "B 0.527603 -0.894390 0.483201 -0.499809 -0.115774 0.146544\n", "C 0.610052 -1.602831 -1.044973 1.145788 -0.624413 0.033628\n", "D 0.469292 0.862170 -0.534227 -0.809526 0.474422 -0.419772" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.T" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DCBA
2013-01-01 0.469292 0.610052 0.527603 0.205240
2013-01-02 0.862170-1.602831-0.894390 0.818113
2013-01-03-0.534227-1.044973 0.483201-1.462109
2013-01-04-0.809526 1.145788-0.499809 0.719197
2013-01-05 0.474422-0.624413-0.115774-1.161051
2013-01-06-0.419772 0.033628 0.146544 0.000782
\n", "
" ], "text/plain": [ " D C B A\n", "2013-01-01 0.469292 0.610052 0.527603 0.205240\n", "2013-01-02 0.862170 -1.602831 -0.894390 0.818113\n", "2013-01-03 -0.534227 -1.044973 0.483201 -1.462109\n", "2013-01-04 -0.809526 1.145788 -0.499809 0.719197\n", "2013-01-05 0.474422 -0.624413 -0.115774 -1.161051\n", "2013-01-06 -0.419772 0.033628 0.146544 0.000782" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# axis 0 is index, axis 1 is columns\n", "df.sort_index(axis=1, ascending=False)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
2013-01-02 0.818113-0.894390-1.602831 0.862170
2013-01-04 0.719197-0.499809 1.145788-0.809526
2013-01-05-1.161051-0.115774-0.624413 0.474422
2013-01-06 0.000782 0.146544 0.033628-0.419772
2013-01-03-1.462109 0.483201-1.044973-0.534227
2013-01-01 0.205240 0.527603 0.610052 0.469292
\n", "
" ], "text/plain": [ " A B C D\n", "2013-01-02 0.818113 -0.894390 -1.602831 0.862170\n", "2013-01-04 0.719197 -0.499809 1.145788 -0.809526\n", "2013-01-05 -1.161051 -0.115774 -0.624413 0.474422\n", "2013-01-06 0.000782 0.146544 0.033628 -0.419772\n", "2013-01-03 -1.462109 0.483201 -1.044973 -0.534227\n", "2013-01-01 0.205240 0.527603 0.610052 0.469292" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# can sort by values too\n", "df.sort(columns='B')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Selection" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2013-01-01 0.205240\n", "2013-01-02 0.818113\n", "2013-01-03 -1.462109\n", "2013-01-04 0.719197\n", "2013-01-05 -1.161051\n", "2013-01-06 0.000782\n", "Freq: D, Name: A, dtype: float64" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# select a column (yields a series)\n", "df['A']" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2013-01-01 0.205240\n", "2013-01-02 0.818113\n", "2013-01-03 -1.462109\n", "2013-01-04 0.719197\n", "2013-01-05 -1.161051\n", "2013-01-06 0.000782\n", "Freq: D, Name: A, dtype: float64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# column names also attached to the object\n", "df.A" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
2013-01-01 0.205240 0.527603 0.610052 0.469292
2013-01-02 0.818113-0.894390-1.602831 0.862170
2013-01-03-1.462109 0.483201-1.044973-0.534227
\n", "
" ], "text/plain": [ " A B C D\n", "2013-01-01 0.205240 0.527603 0.610052 0.469292\n", "2013-01-02 0.818113 -0.894390 -1.602831 0.862170\n", "2013-01-03 -1.462109 0.483201 -1.044973 -0.534227" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# slicing works\n", "df[0:3]" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
2013-01-02 0.818113-0.894390-1.602831 0.862170
2013-01-03-1.462109 0.483201-1.044973-0.534227
2013-01-04 0.719197-0.499809 1.145788-0.809526
\n", "
" ], "text/plain": [ " A B C D\n", "2013-01-02 0.818113 -0.894390 -1.602831 0.862170\n", "2013-01-03 -1.462109 0.483201 -1.044973 -0.534227\n", "2013-01-04 0.719197 -0.499809 1.145788 -0.809526" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['20130102':'20130104']" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "A 0.205240\n", "B 0.527603\n", "C 0.610052\n", "D 0.469292\n", "Name: 2013-01-01 00:00:00, dtype: float64" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# cross-section using a label\n", "df.loc[dates[0]]" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.20524036189008577" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# getting a scalar value\n", "df.loc[dates[0], 'A']" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "A 0.719197\n", "B -0.499809\n", "C 1.145788\n", "D -0.809526\n", "Name: 2013-01-04 00:00:00, dtype: float64" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# select via position\n", "df.iloc[3]" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
AB
2013-01-04 0.719197-0.499809
2013-01-05-1.161051-0.115774
\n", "
" ], "text/plain": [ " A B\n", "2013-01-04 0.719197 -0.499809\n", "2013-01-05 -1.161051 -0.115774" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iloc[3:5,0:2]" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BC
2013-01-01 0.527603 0.610052
2013-01-02-0.894390-1.602831
2013-01-03 0.483201-1.044973
2013-01-04-0.499809 1.145788
2013-01-05-0.115774-0.624413
2013-01-06 0.146544 0.033628
\n", "
" ], "text/plain": [ " B C\n", "2013-01-01 0.527603 0.610052\n", "2013-01-02 -0.894390 -1.602831\n", "2013-01-03 0.483201 -1.044973\n", "2013-01-04 -0.499809 1.145788\n", "2013-01-05 -0.115774 -0.624413\n", "2013-01-06 0.146544 0.033628" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# column slicing\n", "df.iloc[:,1:3]" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "-0.89438961765370562" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get a value by index\n", "df.iloc[1,1]" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
2013-01-01 0.205240 0.527603 0.610052 0.469292
2013-01-02 0.818113-0.894390-1.602831 0.862170
2013-01-04 0.719197-0.499809 1.145788-0.809526
2013-01-06 0.000782 0.146544 0.033628-0.419772
\n", "
" ], "text/plain": [ " A B C D\n", "2013-01-01 0.205240 0.527603 0.610052 0.469292\n", "2013-01-02 0.818113 -0.894390 -1.602831 0.862170\n", "2013-01-04 0.719197 -0.499809 1.145788 -0.809526\n", "2013-01-06 0.000782 0.146544 0.033628 -0.419772" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# boolean indexing\n", "df[df.A > 0]" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
2013-01-01 0.205240 0.527603 0.610052 0.469292
2013-01-02 0.818113 NaN NaN 0.862170
2013-01-03 NaN 0.483201 NaN NaN
2013-01-04 0.719197 NaN 1.145788 NaN
2013-01-05 NaN NaN NaN 0.474422
2013-01-06 0.000782 0.146544 0.033628 NaN
\n", "
" ], "text/plain": [ " A B C D\n", "2013-01-01 0.205240 0.527603 0.610052 0.469292\n", "2013-01-02 0.818113 NaN NaN 0.862170\n", "2013-01-03 NaN 0.483201 NaN NaN\n", "2013-01-04 0.719197 NaN 1.145788 NaN\n", "2013-01-05 NaN NaN NaN 0.474422\n", "2013-01-06 0.000782 0.146544 0.033628 NaN" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df > 0]" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCDE
2013-01-03-1.462109 0.483201-1.044973-0.534227 two
2013-01-05-1.161051-0.115774-0.624413 0.474422 four
\n", "
" ], "text/plain": [ " A B C D E\n", "2013-01-03 -1.462109 0.483201 -1.044973 -0.534227 two\n", "2013-01-05 -1.161051 -0.115774 -0.624413 0.474422 four" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# filtering\n", "df3 = df.copy()\n", "df3['E'] = ['one', 'one', 'two', 'three', 'four', 'three']\n", "df3[df3['E'].isin(['two', 'four'])]" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
2013-01-01 0.000000 0.000000 0.610052 5
2013-01-02 0.818113-0.894390-1.602831 5
2013-01-03-1.462109 0.483201-1.044973 5
2013-01-04 0.719197-0.499809 1.145788 5
2013-01-05-1.161051-0.115774-0.624413 5
2013-01-06 0.000782 0.146544 0.033628 5
\n", "
" ], "text/plain": [ " A B C D\n", "2013-01-01 0.000000 0.000000 0.610052 5\n", "2013-01-02 0.818113 -0.894390 -1.602831 5\n", "2013-01-03 -1.462109 0.483201 -1.044973 5\n", "2013-01-04 0.719197 -0.499809 1.145788 5\n", "2013-01-05 -1.161051 -0.115774 -0.624413 5\n", "2013-01-06 0.000782 0.146544 0.033628 5" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# setting examples\n", "df.at[dates[0],'A'] = 0\n", "df.iat[0,1] = 0\n", "df.loc[:, 'D'] = np.array([5] * len(df))\n", "df" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCDE
2013-01-01 0.000000 0.000000 0.610052 5 1
2013-01-02 0.818113-0.894390-1.602831 5 1
2013-01-03-1.462109 0.483201-1.044973 5NaN
2013-01-04 0.719197-0.499809 1.145788 5NaN
\n", "
" ], "text/plain": [ " A B C D E\n", "2013-01-01 0.000000 0.000000 0.610052 5 1\n", "2013-01-02 0.818113 -0.894390 -1.602831 5 1\n", "2013-01-03 -1.462109 0.483201 -1.044973 5 NaN\n", "2013-01-04 0.719197 -0.499809 1.145788 5 NaN" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# dealing with missing data\n", "df4 = df.reindex(index=dates[0:4],columns=list(df.columns) + ['E'])\n", "df4.loc[dates[0]:dates[1],'E'] = 1\n", "df4" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCDE
2013-01-01 0.000000 0.00000 0.610052 5 1
2013-01-02 0.818113-0.89439-1.602831 5 1
\n", "
" ], "text/plain": [ " A B C D E\n", "2013-01-01 0.000000 0.00000 0.610052 5 1\n", "2013-01-02 0.818113 -0.89439 -1.602831 5 1" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# drop rows with missing data\n", "df4.dropna(how='any')" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCDE
2013-01-01 0.000000 0.000000 0.610052 5 1
2013-01-02 0.818113-0.894390-1.602831 5 1
2013-01-03-1.462109 0.483201-1.044973 5 5
2013-01-04 0.719197-0.499809 1.145788 5 5
\n", "
" ], "text/plain": [ " A B C D E\n", "2013-01-01 0.000000 0.000000 0.610052 5 1\n", "2013-01-02 0.818113 -0.894390 -1.602831 5 1\n", "2013-01-03 -1.462109 0.483201 -1.044973 5 5\n", "2013-01-04 0.719197 -0.499809 1.145788 5 5" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# fill missing data\n", "df4.fillna(value=5)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCDE
2013-01-01 False False False False False
2013-01-02 False False False False False
2013-01-03 False False False False True
2013-01-04 False False False False True
\n", "
" ], "text/plain": [ " A B C D E\n", "2013-01-01 False False False False False\n", "2013-01-02 False False False False False\n", "2013-01-03 False False False False True\n", "2013-01-04 False False False False True" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# boolean mask for nan values\n", "pd.isnull(df4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Operations" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "A -0.180845\n", "B -0.146705\n", "C -0.247125\n", "D 5.000000\n", "dtype: float64" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.mean()" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2013-01-01 1.402513\n", "2013-01-02 0.830223\n", "2013-01-03 0.744030\n", "2013-01-04 1.591294\n", "2013-01-05 0.774691\n", "2013-01-06 1.295239\n", "Freq: D, dtype: float64" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# pivot the mean calculation\n", "df.mean(1)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
2013-01-01 NaN NaN NaNNaN
2013-01-02 NaN NaN NaNNaN
2013-01-03-2.462109-0.516799-2.044973 4
2013-01-04-2.280803-3.499809-1.854212 2
2013-01-05-6.161051-5.115774-5.624413 0
2013-01-06 NaN NaN NaNNaN
\n", "
" ], "text/plain": [ " A B C D\n", "2013-01-01 NaN NaN NaN NaN\n", "2013-01-02 NaN NaN NaN NaN\n", "2013-01-03 -2.462109 -0.516799 -2.044973 4\n", "2013-01-04 -2.280803 -3.499809 -1.854212 2\n", "2013-01-05 -6.161051 -5.115774 -5.624413 0\n", "2013-01-06 NaN NaN NaN NaN" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# aligning objects with different dimensions\n", "s = pd.Series([1,3,5,np.nan,6,8],index=dates).shift(2)\n", "df.sub(s,axis='index')" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
2013-01-01 0.000000 0.000000 0.610052 5
2013-01-02 0.818113-0.894390-0.992779 10
2013-01-03-0.643997-0.411189-2.037752 15
2013-01-04 0.075200-0.910998-0.891963 20
2013-01-05-1.085851-1.026772-1.516376 25
2013-01-06-1.085068-0.880228-1.482748 30
\n", "
" ], "text/plain": [ " A B C D\n", "2013-01-01 0.000000 0.000000 0.610052 5\n", "2013-01-02 0.818113 -0.894390 -0.992779 10\n", "2013-01-03 -0.643997 -0.411189 -2.037752 15\n", "2013-01-04 0.075200 -0.910998 -0.891963 20\n", "2013-01-05 -1.085851 -1.026772 -1.516376 25\n", "2013-01-06 -1.085068 -0.880228 -1.482748 30" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# applying functions\n", "df.apply(np.cumsum)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "A 2.280222\n", "B 1.377591\n", "C 2.748619\n", "D 0.000000\n", "dtype: float64" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.apply(lambda x: x.max() - x.min())" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "4 3\n", "6 2\n", "1 2\n", "0 2\n", "5 1\n", "dtype: int64" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# simple count aggregation\n", "s = pd.Series(np.random.randint(0,7,size=10))\n", "s.value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Merging / Grouping / Shaping" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123
0-0.006589-1.232048-0.147323 0.709050
1-1.201048 0.675688 1.110037 0.553489
2-0.159224-1.226735-0.141689-1.450920
3-0.049450-0.438565 0.670832 1.089032
4-0.105969-0.891644 0.626482 0.416679
5-1.103222-1.983806 0.282366 0.031730
6 0.380308-0.397791-0.322955 0.074480
7-0.623134-0.205967-0.367622 1.437279
8-0.481202 1.242607-2.107715 1.020051
9-0.345859-0.759047-0.927940 1.487916
\n", "
" ], "text/plain": [ " 0 1 2 3\n", "0 -0.006589 -1.232048 -0.147323 0.709050\n", "1 -1.201048 0.675688 1.110037 0.553489\n", "2 -0.159224 -1.226735 -0.141689 -1.450920\n", "3 -0.049450 -0.438565 0.670832 1.089032\n", "4 -0.105969 -0.891644 0.626482 0.416679\n", "5 -1.103222 -1.983806 0.282366 0.031730\n", "6 0.380308 -0.397791 -0.322955 0.074480\n", "7 -0.623134 -0.205967 -0.367622 1.437279\n", "8 -0.481202 1.242607 -2.107715 1.020051\n", "9 -0.345859 -0.759047 -0.927940 1.487916" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# concatenation\n", "df = pd.DataFrame(np.random.randn(10, 4))\n", "pieces = [df[:3], df[3:7], df[7:]]\n", "pd.concat(pieces)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
keylvalrval
0 foo 1 4
1 foo 1 5
2 foo 2 4
3 foo 2 5
\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": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# SQL-style join\n", "left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})\n", "right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})\n", "pd.merge(left, right, on='key')" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
0-0.992219 1.298979 0.998799-0.164381
1 0.902147 1.118289-0.169358 0.117833
2 1.201061-1.699020-2.112810-1.412482
3 1.084910 1.171135 0.384876 0.535239
4-0.922543-0.018670-1.506012 0.293739
5 0.481017 0.639182-0.090676 0.951261
6 1.201241 2.528836-0.530795 0.901950
7 0.899290 0.562738 1.566468-0.846827
8 1.084910 1.171135 0.384876 0.535239
\n", "
" ], "text/plain": [ " A B C D\n", "0 -0.992219 1.298979 0.998799 -0.164381\n", "1 0.902147 1.118289 -0.169358 0.117833\n", "2 1.201061 -1.699020 -2.112810 -1.412482\n", "3 1.084910 1.171135 0.384876 0.535239\n", "4 -0.922543 -0.018670 -1.506012 0.293739\n", "5 0.481017 0.639182 -0.090676 0.951261\n", "6 1.201241 2.528836 -0.530795 0.901950\n", "7 0.899290 0.562738 1.566468 -0.846827\n", "8 1.084910 1.171135 0.384876 0.535239" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# append\n", "df = pd.DataFrame(np.random.randn(8, 4), columns=['A', 'B', 'C', 'D'])\n", "s = df.iloc[3]\n", "df.append(s, ignore_index=True)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
0 foo one 0.193948-1.385614
1 bar one-0.257859 2.127808
2 foo two-0.944848-0.760487
3 bar three-0.872161-1.707254
4 foo two-0.658552 0.175699
5 bar two-1.887614 0.627801
6 foo one 0.439001-2.264125
7 foo three-0.829368-1.229315
\n", "
" ], "text/plain": [ " A B C D\n", "0 foo one 0.193948 -1.385614\n", "1 bar one -0.257859 2.127808\n", "2 foo two -0.944848 -0.760487\n", "3 bar three -0.872161 -1.707254\n", "4 foo two -0.658552 0.175699\n", "5 bar two -1.887614 0.627801\n", "6 foo one 0.439001 -2.264125\n", "7 foo three -0.829368 -1.229315" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.DataFrame(\n", " { 'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],\n", " 'B' : ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],\n", " 'C' : np.random.randn(8),\n", " 'D' : np.random.randn(8) })\n", "df" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CD
A
bar-3.017634 1.048355
foo-1.799818-5.463842
\n", "
" ], "text/plain": [ " C D\n", "A \n", "bar -3.017634 1.048355\n", "foo -1.799818 -5.463842" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# group by\n", "df.groupby('A').sum()" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CD
AB
barone-0.257859 2.127808
three-0.872161-1.707254
two-1.887614 0.627801
fooone 0.632949-3.649739
three-0.829368-1.229315
two-1.603400-0.584788
\n", "
" ], "text/plain": [ " C D\n", "A B \n", "bar one -0.257859 2.127808\n", " three -0.872161 -1.707254\n", " two -1.887614 0.627801\n", "foo one 0.632949 -3.649739\n", " three -0.829368 -1.229315\n", " two -1.603400 -0.584788" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# group by multiple columns\n", "df.groupby(['A','B']).sum()" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCDE
0 one A foo-0.853288 2.549878
1 one B foo 0.552557 0.865465
2 two C foo 0.700943 0.800563
3 three A bar-0.466072 0.011508
4 one B bar 0.465724 1.087874
5 one C bar 1.105949-0.118134
6 two A foo-0.666630-0.143474
7 three B foo 0.644902 1.731818
8 one C foo 0.819170-1.153036
9 one A bar-1.849893 0.733137
10 two B bar 0.684170-0.276237
11 three C bar 0.592939-0.830433
\n", "
" ], "text/plain": [ " A B C D E\n", "0 one A foo -0.853288 2.549878\n", "1 one B foo 0.552557 0.865465\n", "2 two C foo 0.700943 0.800563\n", "3 three A bar -0.466072 0.011508\n", "4 one B bar 0.465724 1.087874\n", "5 one C bar 1.105949 -0.118134\n", "6 two A foo -0.666630 -0.143474\n", "7 three B foo 0.644902 1.731818\n", "8 one C foo 0.819170 -1.153036\n", "9 one A bar -1.849893 0.733137\n", "10 two B bar 0.684170 -0.276237\n", "11 three C bar 0.592939 -0.830433" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.DataFrame(\n", " { 'A' : ['one', 'one', 'two', 'three'] * 3,\n", " 'B' : ['A', 'B', 'C'] * 4,\n", " 'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,\n", " 'D' : np.random.randn(12),\n", " 'E' : np.random.randn(12)} )\n", "df" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Program Files\\Anaconda\\lib\\site-packages\\pandas\\util\\decorators.py:53: FutureWarning: rows is deprecated, use index instead\n", " warnings.warn(msg, FutureWarning)\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Cbarfoo
AB
oneA-1.849893-0.853288
B 0.465724 0.552557
C 1.105949 0.819170
threeA-0.466072 NaN
B NaN 0.644902
C 0.592939 NaN
twoA NaN-0.666630
B 0.684170 NaN
C NaN 0.700943
\n", "
" ], "text/plain": [ "C bar foo\n", "A B \n", "one A -1.849893 -0.853288\n", " B 0.465724 0.552557\n", " C 1.105949 0.819170\n", "three A -0.466072 NaN\n", " B NaN 0.644902\n", " C 0.592939 NaN\n", "two A NaN -0.666630\n", " B 0.684170 NaN\n", " C NaN 0.700943" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# pivot table\n", "pd.pivot_table(df, values='D', rows=['A', 'B'], columns=['C'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Time Series" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2012-01-01 24406\n", "Freq: 5T, dtype: int32" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# time period resampling\n", "rng = pd.date_range('1/1/2012', periods=100, freq='S')\n", "ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)\n", "ts.resample('5Min', how='sum')" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2012-01-31 -0.624893\n", "2012-02-29 -0.176292\n", "2012-03-31 1.673556\n", "2012-04-30 0.707903\n", "2012-05-31 0.533647\n", "Freq: M, dtype: float64" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rng = pd.date_range('1/1/2012', periods=5, freq='M')\n", "ts = pd.Series(np.random.randn(len(rng)), index=rng)\n", "ts" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2012-01-01 -0.624893\n", "2012-02-01 -0.176292\n", "2012-03-01 1.673556\n", "2012-04-01 0.707903\n", "2012-05-01 0.533647\n", "Freq: MS, dtype: float64" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ps = ts.to_period()\n", "ps.to_timestamp()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": [ "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\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# time series plot\n", "ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))\n", "ts = ts.cumsum()\n", "ts.plot()" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": [ "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\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot with a data frame\n", "df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=['A', 'B', 'C', 'D'])\n", "df = df.cumsum()\n", "plt.figure(); df.plot(); plt.legend(loc='best')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Input / Output" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# write to a csv file\n", "df.to_csv('foo.csv', index=False)" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
0-0.914956 0.294759 0.143332 0.174706
1-0.297442 1.640208 0.425301-0.075666
2-0.762292 0.741179 0.505002-0.128560
3-1.577471-0.495294 1.803332 0.188178
4-0.137486-0.676985 1.435308 0.181047
\n", "
" ], "text/plain": [ " A B C D\n", "0 -0.914956 0.294759 0.143332 0.174706\n", "1 -0.297442 1.640208 0.425301 -0.075666\n", "2 -0.762292 0.741179 0.505002 -0.128560\n", "3 -1.577471 -0.495294 1.803332 0.188178\n", "4 -0.137486 -0.676985 1.435308 0.181047" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# read file back in\n", "path = r'C:\\Users\\John\\Documents\\IPython Notebooks\\foo.csv'\n", "newDf = pd.read_csv(path)\n", "newDf.head()" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# remove the file\n", "import os\n", "os.remove(path)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# can also do Excel\n", "df.to_excel('foo.xlsx', sheet_name='Sheet1')" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABCD
2000-01-01-0.914956 0.294759 0.143332 0.174706
2000-01-02-0.297442 1.640208 0.425301-0.075666
2000-01-03-0.762292 0.741179 0.505002-0.128560
2000-01-04-1.577471-0.495294 1.803332 0.188178
2000-01-05-0.137486-0.676985 1.435308 0.181047
\n", "
" ], "text/plain": [ " A B C D\n", "2000-01-01 -0.914956 0.294759 0.143332 0.174706\n", "2000-01-02 -0.297442 1.640208 0.425301 -0.075666\n", "2000-01-03 -0.762292 0.741179 0.505002 -0.128560\n", "2000-01-04 -1.577471 -0.495294 1.803332 0.188178\n", "2000-01-05 -0.137486 -0.676985 1.435308 0.181047" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "newDf2 = pd.read_excel('foo.xlsx', 'Sheet1', index_col=None, na_values=['NA'])\n", "newDf2.head()" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [], "source": [ "os.remove('foo.xlsx')" ] } ], "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.9" } }, "nbformat": 4, "nbformat_minor": 0 }