Python——最全的Numpy Pandas库的学习笔记
Posted Lzn_nzL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python——最全的Numpy Pandas库的学习笔记相关的知识,希望对你有一定的参考价值。
文章目录
Numpy
属性
arr = np.array([10,20,20])
arr.ndim # ndarray对象的秩,即轴的数量或维度的数量 返回1、2、3
arr.shape # ndarray对象的尺度,对于矩阵,n行m列 返回元素
arr.size # ndarray对象元素的个数,相当于.shape中n*m的值
arr.dtype # ndarray对象的元素类型
arr.itemsize # ndarray对象中每个元素的大小,以字节为单位
数组的创建
# 从Python中的列表、元组等类型创建数组
x = np.array(list/tuple, dtype=np.float32)
# 采用numpy中的特定函数创建数组,可使用dtype=np.float32来指定类型
np.arange(n) # 类似range()函数,返回ndarray类型,元素从0到n‐1
np.ones(shape) # 根据shape生成一个全1数组,shape是元组类型
np.zeros(shape) # 根据shape生成一个全0数组,shape是元组类型
np.full(shape,val) # 根据shape生成一个数组,每个元素值都是val
np.eye(n) # 创建一个正方的n*n单位矩阵,对角线为1,其余为0
np.ones_like(a) # 根据数组a的形状生成一个全1数组
np.zeros_like(a) # 根据数组a的形状生成一个全0数组
np.full_like(a,val) # 根据数组a的形状生成一个数组,每个元素值都是val
# 其他函数创建数组
np.linspace(1,10,4) # 根据起止数据等间距地填充数据,形成数组 起点a 终点b 共c个数
np.concatenate((a,b)) # 将两个或多个数组合并成一个新的数组
数组的变换
a = np.ones((2,3,4), dtype=np.int32)
# 数组的维度变换
a.reshape(shape) # 不改变数组元素,返回一个shape形状的数组,原数组不变
a.resize(shape) # 与.reshape()功能一致,但修改原数组
a.swapaxes(ax1,ax2) # 将数组n个维度中两个维度进行调换
a.flatten() # 对数组进行降维,返回折叠后的一维数组,原数组不变
# 数组的类型变换
new_a = a.astype(new_type)
# 数组转列表
ls = a.tolist()
数组的运算
# 数组与标量之间的运算作用于数组的每一个元素
# 一元函数
np.abs(x) np.fabs(x) # 计算数组各元素的绝对值
np.sqrt(x) # 计算数组各元素的平方根
np.square(x) # 计算数组各元素的平方
np.log(x) np.log10(x) np.log2(x) # 计算数组各元素的自然对数、10底对数和2底对数
np.ceil(x) np.floor(x) # 计算数组各元素的ceiling值 或 floor值
np.rint(x) # 计算数组各元素的四舍五入值
np.modf(x) # 将数组各元素的小数和整数部分以两个独立数组形式返回
np.cos(x) np.cosh(x)
np.sin(x) np.sinh(x)
np.tan(x) np.tanh(x)
# 计算数组各元素的普通型和双曲型三角函数
np.exp(x) # 计算数组各元素的指数值
np.sign(x) # 计算数组各元素的符号值,1(+), 0, ‐1(‐)
# 二元运算
+ ‐ * / ** # 两个数组各元素进行对应运算
np.maximum(x,y) np.fmax()
np.minimum(x,y) np.fmin()
# 元素级的最大值/最小值计算
np.mod(x,y) # 元素级的模运算
np.copysign(x,y) # 将数组y中各元素值的符号赋值给数组x对应元素
> < >= <= == != # 算术比较,产生布尔型数组
随机数函数
np.random.*
# 生成随机数
np.random.rand(d0,d1,..,dn) # 根据d0‐dn(矩阵尺寸)创建随机数数组,浮点数,[0,1),均匀分布
np.random.randn(d0,d1,..,dn) # 根据d0‐dn(矩阵尺寸)创建随机数数组,标准正态分布
np.random.randint(low[,high,shape]) # 根据shape创建随机整数或整数数组,范围是[low, high)
np.random.seed(s) # 随机数种子,s是给定的种子值
# 打乱数组
np.random.shuffle(a) # 根据数组a的第1轴进行随排列,改变数组x
np.random.permutation(a) # 根据数组a的第1轴产生一个新的乱序数组,不改变数组x
choice(a[,size,replace,p]) # 从一维数组a中以概率p抽取元素,形成size形状新数组 replace表示是否可以重用元素,默认为False
# 产生特定分布的随机数
np.random.uniform(low,high,size) # 产生具有均匀分布的数组,low起始值,high结束值,size形状
np.random.normal(loc,scale,size) # 产生具有正态分布的数组,loc均值,scale标准差,size形状
np.random.poisson(lam,size) # 产生具有泊松分布的数组,lam随机事件发生率,size形状
统计函数
np.sum(a, axis=None) # 根据给定轴axis计算数组a相关元素之和,axis整数或元组
np.mean(a, axis=None) # 根据给定轴axis计算数组a相关元素的期望,axis整数或元组
np.average(a,axis=None,weights=None) # 根据给定轴axis计算数组a相关元素的加权平均值
np.std(a, axis=None) # 根据给定轴axis计算数组a相关元素的标准差
np.var(a, axis=None) # 根据给定轴axis计算数组a相关元素的方差
np.min(a) np.max(a) # 计算数组a中元素的最小值、最大值
np.argmin(a) np.argmax(a) # 计算数组a中元素最小值、最大值的降一维后下标
np.unravel_index(index, shape) # 根据shape将一维下标index转换成多维下标
np.ptp(a) # 计算数组a中元素最大值与最小值的差
np.median(a) # 计算数组a中元素的中位数(中值)
矩阵运算 计算特征值
import numpy as np
c = np.dot(a,b) # 两个矩阵点积
c = np.cross(a,b) # 两个矩阵叉乘
a = [[2,-1,0,0,0],
[-1,2,-1,0,0],
[0,-1,2,-1,0],
[0,0,-1,2,-1],
[0,0,0,-1,1]]
a = np.array(a)
eigenvalue, featurevector = np.linalg.eig(a)
# 对结果进行排序,从小到大
idx = eigenvalue.argsort()
eigenvalue = eigenvalue[idx]
featurevector = featurevector[idx]
排序
# 用某行进行排序
data = data[data[:,2].argsort()]
# 对数组每行单独进行排序 默认axis=1
ele = np.sort(ele,axis=1)
# 对数组每列单独进行排序
ele = np.sort(ele,axis=0)
# 按照第0行进行排序
ele = ele[ele[:,0].argsort()]
注 :
Numpy的笔记中,还缺少有关矩阵文件读取、矩阵运算、线性代数的相关内容。
Pandas
Pandas库可以认为是升级版字典,常用于进行数据分析处理,DataFrame数据可保存至Excel。
创建DataFrame
import pandas as pd
import numpy as np
# 直接创建 Eight为列名
df = pd.DataFrame('EIGHT': ['ARE', 'YOU', 'OK?'])
# 从Numpy矩阵生成DataFrame
values = np.zeros((2,3), dtype='int32,float32')
index = ['x', 'y']
columns = ['a','b','c']
df = pd.DataFrame(data=values, index=index, columns=columns)
# 从列表生成DataFrame
columns = ['姓名学号','早餐','午餐','晚餐','宿舍楼','宿舍号','楼层号','姓名']
df = pd.DataFrame(data=ls, columns=columns)
# 字典生成DataFrame
columns = ['a','b','c']
df = pd.DataFrame.from_dict(dic2, orient='index',columns = columns)
# 从Excel中获取DataFrame
data = pd.read_excel('0.xlsx')
data = pd.read_excel(io,sheet_name = 0,header = 0,names = None,index_col = None,usecols = None,squeeze = False,dtype = None, ...)
DataFrame操作
# 给DataFrame增加项目 .loc方法是根据index增加或修改内容 iloc方法是根据位置修改
df.loc[10] = [1,2,3]
df.loc[''] = [1,2,3]
df.iloc[0] = [1,2,3]
#使用DataFrame中的values方法,返回numpy数据
n = df.values
n = df.as_matrix()
n = np.array(df)
# DataFrame切片 'loc是根据索引值来提取值,iloc是根据位置提取值'
c = data.loc[1]
b = data.iloc[:,3]
d = data.iloc[1,3]
DataFrame输出到excel
import pandas as pd
x = pd.DataFrame(data)
x.to_excel('data.xls',sheet_name='data')
# 输出到同一个sheet的不同位置 不同的sheet_name
with pd.ExcelWriter('0.xlsx',engine="openpyxl") as writer:
df.to_excel(writer,index=True,index_label = '222',startrow = 10,startcol= 10)
df.to_excel(writer,index=True,index_label = '222',startrow = 0,startcol= 0)
mon1.to_excel(excel_writer=writer,sheet_name='201901')
mon2.to_excel(excel_writer=writer,sheet_name='201902')
# 以上方式与下方等效
writer = pd.ExcelWriter("C:/Users/wlt/Desktop/XXX.xls")
mon1.to_excel(excel_writer=writer,sheet_name='201901')
writer.save()
writer.close()
pandas to_excel源代码
df.to_excel('0.xlsx',index=True,index_label = '222')
DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)
excel_writer:文件路径或现有的ExcelWriter。
sheet_name:它是指包含DataFrame的工作表的名称。
na_repr:缺少数据表示形式。
float_format:这是一个可选参数, 用于格式化浮点数字符串。
列:指要写入的列。
header:写出列名。如果给出了字符串列表, 则假定它是列名的别名。
index:写入索引。
index_label:引用索引列的列标签。如果未指定, 并且标头和索引为True, 则使用索引名称。如果DataFrame使用MultiIndex, 则应给出一个序列。
startrow:默认值0。它指向转储DataFrame的左上单元格行。
startcol:默认值0。它指向转储DataFrame的左上方单元格列。
engine:这是一个可选参数, 用于写入要使用的引擎, openpyxl或xlsxwriter。
merge_cells:返回布尔值, 其默认值为True。它将MultiIndex和Hierarchical行写为合并的单元格。
encoding:这是一个可选参数, 可对生成的excel文件进行编码。仅对于xlwt是必需的。
inf_rep:它也是一个可选参数, 默认值为inf。它通常表示无穷大。
详细:返回一个布尔值。它的默认值为True。
它用于在错误日志中显示更多信息。
Frozen_panes:它也是一个可选参数, 用于指定要冻结的最底部一行和最右边一列。
以上是关于Python——最全的Numpy Pandas库的学习笔记的主要内容,如果未能解决你的问题,请参考以下文章
全网最全python实现数据挖掘,数据分析(matlablib,pandas,numpy,量化分析)(附源代码)
python3安装pandas执行pip3 install pandas命令后卡住不动的问题及安装scipysklearn库的numpy.distutils.system_info.NotFound(