In [12]:
import pandas as pd
import numpy as np
from pandas import DataFrame, Series

In [2]:
obj = Series([4, 7, -5, 3])

In [3]:
obj


Out[3]:
0    4
1    7
2   -5
3    3
dtype: int64

In [4]:
print obj.values
print obj.index


[ 4  7 -5  3]
Int64Index([0, 1, 2, 3], dtype='int64')

In [5]:
obj2 = Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
print obj2


d    4
b    7
a   -5
c    3
dtype: int64

In [6]:
obj2['a']


Out[6]:
-5

In [7]:
obj2['d']


Out[7]:
4

In [9]:
obj2[['a','d']]


Out[9]:
a   -5
d    4
dtype: int64

In [10]:
obj2[obj2>0]


Out[10]:
d    4
b    7
c    3
dtype: int64

In [11]:
obj2 * 2


Out[11]:
d     8
b    14
a   -10
c     6
dtype: int64

In [14]:
np.exp(obj2)


Out[14]:
d      54.598150
b    1096.633158
a       0.006738
c      20.085537
dtype: float64

In [15]:
'b' in obj2


Out[15]:
True

In [16]:
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}

In [17]:
sd = Series(sdata)

In [18]:
print sd


Ohio      35000
Oregon    16000
Texas     71000
Utah       5000
dtype: int64

In [19]:
type(sdata)


Out[19]:
dict

In [20]:
type(sd)


Out[20]:
pandas.core.series.Series

In [21]:
sd.keys


Out[21]:
<bound method Series.keys of Ohio      35000
Oregon    16000
Texas     71000
Utah       5000
dtype: int64>

In [22]:
states = ['California', 'Ohio', 'Oregon', 'Texas']

In [23]:
obj4 = Series(sd, index=states)
print obj4


California      NaN
Ohio          35000
Oregon        16000
Texas         71000
dtype: float64

In [25]:
pd.isnull(obj4)


Out[25]:
California     True
Ohio          False
Oregon        False
Texas         False
dtype: bool

In [26]:
pd.notnull(obj4)


Out[26]:
California    False
Ohio           True
Oregon         True
Texas          True
dtype: bool

In [27]:
#direclty using intance method 
obj4.isnull()


Out[27]:
California     True
Ohio          False
Oregon        False
Texas         False
dtype: bool

In [28]:
obj4.notnull()


Out[28]:
California    False
Ohio           True
Oregon         True
Texas          True
dtype: bool

In [30]:
obj4.name = 'population'
obj4.index.name = 'states'

In [31]:
obj4


Out[31]:
states
California      NaN
Ohio          35000
Oregon        16000
Texas         71000
Name: population, dtype: float64

In [32]:
obj


Out[32]:
0    4
1    7
2   -5
3    3
dtype: int64

In [33]:
obj.index= [ 'aa', 'bb','cc','ee']

In [34]:
obj


Out[34]:
aa    4
bb    7
cc   -5
ee    3
dtype: int64

In [35]:
#dataframes

In [36]:
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
frame = DataFrame(data)

In [37]:
frame


Out[37]:
pop state year
0 1.5 Ohio 2000
1 1.7 Ohio 2001
2 3.6 Ohio 2002
3 2.4 Nevada 2001
4 2.9 Nevada 2002

In [38]:
DataFrame(data, columns=['year', 'state', 'pop'])


Out[38]:
year state pop
0 2000 Ohio 1.5
1 2001 Ohio 1.7
2 2002 Ohio 3.6
3 2001 Nevada 2.4
4 2002 Nevada 2.9

In [39]:
frame2 = DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
....: index=['one', 'two', 'three', 'four', 'five'])

In [40]:
frame2


Out[40]:
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 NaN
five 2002 Nevada 2.9 NaN

In [41]:
# A column in a DataFrame can be retrieved as a Series either by dict-like notation or by
# attribute

frame2['state']


Out[41]:
one        Ohio
two        Ohio
three      Ohio
four     Nevada
five     Nevada
Name: state, dtype: object

In [42]:
type(frame2['state'])


Out[42]:
pandas.core.series.Series

In [44]:
frame2.state


Out[44]:
one        Ohio
two        Ohio
three      Ohio
four     Nevada
five     Nevada
Name: state, dtype: object

In [43]:
type(frame2)


Out[43]:
pandas.core.frame.DataFrame

In [45]:
frame2


