Thursday, February 25, 2016

Python Data Analysis 4 - The pandas Library - An Introduction

Pandas: The Python Data Analytics Library

Installation

Installation from Anaconda

Installation on Linux

-- Test Your pandas Installation

nosetests pandas

-- Getting Started with pandas

import pandas as pd
import numpy as np
from pandas import *

-- Introduction to pandas Data Structures

-- The Series

 Declaring a Series

s = pd.Series([12,-4,7,9])
s

s = pd.Series([12,-4,7,9], index=[íaí,íbí,ící,ídí])
s
s.values
s.index

 Selecting the Internal Elements

s[2]
s['b']
s[['b', 'c']]

 Assigning Values to the Elements

s[1] = 0
s
s['b'] = 1
s

 Defining Series from NumPy Arrays and Other Series

arr = np.array([1,2,3,4])
s3 = pd.Series(arr)
s3
s4 = pd.Series(s)
s4
s3
arr[2] = -2
s3

 Filtering Values

s[s > 8]

 Operations and Mathematical Functions

s/2

np.logs(s)


 Evaluating Values

serd = pd.Series([1,0,2,1,2,3], index=[íwhiteí,íwhiteí,íblueí,ígreení,ígreení,íyellowí])
serd
serd.unique()
serd.value_counts()
serd.isin([0,3])

 NaN Values

s2 = pd.Series([5,-3,np.NaN,14])
s2
s2.isnull(?)
s2[s2.notnull(?)]

 Series as Dictionaries

mydict = {íredí: 2000, íblueí: 1000, íyellowí: 500, íorangeí: 1000}
myseries = pd.Series(mydict)
colors = [íredí,íyellowí,íorangeí,íblueí,ígreení]
myseries = pd.Series(mydict, index=colors)

 Operations between Series

mydict2 = {íredí:400,íyellowí:1000,íblackí:700}
myseries2 = pd.Series(mydict2)
myseries + myseries2

-- The DataFrame

 Defining a DataFrame

data = {ícolorí : [íblueí,ígreení,íyellowí,íredí,íwhiteí],
                     íobjectí : [íballí,ípení,ípencilí,ípaperí,ímugí],
                     ípriceí : [1.2,1.0,0.6,0.9,1.7]}
frame = pd.DataFrame(data)
frame
frame2 = pd.DataFrame(data, columns=[íobjectí,ípriceí])
frame2
frame2 = pd.DataFrame(data, index=[íoneí,ítwoí,íthreeí,ífourí,ífiveí])
frame2
frame3 = pd.DataFrame(np.arange(16).reshape((4,4)),
                   index=[íredí,íblueí,íyellowí,íwhiteí],
                   columns=[íballí,ípení,ípencilí,ípaperí]) 
frame3

 Selecting Elements

frame.columns
frame.index
frame.values
frame['price']
frame.ix[2]
frame.ix[[2,4]]
frame[0:1]
frame[1:3]
frame['object'][3]

 Assigning Values

frame.index.name = íidí; frame.columns.name = íitemí
frame
frame[ínewí] = 12
frame
frame[ínewí] = [3.0,1.3,2.2,0.8,1.1]
frame
ser = pd.Series(np.arange(5))
ser
frame[ípriceí][2] = 3.3

 Membership of a Value

frame.isin([1.0,ípení])
frame[frame.isin([1.0,ípení])]

 Deleting a Column

del frame[ínewí]
frame

 Filtering

frame[frame < 12]

 DataFrame from Nested dict

nestdict = { íredí: { 2012: 22, 2013: 33 },
                     íwhiteí: { 2011: 13, 2012: 22; 2013: 16},
                     íblueí: {2011: 17, 2012: 27; 2013: 18}}
frame2 = pd.DataFrame(nestdict)
frame2

 Transposition of a DataFrame

frame2.T

-- The Index Objects

ser = pd.Series([5,0,3,8,4], index=[íredí,íblueí,íyellowí,íwhiteí,ígreení])
ser.index

 Methods on Index

ser.idxmin()
ser.idxmax()

 Index with Duplicate Labels

serd = pd.Series(range(6), index=[íwhiteí,íwhiteí,íblueí,ígreení,ígreení,íyellowí])
serd

serd['white']
serd.index.is_unique
frame.index.is_unique

-- Other Functionalities on Indexes

ser = pd.Series([2,5,7,4], index=[íoneí,ítwoí,íthreeí,ífourí])
ser
ser.reindex([íthreeí,ífourí,ífiveí,íoneí])
ser3 = pd.Series([1,5,6,3],index=[0,3,5,6])
ser3
ser3.reindex(range(6),method=íffillí)
ser3.reindex(range(6),method=íbfillí)
frame.reindex(range(5), method=íffillí,columns=[ícolorsí,ípriceí,ínewí,íobjectí])

-- Dropping

drop()
ser = Series(np.arange(4.), index=[íredí,íblueí,íyellowí,íwhiteí])
ser
ser.drop(íyellowí)
ser.drop([íblueí,íwhiteí])

frame = pd.DataFrame(np.arange(16).reshape((4,4)),
                   index=[íredí,íblueí,íyellowí,íwhiteí],
                  columns=[íballí,ípení,ípencilí,ípaperí])
