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]:
In [4]:
print obj.values
print obj.index
In [5]:
obj2 = Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
print obj2
In [6]:
obj2['a']
Out[6]:
In [7]:
obj2['d']
Out[7]:
In [9]:
obj2[['a','d']]
Out[9]:
In [10]:
obj2[obj2>0]
Out[10]:
In [11]:
obj2 * 2
Out[11]:
In [14]:
np.exp(obj2)
Out[14]:
In [15]:
'b' in obj2
Out[15]:
In [16]:
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
In [17]:
sd = Series(sdata)
In [18]:
print sd
In [19]:
type(sdata)
Out[19]:
In [20]:
type(sd)
Out[20]:
In [21]:
sd.keys
Out[21]:
In [22]:
states = ['California', 'Ohio', 'Oregon', 'Texas']
In [23]:
obj4 = Series(sd, index=states)
print obj4
In [25]:
pd.isnull(obj4)
Out[25]:
In [26]:
pd.notnull(obj4)
Out[26]:
In [27]:
#direclty using intance method
obj4.isnull()
Out[27]:
In [28]:
obj4.notnull()
Out[28]:
In [30]:
obj4.name = 'population'
obj4.index.name = 'states'
In [31]:
obj4
Out[31]:
In [32]:
obj
Out[32]:
In [33]:
obj.index= [ 'aa', 'bb','cc','ee']
In [34]:
obj
Out[34]:
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]:
In [38]:
DataFrame(data, columns=['year', 'state', 'pop'])
Out[38]:
In [39]:
frame2 = DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
....: index=['one', 'two', 'three', 'four', 'five'])
In [40]:
frame2
Out[40]:
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]:
In [42]:
type(frame2['state'])
Out[42]:
In [44]:
frame2.state
Out[44]:
In [43]:
type(frame2)
Out[43]:
In [45]:
frame2
Out[45]:
In [48]:
frame2.ix['three']
Out[48]:
In [52]:
frame2.debt=16.5
frame2
Out[52]:
In [53]:
frame2.debt = np.arange(5)
frame2
Out[53]:
In [71]:
frame2['eastern'] = frame2.state =='Ohio'
frame2
Out[71]:
In [72]:
print frame2.eastern
# OR
#print frame2['eastern']
del frame2['eastern']
frame2
Out[72]:
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]:
In [85]:
frame3 = DataFrame(pop)
print frame3
In [81]:
DataFrame(pop).T
Out[81]:
In [83]:
DataFrame(pop, index=[2001, 2005, 2010])
Out[83]:
In [87]:
pdata = {'Ohio': frame3['Ohio'][:-1],
....: 'Nevada': frame3['Nevada'][:2]}
print pdata
In [88]:
type(pdata)
Out[88]:
In [89]:
DataFrame(pdata)
Out[89]:
In [90]:
frame3.index.name = 'year'
frame3.columns.name = 'state'
In [91]:
frame3
Out[91]:
In [92]:
frame3.values
Out[92]:
In [93]:
frame2.values
Out[93]:
In [94]:
obj = Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])
In [95]:
obj
Out[95]:
In [97]:
obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
print obj2
In [98]:
obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value=0)
Out[98]:
In [99]:
obj3 = Series(['blue', 'purple', 'yellow'], index=[0, 2, 4])
In [100]:
obj3
Out[100]:
In [101]:
obj3.reindex(range(6), method='ffill')
Out[101]:
In [103]:
frame = DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'],
....: columns=['Ohio', 'Texas', 'California'])
print frame
In [104]:
frame2 = frame.reindex(['a', 'b', 'c', 'd'])
In [105]:
frame2
Out[105]:
In [106]:
states = ['Texas', 'Utah', 'California']
In [107]:
frame.reindex(columns=states)
Out[107]:
In [108]:
frame.reindex(index=['a', 'b', 'c', 'd'], method='ffill',
....: columns=states)
Out[108]:
In [109]:
frame.ix[['a', 'b', 'c', 'd'], states]
Out[109]:
In [110]:
obj = Series(np.arange(5.), index=['a', 'b', 'c', 'd', 'e'])
In [111]:
obj
Out[111]:
In [112]:
obj.drop('a')
Out[112]:
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]:
In [120]:
#this is not in place
data.drop(['Colorado','Ohio'])
Out[120]:
In [121]:
data.drop('two', axis=1)
Out[121]:
In [122]:
data.drop('Utah', axis=0)
Out[122]:
In [123]:
data.drop(['Ohio','Utah'], axis=0)
Out[123]:
In [124]:
obj = Series(np.arange(4.), index=['a', 'b', 'c', 'd'])
In [125]:
obj
Out[125]:
In [127]:
obj[2]
Out[127]:
In [129]:
obj['c']
Out[129]:
In [130]:
obj[['a','d']]
Out[130]:
In [132]:
obj[[0,3]]
Out[132]:
In [133]:
obj['b':'c']
Out[133]:
In [134]:
obj
Out[134]:
In [135]:
obj['b':'c'] =5
In [136]:
obj
Out[136]:
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]:
In [139]:
data['two']
Out[139]:
In [140]:
data[:2]
Out[140]:
In [141]:
data[data['three'] > 5]
Out[141]:
In [143]:
data['two'] <= 5
Out[143]:
In [146]:
data <= 5
Out[146]:
In [147]:
data.ix['Colorado', ['two', 'three']]
Out[147]:
In [152]:
data[['two','three']]
Out[152]:
In [153]:
data.ix[2]
Out[153]:
In [163]:
print data.ix[:'Utah', 'two']
# OR
print "OR - usng direct implicit indexing"
print data.ix[:3, 1]
In [165]:
print data.ix['Utah','two']
# OR using implicit indexing
print data.ix[2, 1]
In [157]:
data
Out[157]:
In [168]:
data.ix[data.three >=5, :3]
Out[168]:
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]:
In [172]:
df2
Out[172]:
In [173]:
df1 + df2
Out[173]:
In [174]:
#using fill_value
df1.add(df2, fill_value=0)
Out[174]:
In [175]:
df2.add(df1, fill_value=0)
Out[175]:
In [176]:
arr = np.arange(12).reshape(3,4)
In [177]:
arr
Out[177]:
In [178]:
arr - arr[0]
Out[178]:
In [179]:
frame = DataFrame(np.random.randn(4, 3), columns=list('bde'),
.....: index=['Utah', 'Ohio', 'Texas', 'Oregon'])
In [180]:
frame
Out[180]:
In [181]:
np.abs(frame)
Out[181]:
In [182]:
f = lambda x: x.max() - x.min()
In [183]:
frame.apply(f)
Out[183]:
In [184]:
frame.apply(f, axis=1)
Out[184]:
In [185]:
format = lambda x: '%.2f' % x
In [186]:
frame.applymap(format)
Out[186]:
In [187]:
frame
Out[187]:
In [188]:
frame = DataFrame(np.arange(8).reshape((2, 4)), index=['three', 'one'],
.....: columns=['d', 'a', 'b', 'c'])
In [189]:
frame
Out[189]:
In [191]:
frame.sort_index()
Out[191]:
In [192]:
frame.sort_index(axis=1)
Out[192]:
In [193]:
frame.sort_index(axis=1, ascending=False)
Out[193]:
In [194]:
frame
Out[194]:
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]:
In [197]:
frame.sort_index(by='b')
Out[197]:
In [200]:
frame.sort_values('b', ascending=False)
Out[200]:
In [203]:
frame.sort_values(['b','a'])
Out[203]:
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]:
In [207]:
frame.rank(axis=0)
Out[207]:
In [208]:
frame.rank(axis=1)
Out[208]:
In [209]:
frame.index.is_unique
Out[209]:
In [210]:
obj = Series(range(5), index=['a', 'a', 'b', 'b', 'c'])
In [211]:
obj.index.is_unique
Out[211]:
In [212]:
obj['a']
Out[212]:
In [213]:
obj['c']
Out[213]:
In [214]:
df = DataFrame(np.random.randn(4, 3), index=['a', 'a', 'b', 'b'])
In [215]:
df
Out[215]:
In [216]:
df.ix['b']
Out[216]:
In [217]:
df.ix['a']
Out[217]:
In [218]:
df.describe()
Out[218]:
In [219]:
df.quantile
Out[219]:
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]:
In [224]:
data.apply(pd.value_counts)
Out[224]:
In [225]:
data.apply(pd.value_counts).fillna(0)
Out[225]:
In [251]:
data.apply(pd.value_counts, axis=1).fillna(999)
Out[251]:
In [233]:
print data['Qu1'].value_counts()
print data['Qu2'].value_counts()
print data['Qu3'].value_counts()
In [236]:
data.apply(np.min, axis=0)
Out[236]:
In [237]:
data.apply(np.max, axis=0)
Out[237]:
In [ ]:
In [249]:
np.min(data.apply(np.min, axis=0).values) , np.min(data.apply(np.max, axis=0).values)
Out[249]:
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]:
In [253]:
data.notnull()
Out[253]:
In [254]:
data[data.notnull()]
Out[254]:
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]:
In [260]:
#Passing how='all' will only drop rows that are all NA:
data.dropna(how='all')
Out[260]:
In [261]:
data.dropna(how='all', axis=1)
Out[261]:
In [262]:
data.fillna(999)
Out[262]:
In [265]:
data.fillna(0, inplace=True)
print data
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]:
In [267]:
df.fillna(method='ffill')
Out[267]:
In [268]:
df.fillna(method='bfill')
Out[268]:
In [271]:
data.fillna(data.mean())
Out[271]:
In [272]:
data
Out[272]:
In [273]:
data.mean()
Out[273]:
In [274]:
data.fillna(data.mean(axis=1))
Out[274]:
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]:
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]:
In [283]:
data['p']
Out[283]:
In [285]:
data['p']['a']
Out[285]:
In [286]:
data.index
Out[286]:
In [288]:
data.ix[['p']]
Out[288]:
In [290]:
data[:,:, 2]
Out[290]:
In [291]:
type(data)
Out[291]:
In [294]:
print type(data.unstack())
data.unstack()
Out[294]:
In [296]:
data.unstack().stack()
Out[296]:
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]:
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]:
In [304]:
frame2 = frame.set_index(['c','d'])
In [305]:
frame2
Out[305]:
In [ ]: