Python numpy pandas matplotlib

1.numpy

import numpy as np
a=np.array([[1,2,3],
				[2,3,4]]) #列表转n维数组,在后面可以设置数组类型 dtype=np.int 为整数类型
a.ndim #维度
a.shape #行 列.. 返回元组形式
a.size #数组中元素个数
np.zeros(shape) #生成全为0 参数为array.shape类型
np.ones(shape) #生成全为1...
np.empty(shape) #生成全无限接近0...
np.arange(2,12,2) #生成[2,12) 区间内以2为步长的数组,步长默认为1 
np.arange(12) #这样就是生成[0,1,2,3,...,11]
np.arange(12).reshape((3,4)) #生成3行4列
np.linspace(1,10,5) #将[1,10]分为5段显示出来
np.linspace(1,10,6).reshape((2,3)) #也可以指定shape 2行3列
若已知两规格相同的数组 a和b 可以直接进行各种运算,对应位置的元素直接计算
c=a+b 
c=a-b
c=a*b
c=a**2 #a中每个元素全取平方然后赋给c
c=np.sin(a) #a中每个元素全取sin值然后赋给c
但若是矩阵的乘法,则不是直接a*b 它是每一行乘每一列各个值相加
c=np.dot(a,b) 或者是 c=a.dot(b)
a=np.random.random((2,4)) #在[0,1)中生成随机数 参数为shape
np.sum(a) #a中求和 可以指定axis,np.sum(a,axis=1) 每一行之内求和,返回数组 axis=0 表示每一列之内求和,返回数组 
np.min(a) #a中求最小值  也可指定axis
np.max(a) #a中求最大值  也可指定axis
np.argmax(a) #a中最大值的索引   np.argmin(a) #a中最小值的索引
np.average(a)  np.mean(a)   #a中所有元素的平均值,也可以指定axis
np.median(a) #a中所有元素的中位数
a.T #转置
#索引
一维数组a的话 直接 a[i] 就是下标为i的元素
二维数组a的话 可直接a[i][j] 找到对应元素,也可a[i,j] 
	a[i]直接表示第i行,a[i,:]表示第i行,a[:,j]表示第j列
#迭代
for row in a:
	print(row) 直接打印出每一行
for column in a.T: 
	print(column) 直接打印出每一列
a.flatten() 将多维数组转换为一维数组
for item in a.flat: 
	print(column) 按照每一行每一列依次打印每一个元素
#合并
a=np.array([1,1,1])
b=np.array([2,2,2])
c=np.vstack((a,b)) 垂直方向合并  c=[[1 1 1]
									[2 2 2]]
c=np.hstack((a,b)) 水平方向合并  c=[1 1 1 2 2 2] 
c=np.concatenate((a,b,b,a),axis=1) 多个数组的合并 axis=1表示水平方向合并
	axis=0 表示竖直方向上合并
#分割
a=np.arange(12).reshape((3,4))
np.split(a,2,axis=1) 水平方向上将a分成两块  axis=0 表示垂直方向
np.vsplit(a,3) 垂直方向分3块
np.hsplit(a,2) 水平方向分2#copy
若b与a关联起来,一方边另一跟着变
b=a
若b与a不关联,两者独立,复制过后一方变另一方不变
b=a.copy()

#读取文件
with open("test1.txt", 'rt', encoding='UTF-8') as raw_data:  # 读取数据文件到二维数组中
     data = np.loadtxt(raw_data, delimiter=',')

2.pandas

一维用Series
二维用DataFrame
三维用Panel
import pandas as pd
import numpy as np
s=pd.Series([1,3,6,np.nan,44,1]) #参数为列表类型,np.nan指代空,打印s会自动显示出序号以及数据类型
dates=pd.date_range('20160101',periods=6) #生成日期列表,连续6天,显示出数据类型
df=pd.DataFrame(np.random.randn(6,4),index=dates,column=['a','b','c','d']) 生成二维数组,index表示每一行的序号,columns表示每一列的序号。不定义index columns时默认为 0 1 2 3...
也可以直接规定每一列包含的内容:
df2=pd.DataFrame({'A':1.,
				  'B':2.,
				  'C':pd.Series(1,index=list(range(4)))
				  'D':np.array([3]*4,dtype='int32'),
				  'E':'foo'})
df2.dtypes #显示出每一列的数据类型
df2.index #显示出每一行的序号
df2.columns #显示出每一列的序号
df2.values #不显示序号,只显示数据
df2.describe() #按列展示出所有数值型数据 
df2.T #转置
df2.sort_index(axis=1,ascending=False) #水平方向上 按照序号降序
df2.sort_index(axis=0,ascending=False) #垂直方向上 按照序号降序
df2.sort_values(by='E') 对序号为'E'的列中的数据进行排序,不能是行
#选择数据
import pandas as pd
import numpy as np
dates=pd.date_range('20130101',periods=6)
df=pd.DataFrame(np.arange(24).reshape((6,4)),index=dates,columns=['A','B','C','D'])
print(df)
print(df['A']) #输出列号为A的这一列,并显示出行号
print(df.A) #与上面一样
print(df[0:3]) #切片,选择第0行到第2行
print(df['20130102':'20130104']) #也是切片,按照自己设定的行号,右区间为包含

#按照设定的标签号获取
print(df.loc['20130102']) #输出行号为'20130102'的这一行,并显示出列号
print(df.loc['20130102','A':'B']) #输出行号为'20130102'的这一行,列只输出标号为[A B]的
print(df.loc[:,'A':'B']) #行号选全部 列号只取到[A B]

