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()