Out[45]:
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 NaN
five 2002 Nevada 2.9 NaN

In [48]:
frame2.ix['three']


Out[48]:
year     2002
state    Ohio
pop       3.6
debt      NaN
Name: three, dtype: object

In [52]:
frame2.debt=16.5
frame2


Out[52]:
year state pop debt
one 2000 Ohio 1.5 16.5
two 2001 Ohio 1.7 16.5
three 2002 Ohio 3.6 16.5
four 2001 Nevada 2.4 16.5
five 2002 Nevada 2.9 16.5

In [53]:
frame2.debt = np.arange(5)
frame2


Out[53]:
year state pop debt
one 2000 Ohio 1.5 0
two 2001 Ohio 1.7 1
three 2002 Ohio 3.6 2
four 2001 Nevada 2.4 3
five 2002 Nevada 2.9 4

In [71]:
frame2['eastern'] = frame2.state =='Ohio'
frame2


Out[71]:
year state pop debt eastern
one 2000 Ohio 1.5 0 True
two 2001 Ohio 1.7 1 True
three 2002 Ohio 3.6 2 True
four 2001 Nevada 2.4 3 False
five 2002 Nevada 2.9 4 False

In [72]:
print frame2.eastern 
# OR
#print frame2['eastern']
del frame2['eastern']
frame2


one       True
two       True
three     True
four     False
five     False
Name: eastern, dtype: bool
Out[72]:
year state pop debt
one 2000 Ohio 1.5 0
two 2001 Ohio 1.7 1
three 2002 Ohio 3.6 2
four 2001 Nevada 2.4 3
five 2002 Nevada 2.9 4

In [76]:
pop = {'Nevada': {2001: 2.4, 2002: 2.9, 2005: 4.4},
....: 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}

In [82]:
pop


Out[82]:
{'Nevada': {2001: 2.4, 2002: 2.9, 2005: 4.4},
 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}

In [85]:
frame3 = DataFrame(pop)
print frame3


      Nevada  Ohio
2000     NaN   1.5
2001     2.4   1.7
2002     2.9   3.6
2005     4.4   NaN

In [81]:
DataFrame(pop).T


Out[81]:
2000 2001 2002 2005
Nevada NaN 2.4 2.9 4.4
Ohio 1.5 1.7 3.6 NaN

In [83]:
DataFrame(pop, index=[2001, 2005, 2010])


Out[83]:
Nevada Ohio
2001 2.4 1.7
2005 4.4 NaN
2010 NaN NaN

In [87]:
pdata = {'Ohio': frame3['Ohio'][:-1],
....: 'Nevada': frame3['Nevada'][:2]}
print pdata


{'Ohio': 2000    1.5
2001    1.7
2002    3.6
Name: Ohio, dtype: float64, 'Nevada': 2000    NaN
2001    2.4
Name: Nevada, dtype: float64}

In [88]:
type(pdata)


Out[88]:
dict

In [89]:
DataFrame(pdata)


Out[89]:
Nevada Ohio
2000 NaN 1.5
2001 2.4 1.7
2002 NaN 3.6

In [90]:
frame3.index.name = 'year'
frame3.columns.name = 'state'

In [91]:
frame3


Out[91]:
state Nevada Ohio
year
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6
2005 4.4 NaN

In [92]:
frame3.values


Out[92]:
array([[ nan,  1.5],
       [ 2.4,  1.7],
       [ 2.9,  3.6],
       [ 4.4,  nan]])

In [93]:
frame2.values


Out[93]:
array([[2000, 'Ohio', 1.5, 0],
       [2001, 'Ohio', 1.7, 1],
       [2002, 'Ohio', 3.6, 2],
       [2001, 'Nevada', 2.4, 3],
       [2002, 'Nevada', 2.9, 4]], dtype=object)

In [94]:
obj = Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])

In [95]:
obj


Out[95]:
d    4.5
b    7.2
a   -5.3
c    3.6
dtype: float64

In [97]:
obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
print obj2


a   -5.3
b    7.2
c    3.6
d    4.5
e    NaN
dtype: float64

In [98]:
obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value=0)


Out[98]:
a   -5.3
b    7.2
c    3.6
d    4.5
e    0.0
dtype: float64

In [99]:
obj3 = Series(['blue', 'purple', 'yellow'], index=[0, 2, 4])

In [100]:
obj3


Out[100]:
0      blue
2    purple
4    yellow
dtype: object