frame
frame.drop([íblueí,íyellowí])
frame.drop([ípení,ípencilí],axis=1)

-- Arithmetic and Data Alignment

s1 = pd.Series([3,2,5,1],[íwhiteí,íyellowí,ígreení,íblueí])
s2 = pd.Series([1,4,7,2,1],[íwhiteí,íyellowí,íblackí,íblueí,íbrowní])

s1+s2

frame1 = pd.DataFrame(np.arange(16).reshape((4,4)),
                   index=[íredí,íblueí,íyellowí,íwhiteí],
                   columns=[íballí,ípení,ípencilí,ípaperí])
frame2 = pd.DataFrame(np.arange(12).reshape((4,3)),
                   index=[íblueí,ígreení,íwhiteí,íyellowí],
                   columns=[ímugí,ípení,íballí])
frame1
frame2
frame1+frame2

-- Operations between Data Structures

Flexible Arithmetic Methods

frame1.add(frame2)

-- Operations between DataFrame and Series

frame = pd.DataFrame(np.arange(16).reshape((4,4)),
                   index=[íredí,íblueí,íyellowí,íwhiteí],
                   columns=[íballí,ípení,ípencilí,ípaperí])
frame
frame - ser
ser[ímugí] = 9
ser
frame - ser

-- Function Application and Mapping

Functions by Element
frame = pd.DataFrame(np.arange(16).reshape((4,4)),
                   index=[íredí,íblueí,íyellowí,íwhiteí],
                   columns=[íballí,ípení,ípencilí,ípaperí])
frame

np.sqrt(frame)

-- Functions by Row or Column

f = lambda x: x.max() - x.min()
def f(x):
    return x.max() - x.min()
frame.apply(f)
frame.apply(f, axis=1)

def f(x):
     return pd.Series([x.min(), x.max()], index=[íminí,ímaxí])
frame.apply(f)

-- Statistics Functions

frame.sum()
frame.mean()
frame.describe()

-- Sorting and Ranking
ser = pd.Series([5,0,3,8,4], index=[íredí,íblueí,íyellowí,íwhiteí,ígreení])
ser
ser.sort_index(ascending=False)
frame = pd.DataFrame(np.arange(16).reshape((4,4)),
                   index=[íredí,íblueí,íyellowí,íwhiteí],
                   columns=[íballí,ípení,ípencilí,ípaperí])
frame
ser.order()
frame.sort_index(by='pen')
frame.sort_index(by='pen', 'pencil'])
ser.rank()
ser.rank(method='first')
ser.rank(ascending=False)

-- Correlation and COvariance
seq2 = pd.Series([3,4,3,4,5,4,3,2],[í2006í,í2007í,í2008í,í2009í,í2010í,í2011í,í2012í,í2013í])
seq = pd.Series([1,2,3,4,4,3,2,1],[í2006í,í2007í,í2008í,í2009í,í2010í,í2011í,í2012í,í2013í])
seq.corr(seq2)

frame2 = DataFrame([[1,4,3,6],[4,5,6,1],[3,3,1,5],[4,1,6,4]],
                     index=[íredí,íblueí,íyellowí,íwhiteí],
                     columns=[íballí,ípení,ípencilí,ípaperí])
frame2
frame2.corr()
frame2.cov()
frame2.corrwith(ser)
frame2.corrwith(frame)

-- ìNot a Numberî Data

Assigning a NaN Value

ser = pd.Series([0,1,2,np.NaN,9], index=[íredí,íblueí,íyellowí,íwhiteí,ígreení])
ser
ser[íwhiteí] = None
ser

Filtering Out NaN Values

ser.dropna()
ser[ser.notnull()]
frame3 = pd.DataFrame([[6,np.nan,6],[np.nan,np.nan,np.nan],[2,np.nan,5]],
                        index = [íblueí,ígreení,íredí],
                        columns = [íballí,ímugí,ípení])
frame3
frame3.dropna(how=íallí) 

-- Filling in NaN Occurrences

frame3.fillna(0)

frame3.fillna({íballí:1,ímugí:0,ípení:99})

-- Hierarchical Indexing and Leveling
mser = pd.Series(np.random.rand(8),
        index=[[íwhiteí,íwhiteí,íwhiteí,íblueí,íblueí,íredí,íredí,íredí],
        [íupí,ídowní,írightí,íupí,ídowní,íupí,ídowní,íleftí]])
mser
mser.index
mser[íwhiteí]
mser[:,íupí]
mser[íwhiteí,íupí]
mser.unstack()

frame
frame.stack()

mframe = pd.DataFrame(np.random.randn(16).reshape(4,4),
      index=[[íwhiteí,íwhiteí,íredí,íredí], [íupí,ídowní,íupí,ídowní]],
      columns=[[ípení,ípení,ípaperí,ípaperí],[1,2,1,2]])
mframe

-- Reordering and Sorting Levels

mframe.columns.names = [íobjectsí,íidí]
mframe.index.names = [ícolorsí,ístatusí]
mframe
mframe.swaplevel('colors', 'status')
mframe.sortlevel(ícolorsí) 

-- Summary Statistic by Level

mframe.sum(level=ícolorsí)
mframe.sum(level=íidí, axis=1)

No comments:

Post a Comment

Blog Archive