#类似于numpy的按照0 1 2 3这样的序号获取
print(df.iloc[0]) #输出第0行
print(df.iloc[0,1]) #输出第0行第1列
print(df.iloc[3:5,1:3]) #切片,选择行[3,4] 列[1,2]
print(df.iloc[[1,3,5],1:3]) #按不连续的选取1 3 5行

print(df[df.A<8]) #对所有行,筛选出第A列小于8的行

#修改值
df.loc['20130101','B']=2222 #通过设定的标签值修改
print(df)
df.iloc[2,2]=1111 #通过数字序号修改
print(df)
df[df.A>4]=0 #对A这一列中的数,若第i行的数大于4,则该行全部数置0
print(df)
df.A[df.A>4]=0 #对A这一列中的数,若某数>4,则该数置0
df.B[df.A>4]=0 #对A这一列中的数,若第i行的数>4,则第i行的B列置0
print(df)

df['F']=np.nan #增加一个空列
df['E']=6 #增加一个值全为6的列
print(df)

print(df.dropna(axis=1,how='all')) #水平方向上,删除所有包含NaN的列  若axis=0,为垂直方向上删除所有包含NaN的行
print(df.fillna(value=0)) #将所有的NaN填入0
print(df.isnull()) #判断是否丢失数据,丢失的位置为True,未丢失的位置未False
print(np.any(df.isnull())==True) #判断df.isnull()中是否存在True从而直接得出df中是否缺值

#导入csv文件到pandas
data=pd.read_csv('student.csv')
print(data)
#导出##文件 此处导出pickle文件
data.to_pickle('student.pickle')

#contat合并
df1=pd.DataFrame(np.zeros((3,4)),columns=['a','b','c','d'],index=[1,2,3])
df2=pd.DataFrame(np.ones((3,4)),columns=['b','c','d','e'],index=[2,3,4])
print(df1)
print(df2)
#合并两个DataFrame,join默认为outer,表示列全合并[abcd] [bcde]->[abcde],若为inner,表示自动裁剪两者不共有的列 即->[bcd] axis指定方向 0为垂直 1为水平
res1=pd.concat([df1,df2],join='inner',ignore_index=True,axis=0) #ignore_index=True表示忽略行号 重新从0 1 2 3..
print(res1)

#append添加
df1=pd.DataFrame(np.zeros((3,4)),columns=['a','b','c','d'],index=[1,2,3])
df2=pd.DataFrame(np.ones((3,4)),columns=['a','b','c','d'],index=[2,3,4])
df3=pd.DataFrame(np.ones((3,4)),columns=['a','b','c','d'],index=[2,3,4]) #如果columns不同,则会采取outer的形式
res1=df1.append(df2,ignore_index=True)
print(res1)
res2=df1.append([df2,df3],ignore_index=True) #可以一下添加多个DataFrame
print(res2)
s1=pd.Series([1,2,3,4],index=['a','b','c','d'])
res3=df1.append(s1,ignore_index=True) #添加一个Series
print(res3)

#merge合并
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','K2'],
                   'C':['C0','C1','C2','C3'],
                   'D':['D0','D1','D2','D3'],
                   'E':['E0','E1','E2','E3']})
print(left)
print(right)
res=pd.merge(left,right,on='key',how='outer') #以'key'那一列为基准进行合并,how同上面的join,默认值为inner,自动裁剪
print(res)

#画图
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()
data.plot()
plt.show() #显示出四条线,每条代表每一列

3.matplotlib

#最简单的折线图
import matplotlib.pyplot as plt

x=range(2, 26, 2)
y=[15,13,14,17,20,25,26,26,24,22,18,15]  # x和y共同组成了所有点的坐标
plt.plot(x, y)  # 传入x y
plt.show()

#在plt.show()之前可设置图片大小 dpi表示像素
plt.figure(figsize=(20,10),dpi=80) 

#可保存显示的图片
plt.savefig("./k1.png")  #保存到当前目录下

#设置x轴的刻度 直接传入x的话是以列表x的值为刻度,或者可以传range(2,26),从2-25 步长为1,np.arange(2,26,0.5) 从2-25步长0.5
plt.xticks(np.arange(2,25,0.5))

#同理可设置y轴的刻度
plt.yticks(range(min(y),max(y)+1))

#设置x轴的刻度为 字符串+数字 的形式,字符串必须与数字一一对应
_xticks_labels=["hello,{}".format(i) for i in x]  # 这里定义字符产格式
plt.xticks(x,_xticks_labels)

#设置刻度显示的方向,默认水平,rotation代表旋转多少度
plt.xticks(x,_xticks_labels,rotation=90)

#添加描述信息
plt.xlabel("1111")  # 在x轴添加
plt.ylabel("2222")  # 在y轴添加
plt.title("tttt")  # 在最上面添加

#绘制网格
plt.grid(alpha=0.2)  # alpha设置透明度,从0-1

#若要显示出多条折线图,则只需plt多次plot即可
plt.plot(x1, y1)
plt.plot(x2, y2)

#若还想在右上角对两条线进行解释,即每条折线的名称
plt.plot(x1, y1, label="111")
plt.plot(x2, y2, label="222")
plt.legend()

#对于plt.plot可以设置很多东西 类似的(grid中也可以设置)
color='' 设置线条颜色
linestyle='--' 设置线条风格
linewidth=5 设置线条粗细
alpha 设置透明度
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

henulmh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值