In [101]:
obj3.reindex(range(6), method='ffill')


Out[101]:
0      blue
1      blue
2    purple
3    purple
4    yellow
5    yellow
dtype: object

In [103]:
frame = DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'],
....: columns=['Ohio', 'Texas', 'California'])
print frame


   Ohio  Texas  California
a     0      1           2
c     3      4           5
d     6      7           8

In [104]:
frame2 = frame.reindex(['a', 'b', 'c', 'd'])

In [105]:
frame2


Out[105]:
Ohio Texas California
a 0 1 2
b NaN NaN NaN
c 3 4 5
d 6 7 8

In [106]:
states = ['Texas', 'Utah', 'California']

In [107]:
frame.reindex(columns=states)


Out[107]:
Texas Utah California
a 1 NaN 2
c 4 NaN 5
d 7 NaN 8

In [108]:
frame.reindex(index=['a', 'b', 'c', 'd'], method='ffill',
....: columns=states)


Out[108]:
Texas Utah California
a 1 NaN 2
b 1 NaN 2
c 4 NaN 5
d 7 NaN 8

In [109]:
frame.ix[['a', 'b', 'c', 'd'], states]


Out[109]:
Texas Utah California
a 1 NaN 2
b NaN NaN NaN
c 4 NaN 5
d 7 NaN 8

In [110]:
obj = Series(np.arange(5.), index=['a', 'b', 'c', 'd', 'e'])

In [111]:
obj


Out[111]:
a    0
b    1
c    2
d    3
e    4
dtype: float64

In [112]:
obj.drop('a')


Out[112]:
b    1
c    2
d    3
e    4
dtype: float64

In [116]:
data = DataFrame(np.arange(16).reshape((4, 4)),
....: index=['Ohio', 'Colorado', 'Utah', 'New York'],
....: columns=['one', 'two', 'three', 'four'])

In [119]:
data


Out[119]:
one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7
Utah 8 9 10 11
New York 12 13 14 15

In [120]:
#this is not in place
data.drop(['Colorado','Ohio'])


Out[120]:
one two three four
Utah 8 9 10 11
New York 12 13 14 15

In [121]:
data.drop('two', axis=1)


Out[121]:
one three four
Ohio 0 2 3
Colorado 4 6 7
Utah 8 10 11
New York 12 14 15

In [122]:
data.drop('Utah', axis=0)


Out[122]:
one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7
New York 12 13 14 15

In [123]:
data.drop(['Ohio','Utah'], axis=0)


Out[123]:
one two three four
Colorado 4 5 6 7
New York 12 13 14 15

In [124]:
obj = Series(np.arange(4.), index=['a', 'b', 'c', 'd'])

In [125]:
obj


Out[125]:
a    0
b    1
c    2
d    3
dtype: float64

In [127]:
obj[2]


Out[127]:
2.0

In [129]:
obj['c']


Out[129]:
2.0

In [130]:
obj[['a','d']]


Out[130]:
a    0
d    3
dtype: float64

In [132]:
obj[[0,3]]


Out[132]:
a    0
d    3
dtype: float64

In [133]:
obj['b':'c']


Out[133]:
b    1
c    2
dtype: float64

In [134]:
obj


Out[134]:
a    0
b    1
c    2
d    3
dtype: float64

In [135]:
obj['b':'c'] =5

In [136]:
obj


Out[136]:
a    0
b    5
c    5
d    3
dtype: float64

In [137]:
data = DataFrame(np.arange(16).reshape((4, 4)),
.....: index=['Ohio', 'Colorado', 'Utah', 'New York'],
.....: columns=['one', 'two', 'three', 'four'])

In [138]:
data


Out[138]:
one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7
Utah 8 9 10 11
New York 12 13 14 15

In [139]:
data['two']


Out[139]:
Ohio         1
Colorado     5
Utah         9
New York    13
Name: two, dtype: int64

In [140]:
data[:2]


Out[140]:
one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7

In [141]:
data[data['three'] > 5]


Out[141]:
one two three four
Colorado 4 5 6 7
Utah 8 9 10 11
New York 12 13 14 15

In [143]:
data['two'] <= 5


Out[143]:
Ohio         True
Colorado     True
Utah        False
New York    False
Name: two, dtype: bool

In [146]:
data <= 5


Out[146]:
one two three four
Ohio True True True True
Colorado True True False False
Utah False False False False
New York False False False False

