【機器學習】Numpy&Pandas 快速入門筆記
阿新 • • 發佈:2018-04-06
Numpy Pandas Numpy&Pandas 快速入門筆記
Xu An 2018-4-6
######Numpy部分######
1、創建array
import numpy as np
a=np.array([[2,23,4],[21,3,43],[34,43,234]],dtype=np.int32) #創建矩陣 使用dtype進行數組內容格式的規定,默認為int64,通常來說位數越小占用空間越小 print(a,a.dtype) b=np.zeros((3,5)) #按照行列的形式用0填充整個矩陣 print(b) c=np.ones((3,5)) #生成單位矩陣 print(c) d=np.arange(0,12,1).reshape((3,4)) #用arange生成從1開始,12結束(不含),步長為1的行矩陣 #reshape 進行行矩陣的二維化(行,列) print(d) e=np.linspace(1,10,6) #將(start,stop,step)從start到stop均分,生成step個點,被劃分為step-1個線段 print(e)
2、numpy基礎運算
a=np.array([10,20,30,40]) b=np.arange(4) print(a,b) c=a-b #矩陣加減法 print(c) a=np.array([10,20,30,40]).reshape(2,2) b=np.arange(4).reshape(2,2) print(a*b) #只能進行矩陣的加減法運算或逐個乘法(不按照矩陣原則進行乘法運算) print(np.dot(a,b)) #如果是矩陣乘法需要使用dot()進行矩陣的運算(只對二維) print(a.dot(b)) #如果a已經為矩陣,則可以使用a.dot(b)進行矩陣運算 print(a==3) #判斷每個數據與目標的大小情況,返回布爾類型 a=np.random.random((2,4)) #其會隨機生成數字並進行reshape print(a) print(np.max(a)) #找到矩陣中的最大元素max,最小元素min print(np.sum(a,axis=1)) #當axis=0時,在列數中求和,axis=1時,在行數中求和 a=np.arange(2,14).reshape(3,4) print(a) print(np.argmin(a)) #輸出整個矩陣最小元素的索引值 print(np.argmax(a)) #整個矩陣最大元素的索引值 print(np.average(a)) #整個矩陣所有元素的平均值 print(np.median(a)) #求中位數 print(np.cumsum(a)) #累加器,輸出一個數組,每一個是前面的和 print(np.diff(a)) #後面一個和前面一個的差 print(np.nonzero) #? print(np.sort(a)) #將矩陣進行逐行排序 b=np.transpose(a) #矩陣的轉置 print(np.clip(b,3,4)) #clip 將所選矩陣小於3的變為3,大於4的變為4,之間的值不發生變化
3、numpy的索引
a=np.arange(3,15).reshape(3,4) print(a[2][3]) #索引出該位置的值(不能將索引值降維) print(a.flatten()) #將矩陣降維變成一維矩陣
4、array的合並
a=np.array([1,1,1]) b=np.array([2,2,2]) print(np.vstack((a,b))) #vertical stack(垂直堆棧,將兩個行矩陣垂直放置) print(np.hstack((a,b))) #horizontial stack (水平堆棧,兩個行矩陣進行左右合並) print(a[:,np.newaxis]) #在縱向加入一個維度,使其變成垂直數組 也可以使用reshape(3,1) c=np.concatenate((a,b,a,c),axis=0) #在縱向維度對每一個元素進行合並
5、array的分割
a=np.arange(12).reshape(3,4) print(a) print(np.split(a,4,axis=1)) #對矩陣進行等量分割,axis=1為列分割,axis=0時為行分割 print(np.array_split(a,3,axis=1)) #使用array_split可以將矩陣進行不相等分割 print(np.vsplit(a,3)) #對矩陣進行橫向或者縱向等量分割 print(np.hsplit(a,2))
6、numpy的copy&deep copy
a=np.arange(4) b=a #賦值是b就是a,b拷貝了a的地址 c=a d=b a[0]=100 print(a) print(b) print(d is a) b=a.copy() #深拷貝,拷貝的是地址
######pandas部分######
import pandas as pd
1、pandas基礎
s=pd.Series([1,3,6,np.nan,44,1]) print(s) #pandas會給列表元素加上序號和dtype dataes=pd.date_range('20180101',periods=6) #按順序打印日期 print(dataes) df=pd.DataFrame(np.random.randn(6,4),index=dataes,columns=['a','b','c','d']) #將數據進行名稱化,index是行名稱,colums是列名稱 df=pd.DataFrame(np.arange(12).reshape(3,4)) #默認行標、列表從0開始,或者使用字典導入 print(df) print(df.dtypes) #輸出每個元素的類型 print(df.index) #輸出值(value) 行標(index) 列標(columns) print(df.T) #轉置 print(df.sort_index(axis=0,ascending=False)) #對列標進行倒序排序 # print(df.sort_values(by="")) 針對某一個字段進行排序 #panda設置值 datas=pd.date_range('20130101',periods=6) df=pd.DataFrame(np.arange(24).reshape((6,4)),index=datas,columns=['A','B','C','D']) df.iloc[2,2]=1111 #使用iloc對第三行第三列的數值進行重新賦值 df.loc['20130101','B']=2222 #通過行列標題對其進行重新賦值 df.A[df.A>4]=0 #將A列所有值大於4的值賦值為0 df['E']=pd.Series([1,2,3,4,5,6],index=pd.date_range('20130101',periods=6)) #加入一行 df['F']=pd.Series([1,2,3,4,5,6],index=pd.date_range('20130101',periods=6)) print(df)
2、處理缺失數據
df.iloc[0,1]=np.nan df.iloc[1,2]=np.nan print(df) print(df.dropna(axis=0,how='any')) #how={'any','all'}any是只要行中有null就丟棄行,all是僅當一行全部為null時才丟棄該行 print(df.fillna(value=0)) #將所有null值賦值為0 print(df.isnull()) #使用null方法,判斷元素是否為null,返回布爾值 print(np.any(df.isnull())==True) #判斷數據列表中是否有任意一個為null
3、數據導出導出
#pandas可以導入多種數據原,csv,excel,hdf,sql,json,msgpack,html,gbq,stata,sas,clipboard,pickle # data=pd.read_csv('class _list.csv') #使用read_csv讀取csv格式的文件,並在讀取時加入一個索引 # print(data) # data.to_pickle('class _list.pickle') #使用to_pickle將變量存取
4、合並多個數據
#concatenating df1=pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d']) df2=pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d']) df3=pd.DataFrame(np.ones((3,4))*2,columns=['a','b','c','d']) print(df1) print(df2) print(df3) res=pd.concat([df1,df2,df3],axis=0,ignore_index=True) #使用concat對三個矩陣進行合並(axis=0為縱向合並,1為橫向合並) #ignore_index=True可以忽略之前的標號,對數據進行重新排序 print(res) #join,['inner','outer'] df1=pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'],index=[1,2,3]) df2=pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'],index=[2,3,4]) res=pd.concat([df1,df2],join='outer') print(res) res=pd.concat([df1,df2],join='inner') print(res)
5、合並數據 merge
#merging two df by keys left=pd.DataFrame({'key':['KO','K1','K2','K3'], 'A':['A0','A1','A2','A3'], 'B':['B0','B1','B2','B3'] }) right=pd.DataFrame({'key':['KO','K1','K2','K3'], 'C':['C0','C1','C2','C3'], 'D':['D0','D1','D2','D3'] }) print(left) print(right) res=pd.merge(left,right,on='key') print(res) #通過key進行合並 # #consider two keys # left=pd.DataFrame({'key1':['KO','K1','K2','K3'], # 'A':['A0','A1','A2','A3'], # 'B':['B0','B1','B2','B3'] # }) # right=pd.DataFrame({'key2':['KO','K1','K2','K3'], # 'C':['C0','C1','C2','C3'], # 'D':['D0','D1','D2','D3'] # }) # res=pd.merge(left,right,on=['key1','key2'],how='inner') # print(res)
6、pandas的數據可視化
import matplotlib.pyplot as plt data =pd.Series(np.random.randn(1000),index=np.arange(1000)) data=data.cumsum() data.plot() plt.show() data=pd.DataFrame(np.random.randn(1000,4),index=np.arange(1000),columns=list('ABCD')) data=data.cumsum() #plot的方法 #bar\hist\box\kde\area\scatter\hexbin\pie ax=data.plot.scatter(x='A',y='B',color="DarkBlue",label='Class1') #scatter 散點圖 data.plot.scatter(x="A",y='C',color="DarkGreen",label='class2',ax=ax) plt.show()
【機器學習】Numpy&Pandas 快速入門筆記