博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用python进行数据分析--pandas入门1
阅读量:4581 次
发布时间:2019-06-09

本文共 8372 字,大约阅读时间需要 27 分钟。

随书练习,第五章  pandas入门1

# coding: utf-8# In[1]:from pandas import Series, DataFrame# In[2]:import pandas as pd# In[3]:import numpy as np# In[4]:obj = Series([4,7,-5,3])# In[5]:obj# In[6]:obj.values# In[7]:obj.index# In[8]:obj2 = Series([4,7,-5,3],index=['d','b','a','c'])# In[9]:obj2# In[10]:obj2.index# In[11]:obj2['a']# In[12]:obj2['d'] = 6 #给索引'd'位置赋值6# In[13]:obj2[['c','a','d']]# In[14]:obj2# In[15]:obj2[obj2 > 0]# In[16]:obj2*2# In[17]:np.exp(obj2)# In[18]:'b' in obj2 #将Series看做定长有序字典# In[19]:'e' in obj2# In[20]:sdata = {
'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000} #字典是无序的# In[21]:obj3 = Series(sdata)# In[22]:obj3# In[23]:states = ['California','Ohio','Oregon','Texas']# In[24]:obj4 = Series(sdata, index=states)# In[25]:obj4# In[26]:pd.isnull(obj4) #用于检测缺失数据# In[27]:pd.notnull(obj4)# In[28]:obj4.isnull()# In[29]:obj3# In[30]:obj4# In[31]:obj3+obj4 #自动对齐不同索引的数据# In[32]:obj4.name = 'population'# In[33]:obj4.index.name = 'state'# In[34]:obj4# In[35]:obj.index = ['Bob','Steve','Jeff','Ryan'] #Series索引可以通过赋值的方式就地修改# In[36]:obj# In[37]: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[38]:frame# In[39]:DataFrame(data,columns=['year','state','pop']) #指定列顺序# In[40]:frame2 = DataFrame(data,columns=['year','state','pop','debt'],index=['one','two','three','four','five'])# In[41]:frame2# In[42]:frame2.columns# In[43]:frame2['state'] #列获取:字典标记方式# In[44]:frame2.year #列获取:属性方式# In[45]:frame2.loc['three'] #行获取:利用索引# In[46]:frame2['debt'] = 16.5 #通过赋值的方式修改列# In[47]:frame2# In[48]:frame2['debt'] = np.arange(5)# In[49]:frame2# In[50]:val = Series([-1.2,-1.5,-1.7],index=['two','four','five']) #将Series赋值给DataFrame的列,精确匹配索引# In[51]:frame2['debt'] = val# In[52]:frame2# In[53]:val1 = ([1,2,3,2,1]) # In[54]:frame2['debt'] = val1 #将数组赋值给DataFrame的某一列,长度必须一致# In[55]:frame2# In[56]:frame2['eastern'] = frame2.state == 'Ohio' #为不存在的列赋值可以创建一个新列# In[57]:frame2# In[58]:del frame2['eastern'] #关键字del用于删除列# In[59]:frame2.columns# In[60]:pop = {
'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}} #嵌套字典# In[61]:frame3 = DataFrame(pop)# In[62]:frame3# In[63]:frame3.T# In[64]:DataFrame(pop,index=[2001,2001,2003])# In[65]:pdata = {
'Ohio':frame3['Ohio'][:-1],'Nevada':frame3['Nevada'][:2]}# In[66]:DataFrame(pdata)# In[67]:frame3.index.name = 'year';frame3.columns.name = 'state'# In[68]:frame3# In[69]:frame3.values #values属性# In[70]:frame2.values #各列数据类型不同,选择能兼容所有的类型# In[71]:obj = Series(range(3),index=['a','b','c'])# In[72]:index = obj.index# In[73]:index# In[74]:index[1:]# In[75]:#index[1] = 'd' #索引不可修改# In[76]:index = (['x', 'y', 'z'])# In[77]:index# In[78]:index[1] = 'd'# In[79]:index# In[80]:obj.index = (['x', 'y', 'z']) #通过赋值的方式整个可以全部改# In[81]:obj.index# In[82]:#obj.index[1] = 'd' #索引不可修改# In[83]:index = pd.Index(np.arange(3))# In[84]:obj2 = Series([1.5,-2.5,0],index=index)# In[85]:obj2.index is index# In[86]:frame3# In[87]:'Ohio' in frame3.columns# In[88]:2003 in frame3.index# In[89]:frame3.index.is_unique #index的方法和属性# In[90]:frame3.index.is_monotonic # 当各元素均大于等于前一个元素时,返回True# In[91]:frame3.index.drop([2002])# In[92]:frame3.index.insert(2,2002)# In[93]:obj = Series([4.5,7.2,-5.3,3.6],index=['d','b','a','c'])# In[94]:obj# In[95]:obj2 = obj.reindex(['a','b','c','d','e']) #Series的重新索引# In[96]:obj2# In[97]:obj.reindex(['a','b','c','d','e'],fill_value=0) #缺失值处理# In[98]:obj3 = Series(['blue','purple','yellow'],index=[0,2,4])# In[99]:obj3.reindex(range(6),method='ffill') #插值处理(只能按行应用):method选项:ffill或pad向前填充;bfill或backfill向后填充# In[100]:frame = DataFrame(np.arange(9).reshape((3,3)),index=['a','c','d'],columns=['Ohio','Texas','California'])# In[101]:frame# In[102]:frame2 = frame.reindex(['a','b','c','d']) #DataFrame的重新索引,只传入一个序列,默认为行# In[103]:frame2# In[104]:states = ['Texas','Utah','California']# In[105]:frame.reindex(columns=states)# In[106]:#frame.reindex(index=['a','b','c','d'],method='ffill',columns=states) #行列不能同时重新索引,会报错,或者把method选项去掉也行# In[107]:frame.loc[['a','b','c','d'],states]# In[108]:obj = Series(np.arange(5),index=['a','b','c','d','e'])# In[109]:new_obj = obj.drop('c')# In[110]:new_obj# In[111]:obj.drop(['d','c'])# In[112]:data = DataFrame(np.arange(16).reshape((4,4)),index=['Ohio','Colorado','Utah','New York'],columns=['one','two','three','four'])# In[113]:data.drop(['Colorado','Ohio']) #默认为行# In[114]:data.drop('two',axis=1)# In[115]:data.drop(['two','four'],axis=1)# In[116]:#索引、选取、过滤# In[117]:obj = Series(np.arange(4),index=['a','b','c','d']) #以下是对Series进行索引# In[118]:obj['b'] #按索引标签# In[119]:obj[1] #按位置# In[120]:obj[2:4] #切片,按位置,末端不包含# In[121]:obj[['b','a','d']] #按索引# In[122]:obj[[1,3]]# In[123]:obj[obj < 2]# In[124]:obj['b':'c'] # 按照索引标签的切片,末端包含# In[125]:obj['b':'c'] = 5# In[126]:obj# In[127]:data = DataFrame(np.arange(16).reshape((4,4)),index=['Ohio','Colorado','Utah','New York'],columns=['one','two','three','four'])# In[128]:data #以下是对DataFrame的索引# In[129]:data['two']# In[130]:data[['three','one']] #获取列,因为选取列的操作更常见# In[131]:data[:2] #按位置索引:通过切片选取行# In[132]:data[data['three']>5] #通过布尔型数组选取行# In[133]:data < 5# In[134]:data[data<5] = 0# In[135]:data# In[136]:data.loc['Colorado',['two','three']]# In[137]:data.iloc[data.index.get_indexer(['Colorado','Utah']),[3,0,1]] ##天啊,同时选取行列,且一个为标签一个为位置#For getting multiple indexers, using .get_indexer# In[138]:data.ix[['Colorado','Utah'],[3,0,1]] # In[139]:data.iloc[2]# In[140]:data.loc[:'Utah','two'] #标签,末端包含# In[141]:data.ix[data.three > 5, :3]# In[142]:s1 = Series([7.3,-2.5,3.4,1.5],index=['a','c','d','e'])# In[143]:s2 = Series([-2.1,3.6,-1.5,4,3.1],index=['a','c','e','f','g'])# In[144]:s1# In[145]:s2# In[146]:s1+s2 #自动对齐,缺失值在算数运算中传播# In[147]:df1 = DataFrame(np.arange(9).reshape((3,3)),columns=list('bcd'),index=['Ohio','Texas','Colorado'])# In[148]:df2 = DataFrame(np.arange(12).reshape((4,3)),columns=list('bde'),index=['Utah','Ohio','Texas','Oregon'])# In[149]:df1# In[150]:df2# In[151]:df1+df2# In[160]:df1 = DataFrame(np.arange(12).reshape((3,4)),columns=list('abcd'))# In[158]:df2 = DataFrame(np.arange(20).reshape((4,5)),columns=list('abcde'))# In[161]:df1# In[159]:df2# In[163]:df1 + df2# In[165]:df1.add(df2, fill_value=0)# In[166]:df1.reindex(columns=df2.columns,fill_value=0) #重新索引# In[167]:# add加法,sub减法,div除法,mul乘法# In[169]:arr = np.arange(12).reshape((3,4))# In[170]:arr# In[171]:arr[0]# In[173]:arr - arr[0] #广播# In[174]:frame = DataFrame(np.arange(12).reshape((4,3)),columns=list('bde'),index=['Utah','Ohio','Texas','Oregon'])# In[175]:series = frame.iloc[0]# In[176]:frame# In[177]:series# In[178]:frame - series# In[179]:series2 = Series(range(3),index=['b','e','f'])# In[180]:frame + series2 #默认匹配列在行上传播# In[181]:series3 = frame['d']# In[182]:frame# In[183]:series3# In[184]:frame.sub(series3,axis=0) #匹配行在列上广播,传入的轴号是希望匹配的轴# In[185]:frame = DataFrame(np.random.randn(4,3),columns=list('bde'),index=['Utah','Ohio','Texas','Oregon'])# In[186]:frame# In[187]:np.abs(frame) #函数应用在元素级# In[188]:f = lambda x:x.max() - x.min() #匿名函数# In[190]:frame.apply(f) #将函数应用到各行各列所形成的一维数组上# In[191]:frame.apply(f,axis=1)# In[192]:def f(x): return Series([x.min(),x.max()],index=['min','max']) #自定义函数,传递给apply的函数还可以返回Series# In[193]:frame.apply(f)# In[194]:format = lambda x: '%.2f'% x# In[199]:frame.applymap(format)# In[200]:frame['e'].map(format) # In[201]:#apply()是一种让函数作用于列或者行操作,applymap()是一种让函数作用于DataFrame每一个元素的操作,而map是一种让函数作用于Series每一个元素的操作# In[202]:obj = Series(range(4),index=['d','a','b','c'])# In[203]:obj.sort_index() #对索引排序# In[204]:frame = DataFrame(np.arange(8).reshape((2,4)),index=['three','one'],columns=['d','a','b','c'])# In[205]:frame.sort_index()# In[206]:frame.sort_index(axis=1) #可以对任意轴上索引进行排序# In[207]:frame.sort_index(axis=1,ascending=False) #降序# In[208]:obj = Series([4,7,-3,2])# In[212]:obj.sort_values()# In[213]:obj = Series([4,np.nan,7,np.nan,-3,2])# In[214]:obj.sort_values() #任何缺失值默认放在末尾# In[215]:frame = DataFrame({
'b':[4,7,-3,2],'a':[0,1,0,1]})# In[216]:frame# In[218]:frame.sort_values(by='b')# In[221]:frame.sort_values(by=['a','b'])# In[222]:obj = Series([7,-5,7,4,2,0,4])# In[223]:obj.rank() #method='average'# In[224]:obj.rank(method='first')# In[225]:obj.rank(ascending=False,method='max')# In[226]:frame = DataFrame({
'b':[4.3,7,-3,2],'a':[0,1,0,1],'c':[-2,5,8,-2.5]})# In[227]:frame# In[228]:frame.rank(axis=1)

 

转载于:https://www.cnblogs.com/xiyouzhi/p/9600759.html

你可能感兴趣的文章