In [147]:
data.ix['Colorado', ['two', 'three']]


Out[147]:
two      5
three    6
Name: Colorado, dtype: int64

In [152]:
data[['two','three']]


Out[152]:
two three
Ohio 1 2
Colorado 5 6
Utah 9 10
New York 13 14

In [153]:
data.ix[2]


Out[153]:
one       8
two       9
three    10
four     11
Name: Utah, dtype: int64

In [163]:
print data.ix[:'Utah', 'two']
# OR
print "OR - usng direct implicit indexing"
print data.ix[:3, 1]


Ohio        1
Colorado    5
Utah        9
Name: two, dtype: int64
OR - usng direct implicit indexing
Ohio        1
Colorado    5
Utah        9
Name: two, dtype: int64

In [165]:
print data.ix['Utah','two']

# OR using implicit indexing
print data.ix[2, 1]


9
9

In [157]:
data


Out[157]:
one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7
Utah 8 9 10 11
New York 12 13 14 15

In [168]:
data.ix[data.three >=5, :3]


Out[168]:
one two three
Colorado 4 5 6
Utah 8 9 10
New York 12 13 14

In [169]:
df1 = DataFrame(np.arange(9.).reshape((3, 3)), columns=list('bcd'),
.....: index=['Ohio', 'Texas', 'Colorado'])

In [170]:
df2 = DataFrame(np.arange(12.).reshape((4, 3)), columns=list('bde'),
.....: index=['Utah', 'Ohio', 'Texas', 'Oregon'])

In [171]:
df1


Out[171]:
b c d
Ohio 0 1 2
Texas 3 4 5
Colorado 6 7 8

In [172]:
df2


Out[172]:
b d e
Utah 0 1 2
Ohio 3 4 5
Texas 6 7 8
Oregon 9 10 11

In [173]:
df1 + df2


Out[173]:
b c d e
Colorado NaN NaN NaN NaN
Ohio 3 NaN 6 NaN
Oregon NaN NaN NaN NaN
Texas 9 NaN 12 NaN
Utah NaN NaN NaN NaN

In [174]:
#using fill_value
df1.add(df2, fill_value=0)


Out[174]:
b c d e
Colorado 6 7 8 NaN
Ohio 3 1 6 5
Oregon 9 NaN 10 11
Texas 9 4 12 8
Utah 0 NaN 1 2

In [175]:
df2.add(df1, fill_value=0)


Out[175]:
b c d e
Colorado 6 7 8 NaN
Ohio 3 1 6 5
Oregon 9 NaN 10 11
Texas 9 4 12 8
Utah 0 NaN 1 2

In [176]:
arr = np.arange(12).reshape(3,4)

In [177]:
arr


Out[177]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [178]:
arr - arr[0]


Out[178]:
array([[0, 0, 0, 0],
       [4, 4, 4, 4],
       [8, 8, 8, 8]])

In [179]:
frame = DataFrame(np.random.randn(4, 3), columns=list('bde'),
.....: index=['Utah', 'Ohio', 'Texas', 'Oregon'])

In [180]:
frame


Out[180]:
b d e
Utah -0.020930 0.472987 0.312371
Ohio 0.739105 -0.628984 -0.836897
Texas -1.401973 -0.696622 0.828612
Oregon -0.731777 0.174474 1.075818

In [181]:
np.abs(frame)


Out[181]:
b d e
Utah 0.020930 0.472987 0.312371
Ohio 0.739105 0.628984 0.836897
Texas 1.401973 0.696622 0.828612
Oregon 0.731777 0.174474 1.075818

In [182]:
f = lambda x: x.max() - x.min()

In [183]:
frame.apply(f)


Out[183]:
b    2.141078
d    1.169608
e    1.912715
dtype: float64

In [184]:
frame.apply(f, axis=1)


Out[184]:
Utah      0.493917
Ohio      1.576002
Texas     2.230586
Oregon    1.807595
dtype: float64

In [185]:
format = lambda x: '%.2f' % x

In [186]:
frame.applymap(format)


Out[186]:
b d e
Utah -0.02 0.47 0.31
Ohio 0.74 -0.63 -0.84
Texas -1.40 -0.70 0.83
Oregon -0.73 0.17 1.08

In [187]:
frame


Out[187]:
b d e
Utah -0.020930 0.472987 0.312371
Ohio 0.739105 -0.628984 -0.836897
Texas -1.401973 -0.696622 0.828612
Oregon -0.731777 0.174474 1.075818

In [188]:
frame = DataFrame(np.arange(8).reshape((2, 4)), index=['three', 'one'],
.....: columns=['d', 'a', 'b', 'c'])

In [189]:
frame


Out[189]:
d a b c
three 0 1 2 3
one 4 5 6 7

In [191]:
frame.sort_index()


Out[191]:
d a b c
one 4 5 6 7
three 0 1 2 3

In [192]:
frame.sort_index(axis=1)


Out[192]:
a b c d
three 1 2 3 0
one 5 6 7 4

In [193]:
frame.sort_index(axis=1, ascending=False)


Out[193]:
d c b a
three 0 3 2 1
one 4 7 6 5

In [194]:
frame


Out[194]:
d a b c
three 0 1 2 3
one 4 5 6 7

In [195]:
#On DataFrame, you may want to sort by the values in one or more columns. To do so,
#pass one or more column names to the by option:
frame = DataFrame({'b': [4, 7, -3, 2], 'a': [0, 1, 0, 1]})

In [196]:
frame


Out[196]:
a b
0 0 4
1 1 7
2 0 -3
3 1 2

In [197]:
frame.sort_index(by='b')


/usr/local/lib/python2.7/dist-packages/ipykernel/__main__.py:1: FutureWarning: by argument to sort_index is deprecated, pls use .sort_values(by=...)
  if __name__ == '__main__':
Out[197]:
a b
2 0 -3
3 1 2
0 0 4
1 1 7

In [200]:
frame.sort_values('b', ascending=False)


Out[200]:
a b
1 1 7
0 0 4
3 1 2
2 0 -3

In [203]:
frame.sort_values(['b','a'])


Out[203]:
a b
2 0 -3
3 1 2
0 0 4
1 1 7

In [204]:
frame = DataFrame({'b': [4.3, 7, -3, 2], 'a': [0, 1, 0, 1],
.....: 'c': [-2, 5, 8, -2.5]})

In [205]:
frame


Out[205]:
a b c
0 0 4.3 -2.0
1 1 7.0 5.0
2 0 -3.0 8.0
3 1 2.0 -2.5

In [207]:
frame.rank(axis=0)


Out[207]:
a b c
0 1.5 3 2
1 3.5 4 3
2 1.5 1 4
3 3.5 2 1

In [208]:
frame.rank(axis=1)


Out[208]:
a b c
0 2 3 1
1 1 3 2
2 2 1 3
3 2 3 1

In [209]:
frame.index.is_unique


Out[209]:
True

In [210]:
obj = Series(range(5), index=['a', 'a', 'b', 'b', 'c'])

In [211]:
obj.index.is_unique


Out[211]:
False

In [212]:
obj['a']


Out[212]:
a    0
a    1
dtype: int64

In [213]:
obj['c']


Out[213]:
4

In [214]:
df = DataFrame(np.random.randn(4, 3), index=['a', 'a', 'b', 'b'])

In [215]:
df


Out[215]:
0 1 2
a -0.761591 -0.789025 0.086831
a 0.477776 0.490098 -0.589181
b 0.142717 -0.132010 0.734594
b -0.724925 1.460368 1.014018

In [216]:
df.ix['b']


Out[216]:
0 1 2
b 0.142717 -0.132010 0.734594
b -0.724925 1.460368 1.014018

In [217]:
df.ix['a']


Out[217]:
0 1 2
a -0.761591 -0.789025 0.086831
a 0.477776 0.490098 -0.589181

In [218]:
df.describe()


Out[218]:
0 1 2
count 4.000000 4.000000 4.000000
mean -0.216506 0.257358 0.311566
std 0.623612 0.957066 0.715132
min -0.761591 -0.789025 -0.589181
25% -0.734092 -0.296264 -0.082172
50% -0.291104 0.179044 0.410713
75% 0.226482 0.732665 0.804450
max 0.477776 1.460368 1.014018

In [219]:
df.quantile


Out[219]:
<bound method DataFrame.quantile of           0         1         2
a -0.761591 -0.789025  0.086831
a  0.477776  0.490098 -0.589181
b  0.142717 -0.132010  0.734594
b -0.724925  1.460368  1.014018>

In [220]:
data = DataFrame({'Qu1': [1, 3, 4, 3, 4],
.....: 'Qu2': [2, 3, 1, 2, 3],
.....: 'Qu3': [1, 5, 2, 4, 4]})

