文章目录
- 1.numpy常规操作
- (1)创建矩阵:
- (2)矩阵形状
- (3)矩阵运算
- (4)矩阵合并与分割
- (5)赋值与copy()
- 2.pandas常规操作
- (1)pandas基础函数
- (2)数据筛选
- (3)赋值
- (4)nan值处理
- (5)读取数据文件
- (6)合并数据矩阵
1.numpy常规操作
import numpy as np
(1)创建矩阵:
a=np.array([
[1,2,3],
[2,3,4],
[4,5,6]],dtype=np.int64)
函数 |
说明 |
np.ones((3,4)) |
全是1的矩阵 |
np.zeros((3,4)) |
全是0的矩阵 |
np.empty((3,4)) |
全部元素都几乎接近于0的矩阵 |
np.random.randn((3,4)) |
3*4的随机数矩阵(取值介于0~1) |
np.arange(0,12,1).reshape((3,4)) |
左闭右开,步长为2 生成列表,reshape()改变行列形状为3*4 |
np.linspace(1,10,5) |
左闭右开,5段递增得到列表 |
np.arange() |
三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长,其中步长支持小数。只有一个参数时代表终点 |
a.dtype |
元素类型,int32、int64、float32、float64等等 |
(2)矩阵形状
函数 |
说明 |
a.ndim |
返回是几维数组 |
a.size |
返回元素个数 |
a.shape |
返回行数、列数(m,n) |
(3)矩阵运算
运算 |
函数 |
加减乘方 |
c-e,c+e,c**2 |
三角函数 |
np.sin(a) |
转置 |
np.transpose(A)或A.T |
逐个相乘 |
c=a*b |
矩阵相乘 |
c_dot=np.dot(a,b) |
求和 |
np.sum(a) |
求最值 |
np.min(g)、np.max(g,axis=1) ,其中axis=0:每一列内部求和 、1:每一行内部求和 |
提取元素 |
A[2,:] 、A[2,1] 、A[1,1:3]) |
输出索引 |
np.argmin(A) 、np.argmax(A) |
均值中位数 |
np.mean(A)、np.median(A) |
累加累差 |
np.cumsum(A)、np.diff(A) |
逐行升序排序 |
np.sort(A) |
print(c<18) |
判断哪个元素小于18 、大等于18 |
print(np.clip(A,5,9)) |
>9的数变成9,<5的数变成5,中间的数不变 |
A.flatten() |
将矩阵A压扁成只有一行,A.flat表示A.flatten()产生的迭代器用于for循环等 |
A.flatten()
for item in A.flat:
print(item)
(4)矩阵合并与分割
以下函数都可以实现同时多矩阵合并,假设A矩阵为3*4
函数 |
说明 |
np.array([1,1,1]) |
输出shape为(3,)认为只有一个维度 |
np.array([1,1,1])[:,np.newaxis] |
在列方向上添加一个维度,shape为(3,1)或者直接用reshape((3,1)) |
np.vstack((A,B)) |
竖直方向合并 |
np.hstack((A,B)) |
水平方向合并 |
np.concatenate((A,B),axis=0) |
axis=0竖直方向排列合并,axis=1水平方向合并 |
函数 |
说明 |
np.split(A,3,axis=0)或np.vsplit(A,3) |
竖直方向分割 |
np.split(A,2,axis=1) 或np.hsplit(A,2) |
水平方向分割 |
np.array_split(A,3,axis=1) |
3*4的矩阵水平方向不均等分割 为2 1 1 |
(5)赋值与copy()
函数 |
说明 |
赋值:b=a |
b和a指向相同地址,a一旦改变b也随之改变,b改变后a也会随之改变(关联关系) |
b=a.copy() |
为b开辟新的地址存放数据,a改变后b不随之改变 |
2.pandas常规操作
numpy对应的是列表,pandas对应的更像字典
import pandas as pd
import numpy as np
(1)pandas基础函数
函数 |
说明 |
pd.Series([1,3,6,np.nan,44,1]) |
创建序列 |
pd.date_range(‘20200101’,periods=6) |
日期序列创建 |
pd.DataFrame(np.random.randn(6,4),index=dates,columns=[‘a’,‘b’,‘c’,‘d’]) |
6*4的随机数矩阵,分别定义行、列标签 |
df2.index,df2.columns |
返回行、列标签的列表 |
df2.dtypes |
返回每列数据的数据类型 |
df2.values |
返回所有的数据列表 |
df2.T |
返回原有矩阵的转置 |
df2.describe() |
返回数据类型是数字的列对应的平均值、方差等 |
df2.sort_index(axis=1,ascending=False) |
按列标签(axis=1)倒序ascending=False排序 |
df2.sort_values(by=‘E’,ascending=True) |
按列标签E对应的数值顺序(ascending=True)排序 |
df=pd.DataFrame(np.random.randn(6,4),index=dates,columns=['a','b','c','d'])
df1=pd.DataFrame(np.arange(12).reshape(3,4))
df2=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'
})
(2)数据筛选
函数 |
说明 |
df.loc[‘20160102’] |
按行标签筛选 |
df.loc[:,[‘A’,‘B’]] |
按列标签筛选 |
df.loc[‘20160102’,[‘A’,‘B’]] |
同时按行、列标签筛选 |
df.iloc[3] |
按位置筛选出第四行 |
df.iloc[[1,3,5],1:3] |
不连续按位置筛选、切片 |
df[df[‘A’]>8]或df[df.A>8] |
按值筛选 |
df=pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
print(df,df.loc['20160102'])
print(df.loc[:,['A','B']])
print(df.loc['20160102',['A','B']])
print(df.iloc[3],df.iloc[3,1],df.iloc[3:5,1:3],df.iloc[[1,3,5],1:3])
print(df)
print(df[df['A']>8],df[df.A>8])
(3)赋值
函数 |
说明 |
df.iloc[2,2]=1111 |
按位置赋值 |
df.loc[‘20160101’,‘B’]=2222 |
按行列标签赋值 |
df[df.A>4]=0 |
对应A标签数值>4的行的所有元素全赋值为0 |
df.B[df.A>4]=0 |
对应A标签数值>4的行的B列元素全赋值为0 |
df[‘F’]=np.nan |
新建一列赋值 |
df[‘E’]=pd.Series([1,2,3,4,5,6],index=pd.date_range(‘20160101’,periods=6)) |
新建一列,设置行标签与原矩阵相同保证对齐 |
df=pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
df.iloc[2,2]=1111
df.loc['20160101','B']=2222
df[df.A>4]=0
df.B[df.A>4]=0
df['F']=np.nan
df['E']=pd.Series([1,2,3,4,5,6],index=pd.date_range('20160101',periods=6))
(4)nan值处理
nan值表示这里没有填任何值
函数 |
说明 |
df.dropna(axis=0,how=‘any’),#how={‘any’,‘all’} |
axis=0去掉含有nan的数据行;axis=1去掉含有nan的数据列; |
df.fillna(value=0) |
nan值处用0代替 |
print(np.any(df.isnull())) |
判断数据矩阵中是否含有nan,有则返回True,没有返回False |
df=pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
df.iloc[0,1]=np.nan
df.iloc[1,2]=np.nan
print(df.dropna(axis=0,how='any'))
print(df.fillna(value=0))
print(np.any(df.isnull()))
(5)读取数据文件
data=pd.read_csv('/home/Jade/图片/student.csv')
print(data)
data.to_pickle('/home/Jade/图片/student.pickle')
(6)合并数据矩阵
函数 |
说明 |
res=pd.concat([df1,df2,df3],axis=0,ignore_index=True) |
axis=0上下合并,ignore_index=True忽略原有行标签重新排 |
res=pd.concat([df1,df2],join=‘inner’,ignore_index=True) |
注意join=‘inner’和’outer’的区别,默认outer |
res=df1.append([df2,df3],ignore_index=True) |
在df1下边添加df2、df3,只能上下合并不能左右 |