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