In [221]:
data


Out[221]:
Qu1 Qu2 Qu3
0 1 2 1
1 3 3 5
2 4 1 2
3 3 2 4
4 4 3 4

In [224]:
data.apply(pd.value_counts)


Out[224]:
Qu1 Qu2 Qu3
1 1 1 1
2 NaN 2 1
3 2 2 NaN
4 2 NaN 2
5 NaN NaN 1

In [225]:
data.apply(pd.value_counts).fillna(0)


Out[225]:
Qu1 Qu2 Qu3
1 1 1 1
2 0 2 1
3 2 2 0
4 2 0 2
5 0 0 1

In [251]:
data.apply(pd.value_counts, axis=1).fillna(999)


Out[251]:
1 2 3 4 5
0 2 1 999 999 999
1 999 999 2 999 1
2 1 1 999 1 999
3 999 1 1 1 999
4 999 999 1 2 999

In [233]:
print data['Qu1'].value_counts()
print data['Qu2'].value_counts()
print data['Qu3'].value_counts()


4    2
3    2
1    1
Name: Qu1, dtype: int64
3    2
2    2
1    1
Name: Qu2, dtype: int64
4    2
5    1
2    1
1    1
Name: Qu3, dtype: int64

In [236]:
data.apply(np.min, axis=0)


Out[236]:
Qu1    1
Qu2    1
Qu3    1
dtype: int64

In [237]:
data.apply(np.max, axis=0)


Out[237]:
Qu1    4
Qu2    3
Qu3    5
dtype: int64

In [ ]:


In [249]:
np.min(data.apply(np.min, axis=0).values) , np.min(data.apply(np.max, axis=0).values)


Out[249]:
(1, 3)

In [252]:
In [234]: from numpy import nan as NA
In [235]: data = Series([1, NA, 3.5, NA, 7])
In [236]: data.dropna()


Out[252]:
0    1.0
2    3.5
4    7.0
dtype: float64

In [253]:
data.notnull()


Out[253]:
0     True
1    False
2     True
3    False
4     True
dtype: bool

In [254]:
data[data.notnull()]


Out[254]:
0    1.0
2    3.5
4    7.0
dtype: float64

In [270]:
In [238]: data = DataFrame([[1., 6.5, 3.], [1., NA, NA],
.....: [NA, NA, NA], [NA, 6.5, 3.]])
In [239]: cleaned = data.dropna()
In [240]: data 
In [241]: cleaned


Out[270]:
0 1 2
0 1 6.5 3

In [260]:
#Passing how='all' will only drop rows that are all NA:
data.dropna(how='all')


Out[260]:
0 1 2
0 1 6.5 3
1 1 NaN NaN
3 NaN 6.5 3

In [261]:
data.dropna(how='all', axis=1)


Out[261]:
0 1 2
0 1 6.5 3
1 1 NaN NaN
2 NaN NaN NaN
3 NaN 6.5 3

In [262]:
data.fillna(999)


Out[262]:
0 1 2
0 1 6.5 3
1 1 999.0 999
2 999 999.0 999
3 999 6.5 3

In [265]:
data.fillna(0, inplace=True)
print data


   0    1  2
0  1  6.5  3
1  1  0.0  0
2  0  0.0  0
3  0  6.5  3

In [266]:
In [254]: df = DataFrame(np.random.randn(6, 3))
In [255]: df.ix[2:, 1] = NA; df.ix[4:, 2] = NA
In [256]: df


Out[266]:
0 1 2
0 -1.242796 -0.106508 -0.244257
1 -0.481473 -0.687986 -1.320112
2 -1.287796 NaN 1.897977
3 0.285982 NaN -0.938475
4 -0.683950 NaN NaN
5 -0.570093 NaN NaN

In [267]:
df.fillna(method='ffill')


Out[267]:
0 1 2
0 -1.242796 -0.106508 -0.244257
1 -0.481473 -0.687986 -1.320112
2 -1.287796 -0.687986 1.897977
3 0.285982 -0.687986 -0.938475
4 -0.683950 -0.687986 -0.938475
5 -0.570093 -0.687986 -0.938475

In [268]:
df.fillna(method='bfill')


Out[268]:
0 1 2
0 -1.242796 -0.106508 -0.244257
1 -0.481473 -0.687986 -1.320112
2 -1.287796 NaN 1.897977
3 0.285982 NaN -0.938475
4 -0.683950 NaN NaN
5 -0.570093 NaN NaN

