1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python——最全的Numpy Pandas库的学习笔记

Python——最全的Numpy Pandas库的学习笔记

时间:2022-07-16 01:37:25

相关推荐

Python——最全的Numpy Pandas库的学习笔记

文章目录

Numpy属性数组的创建数组的变换数组的运算随机数函数统计函数矩阵运算 计算特征值排序注 : Pandas创建DataFrameDataFrame操作DataFrame输出到excelExcel 格式修改

Numpy

属性

arr = np.array([10,20,20])arr.ndim # ndarray对象的秩,即轴的数量或维度的数量 返回1、2、3arr.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‐1np.arange(10)>>> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])np.ones(shape) # 根据shape生成一个全1数组,shape是元组类型np.ones((3,2))>>> array([[1., 1.],[1., 1.],[1., 1.]])np.zeros(shape) # 根据shape生成一个全0数组,shape是元组类型np.full(shape,val) # 根据shape生成一个数组,每个元素值都是valnp.eye(n)# 创建一个正方的n*n单位矩阵,对角线为1,其余为0np.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轴进行随排列,改变数组xnp.random.permutation(a) # 根据数组a的第1轴产生一个新的乱序数组,不改变数组xchoice(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 npc = 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=1ele = 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 pdimport numpy as np# 直接创建 Eight为列名df = pd.DataFrame({'EIGHT': ['ARE', 'YOU', 'OK?']})# 从Numpy矩阵生成DataFramevalues = np.zeros((2,3), dtype='int32,float32')index = ['x', 'y']columns = ['a','b','c']df = pd.DataFrame(data=values, index=index, columns=columns)# 从列表生成DataFramecolumns = ['姓名学号','早餐','午餐','晚餐','宿舍楼','宿舍号','楼层号','姓名']df = pd.DataFrame(data=ls, columns=columns)# 字典生成DataFramecolumns = ['a','b','c']df = pd.DataFrame.from_dict(dic2, orient='index',columns = columns)# 从Excel中获取DataFramedata = 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.valuesn = df.as_matrix()n = np.array(df)# DataFrame切片 'loc是根据索引值来提取值,iloc是根据位置提取值'c = data.loc[1]b = data.iloc[:,3]d = data.iloc[1,3]# 直接进行索引df[column_name] # 提取列名 返回一个Seriesdf[column_name][index_name] # 返回内部的具体数值# 修改索引df.rename({'index_name':'new_index_name'},inplace=True)

DataFrame输出到excel

import pandas as pdx = pd.DataFrame(data)x.to_excel('data.xls',sheet_name='data')# 输出到同一个sheet的不同位置 不同的sheet_namewith 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='01')mon2.to_excel(excel_writer=writer,sheet_name='02')# 以上方式与下方等效writer = pd.ExcelWriter("C:/Users/wlt/Desktop/XXX.xls")mon1.to_excel(excel_writer=writer,sheet_name='01')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:它也是一个可选参数, 用于指定要冻结的最底部一行和最右边一列。

Excel 格式修改

import pandas as pdimport openpyxl#生成一个DataFramedata= pd.DataFrame(data=np.random.randn(6,3),columns=["a",'b','c'])#filename 保存的文件名filename = 'test.xlsx'writer = pd.ExcelWriter(filename,engine='openpyxl')data.to_excel(writer, sheet_name='Sheet1',index=False)worksheet = writer.sheets['Sheet1']#冻结首行worksheet.freeze_panes = 'A2'#冻结首行首列worksheet.freeze_panes = 'B2'#迭代器 取列for i in worksheet.columns:i[0].fill = openpyxl.styles.PatternFill("solid", fgColor="FF9933") #修改首行背景色i[0].font = openpyxl.styles.Font(name='Calibri',size=11,bold=True,italic=False,vertAlign=None,underline='none',strike=False,color='FF000000')# 修改首行字体# 更改单元格格式for cell in i[1:]:cell.number_format = '#,##0_-' #千位分割cell.number_format = '0.00%;-0.00%' #百分比cell.number_format = '$#,##0.00;-$#,##0.00' #会计格式#取行qtyindex = Nonefor row in worksheet.rows: #取列名为c的列for j in row:if j.value =='c':qtyindex = j.col_idx-1breaka = 0for row in worksheet.rows:a +=1if qtyindex and status_index and a>1: #按行 列名为c 的值大于0时: 填充颜色if row[qtyindex].value > 0 : for cell in row:cell.fill = openpyxl.styles.PatternFill("solid", fgColor="FFB6C1")for i in range(1,data.shape[1]+1): 把列索引转换成 A,B...表示str = ''while (not (i // 26 == 0 and i % 26 == 0)):temp = 25if (i % 26 == 0):str += chr(temp + 65)else:str += chr(i % 26 - 1 + 65)i //= 26writer.sheets['Sheet1'].column_dimensions[str[::-1]].width = 16#如果不转成'A,B,C,D..'保存时可能会出错writer.save()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。