{ "metadata": { "name": "", "signature": "sha256:417b5f27bd29d6f359455063d8a8f870c73e9a747409dd9ce5541b138d881187" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\u0423\u0447\u0435\u0431\u043d\u044b\u0439 \u043d\u043e\u0443\u0442\u0431\u0443\u043a \u043f\u043e \u0442\u0435\u043c\u0435 \"\u041f\u0430\u043a\u0435\u0442 Pandas\"\n", "\n", "\u0430\u0432\u0442\u043e\u0440: \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0414\u044c\u044f\u043a\u043e\u043d\u043e\u0432 (alexanderdyakonov.wordpress.com)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b\n", "import pandas as pd\n", "import numpy as np\n", "\n", "\n", "# \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a\n", "%pylab inline\n", "# \u0447\u0443\u0442\u044c \u043f\u043e\u043a\u0440\u0430\u0441\u0438\u0432\u0448\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438:\n", "pd.set_option('display.mpl_style', 'default')\n", "figsize(10, 3)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\n", "\n", "# Excel\n", "data2 = pd.read_excel('D:\\\\filename.xlsx', sheetname='1')\n", "# csv-\u0444\u0430\u0439\u043b\n", "data = pd.read_csv('D:\\\\filename.csv', sep=';', decimal=',')\n", "data.to_csv('foo.csv') # \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\n", "# HDF5\n", "pd.read_hdf('foo.h5', 'df')\n", "df.to_hdf('foo.h5', 'df') # \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "# \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u0430\u0442\u0430-\u0444\u0440\u0435\u0439\u043c\u0430\n", "\n", "data = pd.DataFrame({ 'A' : [1., 4., 2., 1.],\n", "'B' : pd.Timestamp('20130102'),\n", "'C' : pd.Series(1,index=list(range(4)),dtype='float32'),\n", "'D' : np.array([3] * 4,dtype='int32'),\n", "'E' : pd.Categorical([\"test\",\"train\",\"test\",\"train\"]),\n", "'F' : 'foo' }, index=pd.period_range('Jan-2000', periods=4, freq='M'))\n", "print data\n", "\n", "# \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\n", "tmp = dict([('A',[1., np.nan, 2., 1.]), ('B',[2.2, np.nan, np.nan, 0.0])]) # \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431\n", "data2 = pd.DataFrame(tmp)\n", "print data2" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " A B C D E F\n", "2000-01 1 2013-01-02 NaN 3 test foo\n", "2000-02 4 2013-01-02 NaN 3 train foo\n", "2000-03 2 2013-01-02 NaN 3 test foo\n", "2000-04 1 2013-01-02 NaN 3 train foo\n", " A B\n", "0 1 2.2\n", "1 NaN NaN\n", "2 2 NaN\n", "3 1 0.0\n" ] } ], "prompt_number": 50 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438\n", "# \u0441\u0442\u043e\u043b\u0431\u0446\u044b\n", "print data.columns\n", "# \u0441\u0442\u0440\u043e\u043a\u0438 - \u043d\u043e \u0442\u0443\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f\n", "print data.index\n", "# \u0441\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0435\n", "print data\n", "# \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430\n", "print data.sort(columns='A')\n", "# \u0442\u0438\u043f\u044b\n", "print data.dtypes\n", "# \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 + \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\n", "print data.describe().T" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Index([u'A', u'B', u'C', u'D', u'E', u'F'], dtype='object')\n", "\n", "[2000-01, ..., 2000-04]\n", "Length: 4, Freq: M\n", " A B C D E F\n", "2000-01 1 2013-01-02 NaN 3 test foo\n", "2000-02 4 2013-01-02 NaN 3 train foo\n", "2000-03 2 2013-01-02 NaN 3 test foo\n", "2000-04 1 2013-01-02 NaN 3 train foo\n", " A B C D E F\n", "2000-01 1 2013-01-02 NaN 3 test foo\n", "2000-04 1 2013-01-02 NaN 3 train foo\n", "2000-03 2 2013-01-02 NaN 3 test foo\n", "2000-02 4 2013-01-02 NaN 3 train foo\n", "A float64\n", "B datetime64[ns]\n", "C float32\n", "D int32\n", "E object\n", "F object\n", "dtype: object\n", " count mean std min 25% 50% 75% max\n", "A 4 2 1.414214 1 1 1.5 2.5 4\n", "C 0 NaN NaN NaN NaN NaN NaN NaN\n", "D 4 3 0.000000 3 3 3.0 3.0 3\n" ] } ], "prompt_number": 60 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f\n", "data.at['2000-01','A'] = 10.\n", "print data.loc['2000-01':'2000-02',['D','B','A']]\n", "data.iat[0,1] = pd.Timestamp('19990101') # \u043f\u0440\u043e\u0441\u0442\u043e = '1999/01/01' \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\n", "print data.iloc[0:2,1:3]\n", "# \u0432\u044b\u0431\u043e\u0440 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u043d\u0430 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435\n", "print data[data['E'].isin(['test','valid'])]\n", "# \u0435\u0441\u043b\u0438 \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043d\u0442 - \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0440\u0443\u0447\u0435\n", "data.tail(3).T" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " D B A\n", "2000-01 3 2013-01-02 10\n", "2000-02 3 2013-01-02 4\n", " B C\n", "2000-01 1999-01-01 NaN\n", "2000-02 2013-01-02 NaN\n", " A B C D E F\n", "2000-01 10 1999-01-01 NaN 3 test foo\n", "2000-03 2 2013-01-02 NaN 3 test foo\n" ] }, { "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", "
2000-022000-032000-04
A 4 2 1
B 2013-01-02 00:00:00 2013-01-02 00:00:00 2013-01-02 00:00:00
C NaN NaN NaN
D 3 3 3
E train test train
F foo foo foo
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 61, "text": [ " 2000-02 2000-03 2000-04\n", "A 4 2 1\n", "B 2013-01-02 00:00:00 2013-01-02 00:00:00 2013-01-02 00:00:00\n", "C NaN NaN NaN\n", "D 3 3 3\n", "E train test train\n", "F foo foo foo" ] } ], "prompt_number": 61 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u041d\u0430\u041d\u0430\u043c\u0438\n", "# \u043c\u0430\u0441\u043a\u0430 \u041d\u0430\u043d\u043e\u0432\n", "print data2.isnull()\n", "# nan \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f\n", "print data2.mean()\n", "# \u0442\u043e\u0436\u0435 \u043e\u0431\u0445\u043e\u0434\u044f\u0442\u0441\u044f nan:\n", "print data2.apply(np.cumsum)\n", "# \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u041d\u0430\u043d\u043e\u0432\n", "data3 = data2.dropna()\n", "print data3\n", "# \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u041d\u0430\u043d\u043e\u0432\n", "print data2.fillna(value=5.5)\n", "# \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438\n", "print data2.ffill()\n", "# \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c data2 = data2.fillna(value=5.5)\n", "data2" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " A B\n", "0 False False\n", "1 True True\n", "2 False True\n", "3 False False\n", "A 1.333333\n", "B 1.100000\n", "dtype: float64\n", " A B\n", "0 1 2.2\n", "1 NaN NaN\n", "2 3 NaN\n", "3 4 2.2\n", " A B\n", "0 1 2.2\n", "3 1 0.0\n", " A B\n", "0 1.0 2.2\n", "1 5.5 5.5\n", "2 2.0 5.5\n", "3 1.0 0.0\n", " A B\n", "0 1 2.2\n", "1 1 2.2\n", "2 2 2.2\n", "3 1 0.0\n" ] }, { "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", "
AB
0 1 2.2
1NaN NaN
2 2 NaN
3 1 0.0
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 63, "text": [ " A B\n", "0 1 2.2\n", "1 NaN NaN\n", "2 2 NaN\n", "3 1 0.0" ] } ], "prompt_number": 63 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\n", "d = pd.DataFrame({'A': [1,2,2,1,2,3,2,1,3], 'B': [1,2,3,4,1,2,3,3,4]})\n", "pd.crosstab(d['A'], d['B'])" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
B1234
A
1 1 0 1 1
2 1 1 2 0
3 0 1 0 1
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 64, "text": [ "B 1 2 3 4\n", "A \n", "1 1 0 1 1\n", "2 1 1 2 0\n", "3 0 1 0 1" ] } ], "prompt_number": 64 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0431\u0443\u043a\u0432\u044b\n", "d = pd.DataFrame({'A': [1,2,2,1,2,3,2,1,3], 'B': ['as','bs','e','qq','aaa','a','e','qwr','www']})\n", "d[d['B'].map(lambda x: x.startswith('a'))]" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
AB
0 1 as
4 2 aaa
5 3 a
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 65, "text": [ " A B\n", "0 1 as\n", "4 2 aaa\n", "5 3 a" ] } ], "prompt_number": 65 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u0437\u0430\u043c\u0435\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\n", "d = pd.DataFrame({'A': [1,2,2,1,2,3,2,1,3], 'B': [1,2,3,4,1,2,3,3,4]})\n", "d['B'][d['A']==1] = 0\n", "# \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431: d.ix[d['A']==1, 'B'] = 0\n", "d" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
AB
0 1 0
1 2 2
2 2 3
3 1 0
4 2 1
5 3 2
6 2 3
7 1 0
8 3 4
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 66, "text": [ " A B\n", "0 1 0\n", "1 2 2\n", "2 2 3\n", "3 1 0\n", "4 2 1\n", "5 3 2\n", "6 2 3\n", "7 1 0\n", "8 3 4" ] } ], "prompt_number": 66 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u043e\u043a\n", "d = pd.DataFrame({'A': [1,2,2,1,2,3,2,1,3], 'B': [1,2,3,4,1,2,3,3,4]})\n", "mask = d>1\n", "print mask.T\n", "d = d.where(mask,2)\n", "d['C'] = np.where(d['B']>3, 'high', 'low')\n", "d.T" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " 0 1 2 3 4 5 6 7 8\n", "A False True True False True True True False True\n", "B False True True True False True True True True\n" ] }, { "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", "
012345678
A 2 2 2 2 2 3 2 2 3
B 2 2 3 4 2 2 3 3 4
C low low low high low low low low high
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 67, "text": [ " 0 1 2 3 4 5 6 7 8\n", "A 2 2 2 2 2 3 2 2 3\n", "B 2 2 3 4 2 2 3 3 4\n", "C low low low high low low low low high" ] } ], "prompt_number": 67 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u0442\u0430-\u0444\u0440\u0435\u0439\u043c\u043e\u0432\n", "left = pd.DataFrame({'key': [1,2,1], 'l': [1, 2, 3]})\n", "right = pd.DataFrame({'key': [1,2,3], 'r': [4, 5, 6]})\n", "print left\n", "print right\n", "pd.merge(left, right, on='key')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " key l\n", "0 1 1\n", "1 2 2\n", "2 1 3\n", " key r\n", "0 1 4\n", "1 2 5\n", "2 3 6\n" ] }, { "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", "
keylr
0 1 1 4
1 1 3 4
2 2 2 5
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 71, "text": [ " key l r\n", "0 1 1 4\n", "1 1 3 4\n", "2 2 2 5" ] } ], "prompt_number": 71 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a \u0434\u0430\u0442\u0430-\u0444\u0440\u0435\u0439\u043c\u0443\n", "tmp = dict([('A',[1., 3., 2., 1.]), ('B',[2.2, 1.1, 3.3, 0.0]), ('C', 1)]) # \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431\n", "df = pd.DataFrame(tmp)\n", "# \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a \u0434\u0430\u0442\u0430-\u0444\u0440\u0435\u0439\u043c\u0443\n", "df = df.append(df.iloc[1:3])\n", "df" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
ABC
0 1 2.2 1
1 3 1.1 1
2 2 3.3 1
3 1 0.0 1
1 3 1.1 1
2 2 3.3 1
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 85, "text": [ " A B C\n", "0 1 2.2 1\n", "1 3 1.1 1\n", "2 2 3.3 1\n", "3 1 0.0 1\n", "1 3 1.1 1\n", "2 2 3.3 1" ] } ], "prompt_number": 85 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\n", "data.info() # \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438\n", "#??? data.memory_usage() # \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "PeriodIndex: 4 entries, 2000-01 to 2000-04\n", "Data columns (total 6 columns):\n", "A 4 non-null float64\n", "B 4 non-null datetime64[ns]\n", "C 0 non-null float32\n", "D 4 non-null int32\n", "E 4 non-null object\n", "F 4 non-null object\n", "dtypes: datetime64[ns](1), float32(1), float64(1), int32(1), object(2)" ] } ], "prompt_number": 69 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u044f\u0434\u044b\n", "# \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\n", "rng = pd.date_range('1/1/2012', periods=9, freq='D')\n", "# \u0434\u043d\u0438\n", "print rng.day\n", "# \u0434\u043d\u0438 \u043d\u0435\u0434\u0435\u043b\u0438\n", "print rng.weekday\n", "\n", "rng = pd.date_range('1/1/2012', periods=200, freq='S')\n", "ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)\n", "# \u0440\u0435\u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\n", "ts = ts.resample('Min', how='sum')\n", "print ts\n", "# ???\n", "ts.tz_localize('UTC')\n", "print ts" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1 2 3 4 5 6 7 8 9]\n", "[6 0 1 2 3 4 5 6 0]\n", "2012-01-01 00:00:00 15255\n", "2012-01-01 00:01:00 13164\n", "2012-01-01 00:02:00 14217\n", "2012-01-01 00:03:00 5326\n", "Freq: T, dtype: int32\n", "2012-01-01 00:00:00 15255\n", "2012-01-01 00:01:00 13164\n", "2012-01-01 00:02:00 14217\n", "2012-01-01 00:03:00 5326\n", "Freq: T, dtype: int32\n" ] } ], "prompt_number": 72 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438\n", "# \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u043d\u0430\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f A \u043d\u0430\u0439\u0442\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 B\n", "import pandas as pd\n", "d = pd.DataFrame({'A': [1,2,2,1,3,3], 'B': [1,2,3,3,2,1]})\n", "print d\n", "\n", "# \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\n", "print d.loc[d.groupby('A')['B'].idxmin()]\n", "\n", "# \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\n", "print d.sort('B').groupby('A', as_index=False).first()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " A B\n", "0 1 1\n", "1 2 2\n", "2 2 3\n", "3 1 3\n", "4 3 2\n", "5 3 1\n", " A B\n", "0 1 1\n", "1 2 2\n", "5 3 1\n", " A B\n", "0 1 1\n", "1 2 2\n", "2 3 1\n" ] } ], "prompt_number": 73 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0433\u0440\u0443\u043f\u043f\u0430\u043c (\u0438\u043d\u0434\u0443\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0443)\n", "d = pd.DataFrame({'A': [1,2,2,1,1,2,2], 'B': [1,2,np.nan,5,3,1,10]})\n", "d = d.sort('A')\n", "print d\n", "d['shift_B'] = d.groupby('A')['B'].shift(1) # \u0441\u0434\u0432\u0438\u0433 \u0433\u0440\u0443\u043f\u043f\n", "d['counts'] = d.groupby(['A'])['B'].transform(len) # \u0447\u0438\u0441\u043b\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0433\u0440\u0443\u043f\u043f\u0435\n", "d" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " A B\n", "0 1 1\n", "3 1 5\n", "4 1 3\n", "1 2 2\n", "2 2 NaN\n", "5 2 1\n", "6 2 10\n" ] }, { "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", "
ABshift_Bcounts
0 1 1NaN 3
3 1 5 1 3
4 1 3 5 3
1 2 2NaN 4
2 2NaN 2 4
5 2 1NaN 4
6 2 10 1 4
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 74, "text": [ " A B shift_B counts\n", "0 1 1 NaN 3\n", "3 1 5 1 3\n", "4 1 3 5 3\n", "1 2 2 NaN 4\n", "2 2 NaN 2 4\n", "5 2 1 NaN 4\n", "6 2 10 1 4" ] } ], "prompt_number": 74 }, { "cell_type": "code", "collapsed": false, "input": [ "d = pd.DataFrame({'A': [1,2,2,1,1,2,2], 'B': [1,0,np.nan,1,0,1,0]})\n", "d = d.sort('A')\n", "print d\n", "\n", "# \u0434\u043b\u0438\u043d\u0430 \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e 1 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435\n", "d.groupby('A').agg({'A': len, 'B': lambda x: sum(x == 1)})" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " A B\n", "0 1 1\n", "3 1 1\n", "4 1 0\n", "1 2 0\n", "2 2 NaN\n", "5 2 1\n", "6 2 0\n" ] }, { "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", "
AB
A
1 3 2
2 4 1
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 75, "text": [ " A B\n", "A \n", "1 3 2\n", "2 4 1" ] } ], "prompt_number": 75 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u0421\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438\n", "s = pd.Series(['AbA', 'Sasha', 'DataMining']) # ( [] )\n", "s.str.lower()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 76, "text": [ "0 aba\n", "1 sasha\n", "2 datamining\n", "dtype: object" ] } ], "prompt_number": 76 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0430\u044f (\u043c\u043d\u043e\u0433\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f) \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f\n", "tuples = list(zip(*[['bar', 'bar', 'baz', 'baz',\n", "'foo', 'foo', 'qux', 'qux'],\n", " ['one', 'two', 'one', 'two',\n", "'one', 'two', 'one', 'two']]))\n", "print tuples\n", "\n", "index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])\n", "print index\n", "index\n", "\n", "df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])\n", "print df\n", "\n", "print df.stack() # \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f unstack()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[('bar', 'one'), ('bar', 'two'), ('baz', 'one'), ('baz', 'two'), ('foo', 'one'), ('foo', 'two'), ('qux', 'one'), ('qux', 'two')]\n", "first second\n", "bar one \n", " two \n", "baz one \n", " two \n", "foo one \n", " two \n", "qux one \n", " two \n", " A B\n", "first second \n", "bar one -0.240469 -0.533312\n", " two -0.847305 0.845316\n", "baz one 0.274592 0.473476\n", " two 1.433575 -0.977992\n", "foo one 0.957252 -1.246396\n", " two -2.821039 -0.625924\n", "qux one 0.086683 -0.450850\n", " two -1.236494 0.706156\n", "first second \n", "bar one A -0.240469\n", " B -0.533312\n", " two A -0.847305\n", " B 0.845316\n", "baz one A 0.274592\n", " B 0.473476\n", " two A 1.433575\n", " B -0.977992\n", "foo one A 0.957252\n", " B -1.246396\n", " two A -2.821039\n", " B -0.625924\n", "qux one A 0.086683\n", " B -0.450850\n", " two A -1.236494\n", " B 0.706156\n", "dtype: float64\n" ] } ], "prompt_number": 77 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u043f\u0430\u043d\u0435\u043b\u044c (3D-\u0434\u0430\u0442\u0430-\u0444\u0440\u0435\u0439\u043c)\n", "d = pd.DataFrame({'A': [1,2,2], 'B': [1,2,3]})\n", "d2, d3 = d.copy(), d.copy()\n", "p = pd.Panel({'df1':d, 'df2':d2, 'df3':d3})\n", "p = p.transpose(2,0,1)\n", "print p['A']\n", "p" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " 0 1 2\n", "df1 1 2 2\n", "df2 1 2 2\n", "df3 1 2 2\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 41, "text": [ "\n", "Dimensions: 2 (items) x 3 (major_axis) x 3 (minor_axis)\n", "Items axis: A to B\n", "Major_axis axis: df1 to df3\n", "Minor_axis axis: 0 to 2" ] } ], "prompt_number": 41 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u0433\u0440\u0430\u0444\u0438\u043a\u0430\n", "d = pd.DataFrame({\"IQ\": [1,4,3,2]})\n", "d.index = ['man', 'woman', 'dog', 'cat']\n", "d.plot(kind='barh')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 78, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nQmCC\n", "text": [ "" ] } ], "prompt_number": 78 }, { "cell_type": "code", "collapsed": false, "input": [ "# \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 = \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0439\n", "x = np.random.randn(10000)\n", "y = pd.cut(x,10)\n", "z = pd.value_counts(y)\n", "z.plot(figsize=(20,3))\n", "pd.DataFrame(x).plot(kind='kde')\n", "pd.DataFrame(z).T" ], "language": "python", "metadata": {}, "outputs": [ { "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", "
(-0.211, 0.629](-1.0502, -0.211](0.629, 1.468](-1.89, -1.0502](1.468, 2.308](-2.729, -1.89](2.308, 3.147](-3.569, -2.729](3.147, 3.987](-4.417, -3.569]
0 3247 2638 1921 1192 634 226 102 32 6 2
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 79, "text": [ " (-0.211, 0.629] (-1.0502, -0.211] (0.629, 1.468] (-1.89, -1.0502] \\\n", "0 3247 2638 1921 1192 \n", "\n", " (1.468, 2.308] (-2.729, -1.89] (2.308, 3.147] (-3.569, -2.729] \\\n", "0 634 226 102 32 \n", "\n", " (3.147, 3.987] (-4.417, -3.569] \n", "0 6 2 " ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAABMQAAADJCAYAAADM4e43AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X90VPd95//XndGMRiPNSEK/kQAJDAgDNkay8aYEkhin\nJAYCdpqf63R72tOTs949u5ueNt3ubr/pt9/dbddN2u+3m7ab7rZpfpFfBgzYJgaa2Ag7wQJsS2Bh\nA0ZIAv3AQuj3r5n7/UPSMBIzkgYkzY/P83GOD3Ov7ow+vq97r+Ctz31fy7ZtWwAAAAAAAIAhHPEe\nAAAAAAAAALCQKIgBAAAAAADAKBTEAAAAAAAAYBQKYgAAAAAAADAKBTEAAAAAAAAYhYIYAAAAAAAA\njJI239/gtddeU1tbmyRp6dKlqqqq0qFDhxQIBCRJK1as0Pr16yVJra2tOn78uJxOp7Zu3aqSkpJp\n1wMAAAAAAACxmveC2Ic+9KHQ65dfflmS5PF49Pjjj9+x7alTp/TFL35RknTgwAHt3r172vUAAAAA\nAABArOa9ICZJV65c0XPPPac9e/ZIkgKBgPbt2yfbtlVRUaGNGzdKkrxeb+g9brc79DraegAAAAAA\nACBWC1IQKy8v1zPPPKPnn39ey5cv1/bt20Nfe+mll0KvbdsOvXa5XDOuBwAAAAAAAGK1IAUxaew2\nSZ/Pd8f68ALXRF8xSbIsa8b1U7388styOp33OlQAAAAAAACMy8nJUVVVVbyHMafmvSDW2dmpRYsW\nSbo906uxsVHLli2TJA0ODoa2HRgYCG038Xq69VM5nc7Q7ZcAAAAAAAC4d2fOnIn3EObcvBfETp48\nqaGhIUlSdXW1pLGC2KlTpyRJGzZsCG27adMm7d27V7Zta9u2bTOuBwAAAAAAAGJl2eENupLc8ePH\nmSFmkJqaGm3evDnew8ACIW+zkLdZyNss5G0W8jYLeZuFvM1y5swZPfbYY/EexpxyxHsAAAAAAAAA\nwEJihhgAAAAAAACiYoYYAAAAAAAAkOQoiCFp1dTUxHsIWEDkbRbyNgt5m4W8zULeZiFvs5A3kh0F\nMQAAAAAAABiFHmIAAAAAAACIih5iAAAAAAAAQJKjIIakxT3rZiFvs5C3WcjbLORtFvI2C3mbhbyR\n7NLiPYC59h8Ovat1RZlaW5yl+wsz5fek3P8iAAAAAAAA7kHK9RCzilaqvq1X9a19utDRp4Ist9YV\nZWpdcZbWFWWpMMsly7LiPVQAAAAAAICkkIo9xFJu+tRDpT49VOqTJAWCti51Dqi+tVcnr9zSt37V\nIqfDChXI1hZlqjw3Q04HBTIAAAAAAABTpHQPMafD0qp8r55cV6g/3lahH35hnZ795EpVl/l18caA\n/us/X9Gnv1enPzpyUXvfbNXb13s1NBqM97AxS9yzbhbyNgt5m4W8zULeZiFvs5C3WcgbyS7lZohN\nx7IslWanqzQ7XR9flSdJujkwonNtfTrX2qu/P9WiKzcHtWJRhtaGzSKjDxkAAAAAAEDqSLkeYhs3\nbrynzxgYCehCR7/q2/pU39qrhvY+FWS6tbY4U+uKsrS2OFPFWW76kAEAAAAAACPQQ8wAGS6nNiz2\nacPi233ILo/3Ifvl1Vv636daZFlW6EmW64vpQwYAAAAAAJBMUrqH2FxwOiytzPdqz7pC/efHKrT3\nC+v0jR0r9chSv97vHNB/++creuq7b+uPjlzU98+26q1rPRqkD9mC4J51s5C3WcjbLORtFvI2C3mb\nhbzNQt5IdvM+Q+y1115TW1ubJGnp0qWqqqpSa2urjh8/LqfTqa1bt6qkpESSYl4fD5ZlqcSfrhJ/\nuh5fOdaHrGtgROfb+1Tf2qd/qL2my52Dqsj1aF1xltYVZ2ptUZay6UMGAAAAAACQEBa0h9jLL7+s\nj3/84zp48KB27dolSTpw4IB2794tSTGvn2oueojNhcHRoN7t6FNda5/OtfXqfFuf8ryuUJP+dcVZ\nKvHRhwwAAAAAACQ+eojdpStXrui5557Tnj17JElerzf0NbfbHXod6/pE5Ulz6IESnx4oud2H7MrN\nAdW39umN5m79Y+112bLHmvSPF8iWL6IPGQAAAAAAwEJYkB5i5eXleuaZZ/TGG29IksInpblcrtDr\nWNcnC6fD0oo8rz61tkD/6WMV+sHn1+ovd67So0uz1dg1qP/xi0Y99d239YcvXdT3zlzX2Ws9GhgJ\nxHvYCY971s1C3mYhb7OQt1nI2yzkbRbyNgt5I9ktWGMrj8cjn298xlTgdrEn/LbBWNdHUlNTo82b\nN4deS0rI5RJfui699YaqJf37T29W9+CofvLzN3Txygeqbc7Vpc4B5aWNaGlGUB+vWqW1RZk6d/pX\nCTP+RFiuq6tLqPGwTN4skzfL5M0yebNM3iYvk7dZy+Rt1nIqmvceYp2dnVq0aJEk6YUXXtATTzyh\n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\nwCj/PxKedS0Bp+vjAAAAAElFTkSuQmCC\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nRK5CYII=\n", "text": [ "" ] } ], "prompt_number": 79 }, { "cell_type": "code", "collapsed": false, "input": [ "#???\n", "# \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u043d\u044b\u0439 \u0442\u0438\u043f (new)\n", "tmp = dict([('A',[1, 1, 2, 2]), ('B',[1., 2., 1., 2.])]) # \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431\n", "df = pd.DataFrame(tmp)\n", "df['A'] = df['A'].astype('category') # \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u043d\u044b\u0439 \u0442\u0438\u043f\n", "print df['A'].cat.categories\n", "df" ], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }