Python基础与大数据应用第九章-数据分析基础-课件_第1页
Python基础与大数据应用第九章-数据分析基础-课件_第2页
Python基础与大数据应用第九章-数据分析基础-课件_第3页
Python基础与大数据应用第九章-数据分析基础-课件_第4页
Python基础与大数据应用第九章-数据分析基础-课件_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第九章 数据分析基础北京西普阳光教育科技股份有限公司 中国IT教育解决方案专家 2018年10月制作:丁辉1目 录 Contents01numpy模块02pandas模块030407项目训练小结2numpy模块01numpy模块 numpy是一个用Python实现的科学计算包,专为进行严格的数值处理而产生,尤其是对大型多维数组和矩阵的支持,并且有一个大型的高级数学函数库来操作这些数组。numpy提供了许多高级的数值编程工具,如矩阵数据类型、矢量处理,以及精密的运算库。numpy多为很多大型金融公司和核心的科学计算组织使用,具有运算速度快、效率高、节省空间等特点。45 numpy中最重要的对象就

2、是ndarray的多维数组,它是一组相同类型元素的集合,元素可用从零开始的索引来访问。多维数组ndarray中的每个元素在内存中连续存放并占同样大小存储空间。多维数组ndarray有以下几个属性:ndarray.size:数组中全部元素的数量;ndarray.dtype:数组中数据元素的类型(int8,uint8,int16,uint16,int32,uint32,int64,uint64,float16,float32,float64,float128,complex64,complex128,complex256,bool,object,string,unicode等);ndarray.i

3、temsize:每个元素占的字节数;ndarray.ndim:数组的维度;ndarray.shape:数组各维度大小。ndarray类型数组6创建一维数组(1)用array()函数创建一维数组 创建数组最简单的方法就是使用array()函数。它将输入的数据(元组、列表、数组或其它序列的对象)转换成多维数组ndarray,数组元素类型自动推断出或显式制定dtype类型,默认直接复制输入的数据,然后产生一个新的多维数组ndarray。 import numpy as np #导入numpy模块,重命名为np x = np.array(1,2,3,4) #创建一维数组x x array(1, 2,

4、3, 4) #一维数组1, 2, 3, 4 print(x) #输出 x值1 2 3 4 print(x.size) #输出 x 全部元素的数量4 print(x.dtype) #输出 x中每个元数的类型int64 print(x.itemsize) #输出 x中每个元素占几个字节8 x.ndim #显示x的维度1 x.shape #显示x的形状,行上共4个元素 (4,)#array()函数参数为列表,创建数组,指定类型为float64 y = np.array(1,2,3,4,5,dtype=float64) yarray( 1., 2., 3., 4., 5.) # 1., 2., 3.,

5、 4., 5.中的点表示数组中元素类型是浮点型 print(y) 1. 2. 3. 4. 5. y.dtypedtype(float64) y.ndim 1 ndarray类型数组7创建一维数组(2)用arange()函数创建一维数组 arrange()函数用于创建等差数组,使用频率非常高,arange()非常类似Python中range()函数,两者的区别在于,arange()返回的是一个数组,而range()返回的是list,并且是整型。 import numpy as np np.arange(5) # arange()输出的是含有04,5个元素的数组array(0, 1, 2, 3,

6、4) np.arange(1,5) array(1, 2, 3, 4) np.arange(2,5) array(2, 3, 4) np.arange(1,10,2) #第一个参数起点,第二个参数终点,第三个参数步长array(1, 3, 5, 7, 9) np.arange(1,10,2, dtype=16) #指定数据元素的类型为int16array(1, 3, 5, 7, 9 , dtype=int16)ndarray类型数组8创建N维数组(1)使用array()函数创建 import numpy as np x1 = np.array(1,2,3,4) #创建一维数组 x1

7、array(1,2, 3, 4) print(x1.ndim) #输出 x1的维度1 print(x1.shape)(4,) x2 = np.array(1,2,3,4) #创建二维数组,注意参数的形式 x2array(1,2, 3, 4) print(x2.ndim) #输出 x2的维度2 print(x2.shape)(1,4) x3 = np.array(1,2,3,4,5,6,7,8) #创建二维数组 print(x3)1 2 3 4 5 6 7 8 print(x3.dtype)int64 print(x3.ndim) #输出 x3的维度2ndarray类型数组 print(x3.s

8、hape) #输出 x3各维度大小,(2,4) 表示2行 4列(2, 4) y = np.array(1,2,3,4,5,6,7,8,0,0,0,0,9,9,9,9) #创建三维数组 print(y)1 2 3 4 5 6 7 8 0 0 0 0 9 9 9 9 print(y.dtype)int64 print(y.ndim) #输出 y的维度3 print(y.shape) #输出y各维度大小,(2, 2, 4) 表示2维2行4列(2, 2, 4)9创建N维数组(2)使用reshape()函数创建 reshape()函数可以实现给数组一个新的形状而不改变其数据,通过reshape()生成的

9、新数组和原始数组公用一个内存,也就是说,假如更改一个数组的元素,另一个数组也将发生改变。常与arange()函数一起使用来构造多维数组。 import numpy as np yo = np.arange(1,9) print(yo)1 2 3 4 5 6 7 8#创建由18,8个元素组成的一维数组,并改变形状为2行4列二维数组 y1 = np.arange(1,9).reshape(2,4) print(y1)1 2 3 4 5 6 7 8#reshape(x,y,z)中任意1参数值用 -1 替换,此轴长度自动计算 y2 = np.arange(1,9).reshape(-1,4) prin

10、t(y2)1 2 3 4 5 6 7 8 y3 = np.arange(1,9).reshape(2,-1) print(y3)1 2 3 4 5 6 7 8 y4 = np.arange(1,9).reshape(1,-1) #1行,自动计算为8列 print(y4)1 2 3 4 5 6 7 8 y5 = np.arange(1,5).reshape(-1,1) #1列,自动计算为4行 print(y5)1 2 3 4ndarray类型数组 y6 = np.arange(1,9).reshape(-1) print(y6)1 2 3 4 5 6 7 8 y7 = np.arange(1,2

11、5).reshape(2,3,4) print(y7) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 print(y7.dtype) #数组中数据元素的类型是64位整型int64 print(y7.ndim) # 3维数组3 print(y7.shape) #数组各维度大小(2, 3, 4) print(y7.size) #数组中全部元素的数量24个24 print(y7.itemsize) #每个元素占8个字节8 print(y7.reshape(-1) #输出y7数组变形为1维的结果 1 2 3 4 5 6 7

12、 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2410创建数组的其它常用函数ndarray类型数组函数名称功能说明np.ones()根据指定的形状和类型生成全1的数组np.zeros()生成全0的数组np.empty()创建空数组,只分配存储空间,不填充数据,随机值np.random.randint(x,y,(m,n)创建x起始值, y截止值, m行n列的随机整数数组np.linspace(x, y, z)等间距生成 x起始值,y截止值, z个数的一维数组 import numpy as np print(np.ones(2,3,4),dtype

13、=8) #2维3行4列全1数组,指定数据类型为int81 1 1 11 1 1 11 1 1 11 1 1 11 1 1 11 1 1 1 print(np.zeros(2,3,4),dtype=8) #2维3行4列全0数组,指定数据类型为int80 0 0 00 0 0 00 0 0 00 0 0 00 0 0 00 0 0 0print(np.empty(2,3,4),dtype=8) #2维3行4列全空数组,数据类型为int80 0 0 00 0 0 00 0 0 00 0 0 00 0 0 00 0 0 0 print(np.random.randi

14、nt(0,9,(3,4) #大于等于0小于9,3行4列的随机整数数组0 3 4 32 5 5 03 6 4 5 print(np.random.randint(0,9,size=(3,4)4 5 1 27 1 7 80 4 8 6 print(np.random.randint(9,size=(3,4)4 1 4 31 6 6 42 8 5 7 print(np.random.rand(3,4) #随机样本位于0, 1),生成3行4列的随机实数数组 0.96254165 0.56234931 0.33305427 0.61655296 0.61970155 0.98179923 0.66314

15、103 0.16168549 0.89932954 0.46638002 0.38740938 0.61592195 print(np.random.randn(3,4) #从标准正态分布中返回样本值,生成3行4列的随机实数数组-1.30977545 0.47668467 0.11054181 0.93487926-0.49593833 -0.64846104 0.25832515 -1.82852527-0.86807899 1.25805438 -0.16311422 0.75200323 print(np.linspace(-2,2,5) #起点为-2,终点为2,取5个点-2. -1.

16、0. 1. 2. print(np.linspace(-2,8,5) #起点为-2,终点为8,取5个点-2. 0.5 3. 5.5 8. 11数组的运算ndarray类型数组(1)数组的基本运算#数组的+、-、*、/四则运算,要求参与运算的数组要同样大小,即维度和元素个数相同 a = np.array(np.arange(1,5) b = a aarray(1, 2, 3, 4) barray(1, 2, 3, 4) print(a + b) #对应元素进行运算2 4 6 8 print(a - b)0 0 0 0 print(a * b) 1 4 9 16 print(a / b)1 1 1

17、 1 print(a + 2) #每个元素都进行同样的运算3 4 5 6 print(a - 2)-1 0 1 2 print(a * 2)2 4 6 8 print(a / 2)0 1 1 2 c = np.array(np.arange(1,9).reshape(2,4) d = c carray(1, 2, 3, 4, 5, 6, 7, 8) darray(1, 2, 3, 4, 5, 6, 7, 8) print(c + d) 2 4 6 8 10 12 14 16 print(c - d)0 0 0 0 0 0 0 0 print(c * d) 1 4 9 16 25 36 49 6

18、4 print(c / d)1 1 1 1 1 1 1 1 print(c + 2) 3 4 5 6 7 8 9 10 print(c - 2)-1 0 1 2 3 4 5 6 print(c * 2) 2 4 6 8 10 12 14 16 print(c / 2)0 1 1 2 2 3 3 412数组的运算ndarray类型数组(2)数组运算的基本函数数组运算的基本函数是指能同时对数组中所有元素进行运算的函数,主要包括一元函数和二元函数。一元函数有平方square()、平方根sqrt()、绝对值abs()/fabs()、对数log()/log10/log2()、符号sign()、是否为Na

19、N isnan()、是否是有穷 isinf()、三角函数cos()/cosh()/sin()/sinh()/tan()/tanh()、四舍五入rint()、整数和小数分离,作两个数组返回modf();二元函数有元素级加法add(array1,array2)、元素级减法subtract(array1,array2)、元素级乘法multiply(array1,array2)、元素级除法divide(array1,array2) 、元素级指数power(array1,array2)、元素级最大/最小值maximum/minimum(array1,aray2)等函数。 import numpy as

20、np a = np.array(np.arange(1,9).reshape(2,4) aarray(1, 2, 3, 4, 5, 6, 7, 8) b = np.square(a) #一元函数square(),计算平方 print(b) 1 4 9 16 25 36 49 64 c = np.sqrt(b) #一元函数sqrt(),计算平方根 print(c) 1. 2. 3. 4. 5. 6. 7. 8. d = np.array(1.22,3.44,5,6.21,8.99,7,4,.82) print(d) 1.22 3.44 5. 6.21 8.99 7. 4. 0.8213数组的运算

21、ndarray类型数组(2)数组运算的基本函数 print(np.add(a,a) #二元函数add(array1,array2),计算和 2 4 6 8 10 12 14 16 print(np.subtract(a,a) #二元函数subtract (array1,array2),计算差0 0 0 0 0 0 0 0 print(np.multiply(a,a) #二元函数multiply (array1,array2),计算积 1 4 9 16 25 36 49 64 print(np.divide(a,a) #二元函数divide (array1,array2),计算商1 1 1 1

22、1 1 1 114数组的运算ndarray类型数组(3)数学和统计函数numpy中有一组数学函数可以实现对整个数组或某个轴向的数据进行统计计算,如求和sum()、求平均数mean()、标准差std()等函数,同时mean()和sum()这类函数可以接受一个axis参数(用于计算该轴向上的统计值),最终结果是一个少一维的数组。其它的常用函数还有求方差var()、最小值min() 、最大值max() 、最小值索引argmin() 、最大值索引argmax()等。 import numpy as np a = np.array(np.arange(1,9).reshape(2,4) aarray(1

23、, 2, 3, 4, 5, 6, 7, 8) np.sum(a) #数组所有元素和36 a.sum()36 a.sum(axis = 1) # “axis=1”对行上的数据进行汇总求和,即数组每行所有元素和array(10, 26) np.sum(a,axis = 1)array(10, 26) a.sum(1)array(10, 26) a.sum(axis=0) # “axis=0”对列上的数据进行汇总求和,即数组每列所有元素和array( 6, 8, 10, 12) np.sum(a,axis=0)array( 6, 8, 10, 12) a.sum(0)array( 6, 8, 10,

24、 12) np.mean(a) # 数组所有元素和平均值4.5 a.mean()4.515数组的运算ndarray类型数组(3)数学和统计函数# axis = 1对行上的数据进行汇总求平均值,即数组每行所有元素平均值 a.mean(axis = 1) array( 2.5, 6.5)# axis=0对列上的数据进行汇总求平均值,即数组每列所有元素平均值 a.mean(axis = 0) array( 3., 4., 5., 6.) aarray(1, 2, 3, 4, 5, 6, 7, 8) a.cumsum() # 数组所有元素累积和array( 1, 3, 6, 10, 15, 21, 2

25、8, 36) a.cumsum(1) # 数组行累积和array( 1, 3, 6, 10, 5, 11, 18, 26) a.cumsum(0) # 数组列累积和array( 1, 2, 3, 4, 6, 8, 10, 12) a.cumprod() # 数组所有元素累积积array( 1, 2, 6, 24, 120, 720, 5040, 40320) a.cumprod(1) # 数组行累积积array( 1, 2, 6, 24, 5, 30, 210, 1680) a.cumprod(0) # 数组列累积积array( 1, 2, 3, 4, 5, 12, 21, 32)16matr

26、ix类型矩阵 N维数组ndarray和矩阵类型matrix是numpy中两个最重要的数据类型,它们是很多基于numpy数值计算的基础,因此学习并理清两者的关系非常重要,特别是程序中同时混杂这两种类型,还夹带着一些加减乘除的运算时,就更容易混淆。 N维数组ndarry,简称数组array。而矩阵类型matrix其实也是一种array,只不过是维数为2的特殊array,因此,可以说在numpy中二维数组就是矩阵,矩阵也有与数组一样常见的几个属性,但二者分别是两种类型。matrix的维数是固定的永远是2,这点和一般array显著不同,即便加减乘除各种运算,matrix的维数不会发生变化,而array

27、在运算时特别是归约时维数会发生变化。 array转变成matrix用np.mat()、np.matrix()或者np.asmatrix(),而matrix转array用np.asarray或者matrix的A属性(mat1.getA()),再看行向量或者列向量对应的array和matrix的实际维数。17matrix类型矩阵创建矩阵(1)利用mat()、matrix()或asmatrix()函数创建 import numpy as np list1 = 1,2,3,4,5,6,7,8 list11, 2, 3, 4, 5, 6, 7, 8 mat1 = np.mat(list1) # mat(

28、)对列表创建矩阵 mat1matrix(1, 2, 3, 4, 5, 6, 7, 8) print(mat1)1 2 3 4 5 6 7 8 mat2 = np.matrix(list1) # matrix()对列表创建矩阵 mat2matrix(1, 2, 3, 4, 5, 6, 7, 8) print(mat2)1 2 3 4 5 6 7 8 mat3 = np.asmatrix(list1) # asmatrix()对列表创建矩阵 mat3matrix(1, 2, 3, 4, 5, 6, 7, 8) print(mat3)1 2 3 4 5 6 7 8 array1 = np.array

29、(list1) # array()对列表创建数组 array1array(1, 2, 3, 4, 5, 6, 7, 8) mat4 = np.mat(array1) # mat()对数组创建矩阵 mat4matrix(1, 2, 3, 4, 5, 6, 7, 8) print(mat4.ndim) # mat4维数是二维2 print(mat4.shape) # mat4是2行4列 (2, 4) print(type(mat4) # mat4类型,矩阵类型 array2 = np.arange(1,5) #创建一维数组 array2 #显示array2array(1, 2, 3, 4) pri

30、nt(array2) #输出array21 2 3 4 print(array2.ndim) #输出array2的维数为11 print(array2.shape) #输出array2的形状,行为4元素,列无(4,) print(type(array2) #输出array2的类型,N维数组类型 mat5 = np.mat(array2) #利用mat()对一维数组创建矩阵mat5 mat5 #显示mat5 matrix(1, 2, 3, 4) print(mat5) #输出mat51 2 3 4 print(mat5.ndim) #输出mat5的维数为22 print(mat5.shape)

31、#输出mat5的形状,1行4列(1, 4) print(type(mat5) #输出mat5的类型,矩阵类型18matrix类型矩阵创建矩阵(2)特殊矩阵的创建 import numpy as np x = np.zeros(3,3),dtype=8) #创建3*3全0二维数组 xarray(0, 0, 0, 0, 0, 0, 0, 0, 0, dtype=int8) mat1 = np.mat(x) #创建3*3全0矩阵 mat1matrix(0, 0, 0, 0, 0, 0, 0, 0, 0, dtype=int8) print(mat1)0 0 0 0 0 0 0 0 0 m

32、at2 = np.mat(np.ones(3,3),dtype=8) #创建3*3全1矩阵 mat2matrix(1, 1, 1, 1, 1, 1, 1, 1, 1, dtype=int8) mat3 = np.mat(np.eye(3,3,dtype=int) #创建3*3对角矩阵,即单位矩阵 mat3matrix(1, 0, 0, 0, 1, 0, 0, 0, 1) y = 1,2,3 mat4 = np.mat(np.diag(y) #创建对角线为1,2,3的3*3对角矩阵 mat4matrix(1, 0, 0, 0, 2, 0, 0, 0, 3)19matrix类型矩阵创建

33、矩阵(3)列表、数组、矩阵间的相互转换 import numpy as np list1 = 0,1,2,3,4,5,6,7,8 array1 = np.array(list1) #列表list1数组array1,array()实现 array1array(0, 1, 2, 3, 4, 5, 6, 7) print(array1)0 1 2 3 4 5 6 7 mat1 = np.mat(array1) #数组array1矩阵mat1,mat()实现 mat1matrix(0, 1, 2, 3, 4, 5, 6, 7) print(mat1)0 1 2 3 4 5 6 7 array2 = n

34、p.array(mat1) #矩阵mat1数组array2,array2= array1,array()实现 array2array(0, 1, 2, 3, 4, 5, 6, 7) array3 = mat1.getA() #矩阵mat1数组array3,array3= array1,getA()实现 array3array(0, 1, 2, 3, 4, 5, 6, 7) list2 = mat1.tolist() #矩阵mat1列表list2,list2= list1,tolist()实现 list20, 1, 2, 3, 4, 5, 6, 7 list3 = array3.tolist()

35、 #数组array3列表list3,list3=list1,tolist()实现 list30, 1, 2, 3, 4, 5, 6, 720matrix类型矩阵矩阵的运算两个矩阵相加减,即它们相同位置的元素相加减。只有对于两个行数、列数分别相等的矩阵(即同型矩阵),加减法运算才有意义,这一点与二维数组的加减运算规则一致。当矩阵A的列数等于矩阵B的行数时,A与B两矩阵才可以相乘,两矩阵相乘按照矩阵的乘法运算规则,这一点与二维数组的乘法运算规则不同,二维数组的乘法运算规则同加减规则一致,按位相乘。一般不进行两个矩阵直接相除,矩阵的除法是通过逆矩阵实现的。(1) 矩阵的加减乘运算 import nu

36、mpy as np a = np.mat(np.arange(1,7).reshape(2,3) amatrix(1, 2, 3, 4, 5, 6) b = a bmatrix(1, 2, 3, 4, 5, 6) print(a + b) #矩阵相加,同型矩阵 2 4 6 8 10 12 print(a - b) #矩阵相减,同型矩阵0 0 0 0 0 0 c = np.mat(np.arange(1,7).reshape(3,2) cmatrix(1, 2, 3, 4, 5, 6) print(a * c) #矩阵相乘,a的列数等于矩阵c的行数22 28 49 64 print(np.dot

37、(a,c) #矩阵点乘,a的列数等于矩阵c的行数22 28 49 64 print(2 * a) #数乘矩阵 2 4 6 8 10 12 print(a * 2) #矩阵乘数 2 4 6 8 10 1221matrix类型矩阵矩阵的运算(2)矩阵的转置和求逆 print(a.T) #矩阵转置1 4 2 5 3 6 print(a.I) #求逆矩阵-0.94444444 0.44444444 -0.11111111 0.11111111 0.72222222 -0.22222222 print(a)1 2 3 4 5 6(3)矩阵的求和及索引 print(a.sum(axis = 0) #计算矩

38、阵每一列的和5 7 9 print(a.sum(axis = 1) #计算矩阵每一行的和 6 15 print(a.max(axis = 0) #计算矩阵每一列的最大值4 5 6 print(a.max(axis = 1) #计算矩阵每一行的最大值3 6 print(a.argmax(axis = 0) #计算矩阵每一列的最大值索引1 1 1 print(a.argmax(axis = 1) #计算矩阵每一行的最大值索引2 2(4)矩阵的分割和合并 mat1 = np.mat(np.arange(20).reshape(4,5) print(mat1) 0 1 2 3 4 5 6 7 8 9

39、10 11 12 13 14 15 16 17 18 19#分割出行,2行(含)到最后行;列,3列(含)到最后列,所有元素 mat2 = mat12:,3: print(mat2)13 14 18 19 mat3 = mat1:2,: #分割出行,开始到2行(不含);列,所有列,所有元素 mat3matrix(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) mat4 = mat12:,: #分割出行,2行(含)到最后行;列,所有列,所有元素 mat4matrix(10, 11, 12, 13, 14, 15, 16, 17, 18, 19) mat4 = mat12: #分割出行,

40、2行(含)到最后行;列,所有列,所有元素 mat4matrix(10, 11, 12, 13, 14, 15, 16, 17, 18, 19) mat5 = np.vstack(mat3,mat4) #按列合并,即列数不变 print(mat5) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 mat6 = np.hstack(mat3,mat4) #按行合并,即行数不变 print(mat6) 0 1 2 3 4 10 11 12 13 14 5 6 7 8 9 15 16 17 18 19 22matrix类型和array类型的区别 nu

41、mpy的matrix必须是2维的,但是numpy的array (ndarrays) 可以是多维的(1D,2D,3DND);matrix是array的一个小的分支,包含于array,所以matrix 拥有array的所有特性。但是numpy里面数组array遵循逐个元素的运算规则,而矩阵matrix遵循矩阵运算的规则。在二者做乘法运算和规约运算时要注意其区别。(1)矩阵和矩阵相乘 a = np.mat(1,2,3,4,5,6,7,8) #mat()函数将列表生成矩阵 print(a) #输出矩阵a的值1 2 3 4 5 6 7 8 print(type(a) #输出矩阵a的类型 print(a.

42、ndim) #输出矩阵a维数,维数2,矩阵必须是二维2 print(a.shape) #输出矩阵a形状, 2行4列(2, 4) b = np.mat(np.arange(1,9).reshape(4,2) #mat()函数将二维数组生成矩阵b print(b) #输出矩阵b的值1 2 3 4 5 6 7 8 print(type(b) #输出矩阵b的类型 print(b.ndim) #输出矩阵b维数,维数2,矩阵必须是二维2 print(b.shape) #输出矩阵b形状, 4行2列(4, 2)#矩阵a和b满足相乘的规则,用a*b求矩阵的乘 a * b matrix( 50, 60, 114,

43、 140) print(a * b) #输出矩阵a和矩阵b相乘的结果,结果还是二维的矩阵 50 60 114 140#用dot(a,b)求矩阵的乘 print(np.dot(a,b) 50 60 114 14023matrix类型和array类型的区别(2)数组和数组相乘#数组c和数组d相乘,也可用c*d c = np.array(1,2,3,4,5,6,7,8) # array ()函数将列表生成2行4列数组 print(c) #输出数组c的值1 2 3 4 5 6 7 8 print(type(c) #输出c的类型,数组类型 print(c.ndim) #输出数组c维数,维数22 prin

44、t(c.shape) #输出数组c形状,2行4列(2, 4)# reshape ()函数将arange()生成的一维数组重塑成4行2列数组 d = np.arange(1,9).reshape(4,2) print(d) #输出数组d的值,4行2列数组1 2 3 4 5 6 7 8 print(type(d) #输出d的类型,数组类型#二维数组c和d相乘,是对应元素相乘,两二维数组形状要一样 c*d #形状不一样,抛出异常Traceback (most recent call last): File , line 1, in ValueError: operands could not be

45、broadcast together with shapes (2,4) (4,2) # reshape ()函数将arange()生成的一维数组#重塑成2行4列数组 d = np.arange(1,9).reshape(2,4) print(d) #输出数组d的值,2行4列数组1 2 3 4 5 6 7 8 print(type(d) #输出d的类型,数组类型#c和d形状一致,对应元素相乘 c * d array( 1, 4, 9, 16, 25, 36, 49, 64)24matrix类型和array类型的区别(3)归约运算 数组array与矩阵matrix最大的不同是在做归约运算时,ar

46、ray的维数会发生变化,但matrix总是保持为2维。# 矩阵matrix做归约运算时,总是保持为2维 a = np.mat(np.arange(4).reshape(2,2) amatrix(0, 1, 2, 3) b = a.mean(1) #按行规约,求平均值,矩阵维数2不变 bmatrix( 0.5, 2.5) b.shape(2, 1) b.ndim2# 数组array做归约运算时,维数会发生变化 c = np.arange(4).reshape(2,2) carray(0, 1, 2, 3) d = c.mean(1) #按行规约,求平均值,数组维数变为1 darray( 0.5,

47、 2.5) d.shape(2,) d.ndim1pandas模块02pandas简介 pandas是Python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发项目组继续开发和维护。pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。 Python 中的所有数据类型在pandas中依然适用,pandas自己主要有一维Series、二维的表格型DataFrame和三维的Panel三种类型。一维Series与Numpy中的一维ar

48、ray类似,二者与Python基本的数据结构list也很相近,字符串、bool值、数字等都能保存在Series中,其中Time-Series是以时间为索引的Series。二维的表格型数据结构DataFrame可以理解为Series的容器;三维的Panel可以理解为DataFrame的容器。这些数据类型让pandas操作数据显得更加方便和高效,而三种类型中以DataFrame类型最为常用。26pandas基础1. Series类型 import numpy as np import pandas as pd#用Series()创建Series类型对象# np.nan的值为NaN,表示数据值缺失

49、s = pd.Series(1,3,4,5,6,np.nan,8,np.nan,10) print(s) #输出s,显示成一列,有索引,元素类型默认是float640 11 32 43 54 65 NaN6 87 NaN8 10dtype: float64 print(s.dtype) #输出s中元素类型,默认是float64float64 print(s.ndim) #输出s维数1 print(s.shape) #输出s形状(9,) print(() # Series无该属性,DataFrame有该属性Traceback (most recent call last): File

50、 , line 1, in File /usr/lib/Python2.7/dist-packages/pandas/core/generic.py, line 2360, in _getattr_ (type(self)._name_, name)AttributeError: Series object has no attribute info27 print(type(s) #输出s的类型,是Series类型 print(s.values) #输出s的values值 1. 3. 4. 5. 6. nan 8. nan 10. s.values #输出s的values值,值是数组类型ar

51、ray( 1., 3., 4., 5., 6., nan, 8., nan, 10.) print(type(s.values) #输出s.values的类型是ndarray数组类型 print(s.index) #输出s的index值Int64Index(0, 1, 2, 3, 4, 5, 6, 7, 8, dtype=int64) s.index #输出s的index值,值是Int64Index类型Int64Index(0, 1, 2, 3, 4, 5, 6, 7, 8, dtype=int64) print(type(s.index) #输出s.index的类型是Int64Index p

52、rint(s.sum() #输出s的各元素的和 37.0pandas基础#输出s每个元素对应是否为空值NaN,False表示非空值,True表示是空值 print(s.isnull() 0 False1 False2 False3 False4 False5 True6 False7 True8 Falsedtype: bool# 查看列是否存在空值,True表示有空值, False表示无空值 print(s.isnull().any(axis=0) True print(s.isnull().any() # 省略any()参数axis=0,功能同上True#计算有空值列的数量,要么是1,要么

53、是0,因为只有1列 print(s.isnull().any(axis=0).sum()128pandas基础2. DataFrame类型 import numpy as np import pandas as pd(1)字典作为DataFrame()输入创建二维表格 df = pd.DataFrame(id:1001,1002,1003,1004,1005,1006,date:pd.date_range(20180101, periods=6),city:Beijing, shanghai, guangzhou , Shenzhen, nanjing, changzhou, age:18,2

54、6,28,36,42,52,category:2018-A,2018-B,2018-C,2018-D,2018-E,2018-F, price:1200,np.nan,2500,5500,np.nan,4300,columns =id,date,city,category,age,price) df #显示df的值,带索引列(自动添加)和column行 id date city category age price0 1001 2018-01-01 Beijing 2018-A 18 1200.01 1002 2018-01-02 shanghai 2018-B 26 NaN2 1003 20

55、18-01-03 guangzhou 2018-C 28 2500.03 1004 2018-01-04 Shenzhen 2018-D 36 5500.04 1005 2018-01-05 nanjing 2018-E 42 NaN5 1006 2018-01-06 changzhou 2018-F 52 4300.0#查看二维表格类型DataFrame信息 print(type(df) #输出df的类型 print(df.ndim) #输出df的维数2 print(df.shape) #输出df的形状(6, 6) print(df.dtypes) #输出df各列数据类型id int64da

56、te datetime64nscity objectcategory objectage int64price float64dtype: object29pandas基础2. DataFrame类型#输出df基本信息(类型、行数、列数、列名称、每列数据类型、所占空间) print(() Int64Index: 6 entries, 0 to 5Data columns (total 6 columns):id 6 non-null int64date 6 non-null datetime64nscity 6 non-null objectcategory 6 non-null

57、 objectage 6 non-null int64price 4 non-null float64dtypes: datetime64ns(1), float64(1), int64(2), object(2)memory usage: 336.0+ bytesNone print(dfdate) # 输出DataFrame某一列的值0 2018-01-011 2018-01-02 2 2018-01-033 2018-01-044 2018-01-055 2018-01-06Name: date, dtype: datetime64ns print(dfage,price) # 输出Da

58、taFrame某几列的值 age price0 18 12001 26 NaN2 28 25003 36 55004 42 NaN5 52 430030 print(df.isnull() # 以二维表格形式,输出每个元素对应是否为空值NaN id date city category age price0 False False False False False False1 False False False False False True2 False False False False False False3 False False False False False False

59、4 False False False False False TrueFalse False False False False False# 查看各列是否存在空值,True表示有空值, False表示无空值 print(df.isnull().any(axis=0)id Falsedate Falsecity Falsecategory Falseage Falseprice Truedtype: boolpandas基础2. DataFrame类型 df.values # df.values的类型是二维数组类型array(1001, Timestamp(2018-01-01 00:00:

60、00), Beijing, 2018-A, 18, 1200.0, 1002, Timestamp(2018-01-02 00:00:00), shanghai, 2018-B, 26, nan, 1003, Timestamp(2018-01-03 00:00:00), guangzhou , 2018-C, 28, 2500.0, 1004, Timestamp(2018-01-04 00:00:00), Shenzhen, 2018-D, 36, 5500.0, 1005, Timestamp(2018-01-05 00:00:00), nanjing, 2018-E, 42, nan,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论