numpy与pandas学习笔记

1.numpy常规操作

#导入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=ab和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))
#以列标签为ABCDEF创建矩阵
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['A'])
#print(df[0:3],df['20160102':'20160104'])
print(df,df.loc['20160102']) #标签对应的那行
print(df.loc[:,['A','B']]) #标签对应的那列
print(df.loc['20160102',['A','B']]) #标签对应的那行

#位置选择iloc
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')) #how={'any','all'}
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,只能上下合并不能左右
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值