1.numpy属性:创建&运算
1.创建矩阵:
import numpy as np
array=np.array([[1,2,3],
[2,3,4]])
print(array)
print(array.ndim)#几维数组?
print(array.shape)#几行几列?
print(array.size)#多少个元素?
a=np.array([2,3,4],dtype=np.int)
print(a.dtype)
a=np.zeros((3,4))#生成3行4列的0,ones生成1
a=np.arange(12).reshape((3,4))#生成3行4列的随机数矩阵
a=np.linspace(1,10,5)#生成5段1-10之间的线段
2.基础运算:
a=np.array(...)
b=np.array(...)
c=a+b#加
c=a**2#平方
c=10*np.sin(a)#三角函数
c=a*b#逐个相乘
c=np.dot(a,b)#矩阵相乘
c=a.dot(b)#同上
a=np.random.random((2,4))
np.sum(a,axis=1)#0代表列,1代表行
np.min()
np.max()
np.mean()
np.argmin(a)#最小值的索引,0开始
np.average()
np.median()
np.cumsum()#累加
np.diff()#累差,维度会降
np.nonzero()#非零数
np.sort()#排序
np.transpose()#矩阵的反向,单列不能变
a[:,np.newaxis]纵向加维度
a[np.newaxis,:]横向加维度
a.T#同上
np.clip(a,3,9)#<3的改为3,>9的改为9,中间的不变
a[2]#索引2行
a[1][1]#索引1行1列
a[2,:]#第2行
a[:,1]#第1列
a[1,1:3]#第1行1-3列
3.迭代
for row in a:#迭代行
print(row)
for column in a.T
print(column)
a.flatten()#迭代
for item in a.flat:
print(item)
4.合并stack
np.vstack((a,b))#垂直合并a、b
np.hstack((a,b))#水平合并
np.concatenate((a,b,c...),axis=1)#多个矩阵合并
5.分割split
a=np.arange(12).reshape((3,4))
print(np.split(a,2,axis=1))#列分割2块
np.array_split(a,3,axis=1)#不等量分割
np.vsplit(a,3)#垂直分割2块
np.hsplit(a,2)#水平分割2块
6.复制
b=a
b=a.copy()#b复制a,但不随a变化,deep copy
2.pandas
import pandas as pd
import numpy as np
1.创建单序列series和时间date_range
s=pd.Series([1,3,6,np.nan,44,1])
dates=pd.date_range('20160101',periods=6)#日期20160101-20160106
#创建
df=pd.DataFrame(np.random.rand(6,4),index=dates,columns=['a','b','c','d')]
#生成
df=pd.DataFrame(np.arange(12).reshape((3,4))
#字典形式生成
df=pd.DataFrame({'A':1.,
'B':pd.Timestamp('20130102'),
'C':pd.Series(1,index=list(range(4)),dtype='float32'),
'D':np.array([3]*4,dtype='int32'),
'E':pd.Categorical(['test','train','test','train'),
'F':'foo'})
df.dtypes#打印每列数据的形式
df.index#行名/索引
df.columns#列名/索引
df.values#每行的记录
df.describe()#描述性统计
df.T#类似矩阵翻倒
df.sort_index(axis=1,ascending=false)#列倒排序
df.sort_values(by='E')#指定E列排序
df=pd.DataFrame(np.arange(24).reshape((6,4),index=dates,columns=['A','B','C','D'])#index是列标,columns是行标
2.选择数据:loc、iloc、混合ix、条件
df['A']->df.A
df[0:3]->df['20130101':'20130104']
#标签loc
df.loc['20130102']#以标签名义选择
df.loc[:,['A','B']]#每行特定列
df.loc['20130102',['A','B']]#特定行列
#位置iloc
df.iloc[3]#位置第3行
df.iloc[3,1]#第3行第1列
df.iloc[3:5,1:3]#切片
df.iloc[[1,3,5],1:3]#逐步筛选
#混合ix
df.ix[:3,['A','C']]#标签+位置
#条件
df[df.A>8]#筛选A列>8的
3.修改、添加
df.iloc[2,2]=1111
df.loc['20130101','B']=2222
df[df.A>4]=0
df.B[df.A>4]=0
#添加序列
df['F']=np.nan#添加空列F
df.Series([1,2,3,4,5,6],index=pd.date_range('20130101',periods=6))
4.处理丢失值:丢掉或填充
df.iloc[0,1]=np.nan
df.iloc[1,2]=np.nan
#axis=1丢掉行,how={'any','all'},any只要有0就丢掉,all全部为0才丢掉
df.dropna(axis=0,how='any')
#给缺失值填充0
df.fillna(value=0)
df.isnull()#判断是否缺失
np.any(df.isnull())==True)#判断是否有1个缺失值
5.读取、保存文件:
data=pd.read_csv('student.csv')#read_excel等等
data.to_pickle('student.pickle')#保存为pickle类型的文件
6.合并:concat、join、merge
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'])
#合并concat
res=pd.concat([df1,df2,df3],axis=0,ignore_index=True)#竖向合并,且重新排序
#合并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=['b','c','d','e'],index=[2,3,4])
res=pd.concat([df1,df2],join='outer')
res=pd.concat([df1,df2],join='inner')#前者包含所有,后者只有两者共同的部分
#合并join_axes
res=pd.concat([df1,df2],axis=1,join_axis=1,join_axes=[df1.index])#指定以哪个为准
#合并append
s1=pd.Series([1,2,3,4),index=['a','b','c','d'])
df1.append(s1,ignore_index=True)#在df1下面加入s1
#合并merge:key或index
left=pd.DataFrame(
{'key':['K0','K1','K2','K3'],
'A':['A0','A1','A2','A3']
'B':['B0','B1','B2','B3']})
right=pd.DataFrame(
{'key':['K0','K1','K2','K3'],
'C':['C0','C1','C2','C3']
'D':['D0','D1','D2','D3']})
#单个key合并
res=pd.merge(left,right,on='key')
#多个key合并
res=pd.merge(left,right,on=['key1','key2'],how='inner')#当key1、key2相同的横向匹配,默认inner,how={'left','right','inner','outer'}
df1=pd.DataFrame({'col1':[0,1],'col_left':['a','b']})
df2=pd.DataFrame({'col1':[1,2,2],'col_right':[2,2,2]})
#显示连接方式,还可以改名indicator='indicator_column'
res=pd.merge(df1,df2,on='col1',how='outer',indicator=True)
left=pd.DataFrame(
{'A':['A0','A1','A2'],
'B':['B0','B1','B2']
index=['K0','K1','K2']})
right=pd.DataFrame(
{'C':['C0','C1','C2'],
'D':['D0','D1','D2']
index=['K0','K2','K3']})
res=pd.merge(left,right,left_index=True,right_index=True,how='outer')#考虑left、right中的index
boys=pd.DataFrame({'k':['K0','K1','K2'],'age':[1,2,3]})
girls=pd.DataFrame({'k':['K0','K0','K3'],'age':[4,5,6]})
res=pd.merge(boys,girls,on='k',suffixes=['_boy','_girl'],how='outer')#创建age_boy、age_girl
3.画图matplotlib
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data=pd.Series(np.random.randn(1000),index=np.arange(1000))
data=data.cumsum()
data.plot()#plt.plot(x=...y=...)
plt.show()
1.线性
data=pd.DataFrame(np.random.randn(1000,4),index=np.arange(1000),columns=list('ABCD'))
data=data.cumsum()
data.plot()
plt.show()
#plot method:bar,hist,box,kde,area,scatter,hexbin,pie
2.数据点
ax=data.plot.scatter(x='A',y='B',color='DarkBlue',label='Class 1')
dada.plot.scatter(x='A',y='C',color='DarkGreen',label='Class 2',ax=ax)