In [271]:
data.fillna(data.mean())


Out[271]:
0 1 2
0 1 6.5 3
1 1 6.5 3
2 1 6.5 3
3 1 6.5 3

In [272]:
data


Out[272]:
0 1 2
0 1 6.5 3
1 1 NaN NaN
2 NaN NaN NaN
3 NaN 6.5 3

In [273]:
data.mean()


Out[273]:
0    1.0
1    6.5
2    3.0
dtype: float64

In [274]:
data.fillna(data.mean(axis=1))


Out[274]:
0 1 2
0 1.0 6.5 3
1 1.0 1.0 NaN
2 3.5 1.0 NaN
3 3.5 6.5 3

In [275]:
In [261]: data = Series(np.random.randn(10),
.....: index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'],
.....: [1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])

In [276]:
data


Out[276]:
a  1   -1.233345
   2   -0.615976
   3   -2.006676
b  1   -1.220110
   2   -0.049651
   3   -0.431170
c  1    0.416579
   2    0.845027
d  2    1.163647
   3    0.394060
dtype: float64

In [281]:
# one more level indexing
In [261]: data = Series(np.random.randn(10),
.....: index=[['p','p','p','p','p','p','q','q','q','q'],['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'],
.....: [1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])

In [282]:
data


Out[282]:
p  a  1    1.216532
      2    1.706598
      3    0.624417
   b  1    1.147764
      2    0.326635
      3   -1.231693
q  c  1    0.277658
      2   -0.792676
   d  2   -1.856429
      3   -0.755763
dtype: float64

In [283]:
data['p']


Out[283]:
a  1    1.216532
   2    1.706598
   3    0.624417
b  1    1.147764
   2    0.326635
   3   -1.231693
dtype: float64

In [285]:
data['p']['a']


Out[285]:
1    1.216532
2    1.706598
3    0.624417
dtype: float64

In [286]:
data.index


Out[286]:
MultiIndex(levels=[[u'p', u'q'], [u'a', u'b', u'c', u'd'], [1, 2, 3]],
           labels=[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 1, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 1, 2]])

In [288]:
data.ix[['p']]


Out[288]:
p  a  1    1.216532
      2    1.706598
      3    0.624417
   b  1    1.147764
      2    0.326635
      3   -1.231693
dtype: float64

In [290]:
data[:,:, 2]


Out[290]:
p  a    1.706598
   b    0.326635
q  c   -0.792676
   d   -1.856429
dtype: float64

In [291]:
type(data)


Out[291]:
pandas.core.series.Series

In [294]:
print type(data.unstack())
data.unstack()


<class 'pandas.core.frame.DataFrame'>
Out[294]:
1 2 3
p a 1.216532 1.706598 0.624417
b 1.147764 0.326635 -1.231693
q c 0.277658 -0.792676 NaN
d NaN -1.856429 -0.755763

In [296]:
data.unstack().stack()


Out[296]:
p  a  1    1.216532
      2    1.706598
      3    0.624417
   b  1    1.147764
      2    0.326635
      3   -1.231693
q  c  1    0.277658
      2   -0.792676
   d  2   -1.856429
      3   -0.755763
dtype: float64

In [301]:
In [270]: frame = DataFrame(np.arange(12).reshape((4, 3)),
.....: index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
.....: columns=[['Ohio', 'Ohio', 'Colorado'],
.....: ['Green', 'Red', 'Green']])

In [302]:
frame


Out[302]:
Ohio Colorado
Green Red Green
a 1 0 1 2
2 3 4 5
b 1 6 7 8
2 9 10 11

In [303]:
In [281]: frame = DataFrame({'a': range(7), 'b': range(7, 0, -1),
.....: 'c': ['one', 'one', 'one', 'two', 'two', 'two', 'two'],
.....: 'd': [0, 1, 2, 0, 1, 2, 3]})
In [282]: frame


Out[303]:
a b c d
0 0 7 one 0
1 1 6 one 1
2 2 5 one 2
3 3 4 two 0
4 4 3 two 1
5 5 2 two 2
6 6 1 two 3

In [304]:
frame2 = frame.set_index(['c','d'])

In [305]:
frame2


Out[305]:
a b
c d
one 0 0 7
1 1 6
2 2 5
two 0 3 4
1 4 3
2 5 2
3 6 1

In [ ]: