版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
五数据预处理项目项目六学习目标知识目标理解NumPy的含义、数据类型和Ndarray创建方法;掌握NumPy数组的创建、操作、算术运算和统计方法;掌握Pandas的引入、Series和DataFrame的创建与基本操作;精通处理数据中的重复、缺失、类型转换问题,及数据连接方法。能力目标能正确利用NumPy库的算术函数进行运算;能正确利用DataFrame的函数,进行DataFrame的创建、增删列等基本操作;能正确利用Pandas库的read_excel()读取数据、fillna()填充缺失值等操作。项目六学习目标素质目标在协同进行数据预处理时,培养学生的团队协作精神和集体意识。在NumPy创建数组、算术计算中,培养学生严谨认真的态度。在进行数据清洗过程中,要求学生坚持诚实守信、弘扬诚信文化,强化诚信为本、不弄虚作假的职业道德。项目六思维导图5.1NumPy数值计算NumPy(NumericalPython的简称)是一个开源的Python数值计算库,它支持大量的维度数组和矩阵运算,此外也针对数组运算提供大量的数学函数库。5.1.1NumPy概述5.1NumPy数值计算强大的N维数组对象NumPy特点15.1.1NumPy概述5.1NumPy数值计算广播功能使用方便高性能NumPy数据类型25.1.1NumPy概述5.1NumPy数值计算bool用于表示逻辑值,即真(True)或假(False)int用于表示整数值。根据存储大小和范围,它可以有不同的类型uint表示无符号整数,即不包含负数的整数。float用于表示浮点数值,即带有小数点的数值。complex用于表示复数值,包含实部和虚部。数据类型对象(dtype)是一个系统用来描述数组中元素类型的对象。数据类型对象(dtype)31.了解dtype5.1.1NumPy概述5.1NumPy数值计算(1)数据类型(2)大小(3)字节顺序(4)形状数据类型对象(dtype)32.创建dtype对象行号代码行1importnumpyasnp2#创建一个整数类型的NumPy数组3int_array=np.array([1,2,3,4],dtype=32)4#创建一个浮点类型的NumPy数组5float_array=np.array([1.1,2.2,3.3,4.4],dtype=np.float64)6#创建一个复数类型的NumPy数组7complex_array=np.array([1+2j,3+4j],dtype=plex128)8print(int_array)9print(float_array)10print(complex_array)5.1.1NumPy概述5.1NumPy数值计算数据类型对象(dtype)33.自定义dtype自定义dtype允许定义一个包含多个字段的数据类型,每个字段可以有自己的数据类型、名称和字节顺序。自定义dtype对象是使用以下语法构造的:numpy.dtype(object,align,copy)指要转换为的数据类型对象align如果为true,填充字段使其类似C的结构体copy是复制dtype对象,如果为false,则是对内置数据类型对象的引用5.1.1NumPy概述5.1NumPy数值计算数据类型对象(dtype)33.自定义dtype行号代码行1importnumpyasnp2#定义一个自定义dtype3custom_dtype=np.dtype([4
('姓名','U10'),#长度为10的Unicode字符串5
('年龄',32),#32位整数字段6
('体重',np.float64)#双精度浮点数字段7])8#使用自定义dtype创建结构化数组9data=np.array([10
('王欢',30,65.5),11
('兰英',25,75.0),12
('付杰',35,85.5)13],dtype=custom_dtype)14#访问结构化数组中的字段15print(data['姓名'])#访问'姓名'字段16print(data['年龄'])#访问'年龄'字段17print(data['体重'])#访问'体重'字段5.1.1NumPy概述5.1NumPy数值计算数据类型对象(dtype)34.字节顺序当处理来自不同硬件平台的数据时,字节顺序变得重要。可以在dtype中指定字节顺序:<表示数据是小端序,>表示数据是大端序。下面定义一个小端序的int64数据类型,代码如例5-3所示。行号代码行1importnumpyasnp2#预设字节顺序3dt=np.dtype('<i8')4print(dt)5.1.1NumPy概述5.1NumPy数值计算Ndarray(N-dimensionalarray)对象是NumPy库的核心数据结构,用于存储和操作大型多维数组与矩阵。Ndarray是一个快速、灵活的大数据容器,可以存储单一数据类型的大量数据,并提供了一系列操作这些数据的方法。5.1.2Ndarray对象5.1NumPy数值计算5.1.2Ndarray对象5.1NumPy数值计算Ndarray内部组成11.数据指针
2.数据类型(dtype)
3.形状(shape)
4.跨度(strides)5.1.2Ndarray对象5.1NumPy数值计算创建Ndarray2numpy.array(object,
dtype
=
None,
copy
=
True,
order
=
None,
subok
=
False,
ndmin
=
0)数组或嵌套的数列数组元素的数据类型,可选对象是否需要复制,可选创建一个ndarray可以调用NumPy的array函数创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)默认返回一个与基类类型一致的数组指定生成数组的最小维度组创建ndarray对象,代码例5-4所示创建Ndarray25.1.2Ndarray对象5.1NumPy数值计算行号代码行1importnumpyasnp2#创建一个一维数组3a=np.array([1,2,3])4print(a)5#输出:[123]6#创建一个二维数组7b=np.array([[1,2,3],[4,5,6]])8print(b)9#输出:10#[[123]11#[456]]创建ndarray对象,代码例5-4所示创建Ndarray25.1.2Ndarray对象5.1NumPy数值计算12#指定生成数组的数据类型13c=np.array([1,2,3],dtype=complex)14print(c)15#输出:[1.+0.j2.+0.j3.+0.j]16#使用ndmin指定数组的最小维数17d=np.array([1,2,3],ndmin=2)18print(d)19#输出:20#[[123]]常见的NumPy数组对象属性15.1.3NumPy数组对象属性5.1NumPy数值计算属性说明ndarray.ndim秩,即轴的数量或维度的数量ndarray.shape数组的维度,对于矩阵,n行m列ndarray.size数组元素的总个数,相当于.shape中n*m的值ndarray.dtypendarray对象的元素类型ndarray.itemsizendarray对象中每个元素的大小,以字节为单位ndarray.flagsndarray对象的内存信息ndarray.realndarray元素的实部ndarray.imagndarray元素的虚部ndarray.data包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性NumPy数组的维数25.1.3NumPy数组对象属性5.1NumPy数值计算
NumPy数组的维数称为秩(rank),秩就是轴(axis)的数量,即数组的维度,一维数组的秩为1,二维数组的秩为2。很多时候可以声明axis。axis=0,表示沿着第0轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。5.1.3NumPy数组对象属性5.1NumPy数值计算
创建一个二维数组,通过常见的数组属性查看数组的维度、形状、数据类型、元素大小等。代码如例5-5所示。行号代码行1importnumpyasnp2#创建一个2x3的整数数组3a=np.array([[1,2,3],[4,5,6]])4print("数组:\n",a)5print("维度:",a.ndim)#维度6print("形状:",a.shape)#形状7print("元素总数:",a.size)#元素总数8print("元素数据类型:",a.dtype)#元素数据类型9print("每个元素的大小:",a.itemsize)#每个元素的大小5.1.4Numpy创建数组5.1NumPy数值计算numpy.zeros()函数1numpy.zeros()函数用于创建一个全零的数组。通过传递一个整数或者一个表示形状的元组来指定数组的形状。语法结构如下:numpy.zeros(shape,dtype=float,order='C')数组的形状(可选)是数组的数据类型,默认为float64(可选)在C或Fortran中的内存存储顺序,默认为“C”5.1.4Numpy创建数组5.1NumPy数值计算
创建一个一维、二维全零数组,代码如例5-6所示。行号代码行1importnumpyasnp2#创建一个形状为(3,)的一维全零数组3a=np.zeros(3)4#创建一个3x3的二维全零数组5b=np.zeros((3,3))6print(a)7print(b)000000000000np.zeros(3)np.zeros((3,3))5.1.4Numpy创建数组5.1NumPy数值计算numpy.empty()函数2numpy.empty()用于生成一个给定形状(shape)和数据类型(dtype)的新数组,其初始内容是随机的,取决于内存的状态。语法结构:numpy.empty(shape,dtype=float,order='C')参数与numpy.zeros()相同。5.1.4Numpy创建数组5.1NumPy数值计算
下面创建一个2×2的未初始化的数组,代码如例5-7所示。行号代码行1importnumpyasnp2#创建一个2x2的未初始化的数组3a=np.empty((2,2))
4print(a)1.1.1.1.np.empty((2,2))5.1.4Numpy创建数组5.1NumPy数值计算numpy.ones()函数3numpy.ones()用于创建指定形状的数组,数组元素以1来填充。语法结构:numpy.ones(shape,dtype=None,order='C')参数与numpy.zeros()相同。5.1.4Numpy创建数组5.1NumPy数值计算numpy.ones()函数3创建一个一维、二维全一数组,代码如例5-8所示。行号代码行1importnumpyasnp2#创建一个形状为(4,)的一维全一数组3a=np.ones(4)4#创建一个4x4的二维全一数组5b=np.ones((4,4))6print(a)7print(b)11111111111111111111np.ones(4)np.ones((4,4))np.ones()函数返回的数组元素类型默认为float645.1.5NumPy切片与操作5.1NumPy数值计算切片的基本语法:array[start:end:step],其中start是切片的起始索引,end是切片的结束索引(不包含),step是切片的步长。创建一个一维数组进行切片操作,代码如例5-9所示。行号代码行1importnumpyasnp2#创建一个NumPy数组3arr=np.array([0,1,2,3,4,5,6,7,8,9])4#切片操作示例5sub_arr=arr[2:7:2]#从索引2开始到索引7(不包含7),步长为26print(sub_arr)5.1.5NumPy切片与操作5.1NumPy数值计算arr[2:7:2]0001122334455667788990001122334455667788995.1.5NumPy切片与操作5.1NumPy数值计算切片用法12.使用负数索引
负数索引是一种便捷的索引方式,允许从数组的末尾开始反向计数。这有利于快速访问数组的末尾元素。例5-10代码录入行号代码行1importnumpyasnp2arr=np.array([0,1,2,3,4,5,6,7,8,9])3#使用负数索引切片4last_elements=arr[-4:-1]#取最后四个元素中的前三个5print(last_elements)5.1.5NumPy切片与操作5.1NumPy数值计算arr[-4:-1]-100-91-82-73-64-55-46-37-28-19-100-91-82-73-64-55-46-37-28-195.1.5NumPy切片与操作5.1NumPy数值计算切片用法13.省略切片参数
切片操作允许省略某些参数,从而提供更大的灵活性。当你省略切片参数时,NumPy会使用默认值来填补这些省略的部分。例5-11代码录入行号代码行1importnumpyasnp2arr=np.array([0,1,2,3,4,5,6,7,8,9])3#省略start,表示从数组开始位置切片4a=arr[:5]#从开始到索引5(不包含5)5print(a)6#省略end,表示切片到数组末尾7b=arr[5:]#从索引5开始到数组末尾8print(b)9#同时省略start和end,表示切片整个数组,可以用step来取每隔几个元素的值10c=arr[::2]#取所有索引为偶数的元素11print(c)5.1.5NumPy切片与操作5.1NumPy数值计算arr[:5]000112233445566778899000112233445566778899arr[5:]000112233445566778899arr[::2]0001122334455667788995.1.5NumPy切片与操作5.1NumPy数值计算切片用法14.多维数组的切片
在多维数组中,使用逗号来分隔不同维度的切片。使用冒号来指定维度的范围。例5-12代码录入行号代码行1importnumpyasnp2arr_2d=np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])3#取第1到3行(不包含第3行),第0到2列(不包含第2列)的子数组4sub_arr_2d=arr_2d[1:3,0:2]5print(sub_arr_2d)5.1.5NumPy切片与操作5.1NumPy数值计算arr_2d[1:3,0:2]0120012134526783910110120012134526783910115.1.5NumPy切片与操作5.1NumPy数值计算数组操作21.数组形状的变换
数组形状变换最常用的方法是reshape(),这个方法可以在不改变数组数据的前提下,给数组一个新的形状。例5-13代码录入行号代码行1importnumpyasnp2arr=np.array([0,1,2,3,4,5,6,7,8,9])3#改变数组的形状,不改变数据4reshaped_arr=arr.reshape(2,5)#将一维数组重塑为2行5列的二维数组5print(reshaped_arr)5.1.5NumPy切片与操作5.1NumPy数值计算数组操作21.数组形状的变换0123456789arr.reshape(2,5)0123456789255.1.5NumPy切片与操作5.1NumPy数值计算数组操作22.数组的拼接
数组的拼接是指将两个或多个数组合并为一个数组。NumPy提供了多种方法来执行数组的拼接,最基础的数组拼接函数是np.concatenate(),它允许沿指定的轴连接一个数组序列。下面拼接两个数组例5-14代码录入行号代码行1importnumpyasnp2#拼接两个数组
3arr1=np.array([1,2,3])4arr2=np.array([4,5,6])5concatenated_arr=np.concatenate((arr1,arr2))6print(concatenated_arr)5.1.5NumPy切片与操作5.1NumPy数值计算数组操作22.数组的拼接arr1arr2123456np.concatenate((arr1,arr2))1234565.1.5NumPy切片与操作5.1NumPy数值计算数组操作23.数组的转置
数组的转置是将数组的行列被互换以产生新的数组。在NumPy中,可以使用.T属性或者np.transpose()函数来实现数组的转置。例5-14代码录入行号代码行1importnumpyasnp2#创建一个二维数组
3array=np.array([[1,2,3],[4,5,6],[7,8,9]])4transposed_array=array.T5print("使用.T属性转置后的数组:")6print(transposed_array)7#或者使用np.transpose()函数进行转置8transposed_array_func=np.transpose(array)9print(transposed_array_func)5.1.5NumPy切片与操作5.1NumPy数值计算array.T或np.transpose(array)0120123145627890120147125823695.1.6Numpy算术计算5.1NumPy数值计算基本算术函数1NumPy算术函数包含简单的加减乘除:add(),subtract(),multiply()和divide()。首先创建两个数组a和b:a=np.array([1,2,3])b=np.array([4,5,6])1234565.1.6Numpy算术计算5.1NumPy数值计算基本算术函数1a+b或np.add(a,b)
123456579加法a-b或np.subtract(a,b)
123456-3-3-3减法5.1.6Numpy算术计算5.1NumPy数值计算基本算术函数1a*b或np.multiply(a,b)
12345641018乘法a/b或np.divide(a,b)
1234560.250.40.5除法5.1.6Numpy算术计算5.1NumPy数值计算Numpy.power()函数2
Numpy.power()函数用于数组元素的逐元素幂运算。Numpy.power()函数接受两个数组作为输入:第一个数组是底数,第二个数组是指数。语法结构:numpy.power(x1,x2)
x1代表底数数组
x2代表指数数组5.1.6Numpy算术计算5.1NumPy数值计算
下面进行幂运算,代码如例5-17所示。行号代码行1importnumpyasnp2#示例1:标量的幂运算3base=24exponent=35result=np.power(base,exponent)6print(result)7#示例2:数组的幂运算,使用相同的指数8base_array=np.array([1,2,3,4])9exponent=210result_array=np.power(base_array,exponent)11print(result_array)12#示例3:数组的幂运算,使用指数数组13base_array=np.array([1,2,3,4])14exponent_array=np.array([0,1,2,3])15result_array=np.power(base_array,exponent_array)16print(result_array)5.1.6Numpy算术计算5.1NumPy数值计算其他函数3
除了上述数学函数的例子,numpy还支持非常多的数学函数,以下是一些常用函数,代码如例5-18所示。行号代码行1importnumpyasnp2score=np.array([[88,80],[67,83],[74,75],[67,79],[56,76]])3print(score)4print('根据行取最大值:\n',score.max(axis=0))#根据行取最大值5print('根据行取最小值:\n',score.min(axis=0))#根据行取最小值6print('根据列求和:\n',score.sum(axis=1))#根据列求和7print('根据行求和:\n',score.sum(axis=0))#根据行求和8print('根据行求平均数:\n',score.mean(axis=0))#根据行求平均数9print('根据行求标准差:\n',score.std(axis=0))#根据行求标准差5.1.7Numpy统计函数5.1NumPy数值计算中位数(Median)1
使用numpy.median()函数计算数组中元素的中位数,代码如例5-19所示。行号代码行1importnumpyasnp2arr=np.array([1,2,3,4,5])3median=np.median(arr)4print(median)#输出数组的中位数12345中位数123455.1.7Numpy统计函数5.1NumPy数值计算标准差(StandardDeviation)2
使用numpy.std()返回数组的方差,接例5-19,代码及运行结果如下所示。行号代码行1importnumpyasnp2arr=np.array([1,2,3,4,5])3std_dev=np.std(arr)4print(std_dev)#输出数组的标准差标准差123451.41421356237309515.1.7Numpy统计函数5.1NumPy数值计算方差(Variance)3
使用numpy.var()返回数组的标准差,接例5-19,代码及运行结果如下所示。行号代码行1importnumpyasnp2arr=np.array([1,2,3,4,5])3variance=np.var(arr)4print(variance)#输出数组的方差方差123452.05.1.7Numpy统计函数5.1NumPy数值计算最大值(Max)和最小值(Min)4
使用numpy.max()、numpy.min()函数返回数组中元素最大值与最小值,接例5-19,代码及运行结果如下所示。行号代码行1importnumpyasnp2arr=np.array([1,2,3,4,5])3max_value=np.max(arr)4min_value=np.min(arr)5print(max_value,min_value)#输出数组的最大值和最小值1234512345最小值最大值5.2Pandas数据结构
Pandas是Python第三方库,以其高效的数据结构和数据分析工具著称。它是构建在NumPy之上,专为解决关系型数据操作、时间序列分析及数据清洗等问题设计的。Pandas提供了灵活易用的数据结构,主要有Series和DataFrame两种核心数据结构,使得处理大规模数据集时能更加便捷高效。5.2.1Pandas库简介5.2Pandas数据结构Pandas库主要功能有:5.2.1Pandas库简介5.2Pandas数据结构数据读写Pandas支持多种格式的数据读写,包括CSV、Excel、JSON、HTML以及数据库格式。数据清洗Pandas提供多种便捷的方法来处理丢失数据以及筛选、转换和清洗数据集数据加工它拥有强大的数据加工能力,可以轻松地进行数据合并、拼接、分组、聚合以及强大的时间序列功能自动化处理相比Excel的手动操作,Pandas可以通过脚本自动化处理数据Series是一维标签数组,能够保存任何数据类型(整数、字符串、浮点数、Python列表等)。它有一个标签轴(axislabel),可以想象成Excel中的一列。Series对象的基本属性包括values(数据)和index(标签)如下表所示。5.2.2Series5.2Pandas数据结构Index(标签)Values(数据)数据类型010整数1'a'字符串23.14浮点数3[1,2,3]Python列表Series对象在Pandas库中可以通过多种方式创建,最常见的是从列表或字典创建,函数如下:5.2.2Series5.2Pandas数据结构pd.Series(
data
,
index
,
dtype
,
name
,
copy
)data可以由列表、字典等作为参数来创建index可用列表自定义,必须与数据列的个数匹配,不填时默认从0开始dtype是数据类型,默认自己判断name可设置名称copy用于拷贝数据,默认为False从列表或字典创建Series,代码如例5-21、5-22、5-23所示。5.2.2Series5.2Pandas数据结构例5-21代码录入行号代码行1importpandasaspd2#从列表创建Series3my_series=pd.Series([1,2,3,4,5])4print(my_series)5#根据索引值读取数据6print(my_series[1])从列表或字典创建Series,代码如例5-21、5-22、5-23所示。5.2.2Series5.2Pandas数据结构例5-22代码录入行号代码行1importpandasaspd2#从列表创建Series,自定义索引3my_series=pd.Series([6,7,8],index=['X','Y','Z'])4print(my_series)5#根据索引值读取数据6print(my_series['Z'])从列表或字典创建Series,代码如例5-21、5-22、5-23所示。5.2.2Series5.2Pandas数据结构例5-23代码录入行号代码行1importpandasaspd2#从字典创建Series,这里字典的键自动成为索引3my_dict=pd.Series({1:'a',2:'b',3:'c'})4print(my_dict)5#根据索引值读取数据6print(my_dict[3])DataFrame是Pandas库中的一个二维标签化数据结构,可以将其想象成一个Excel表格,有行有列。5.2.3DataFrame5.2Pandas数据结构DataFrame由其同名函数创建,语法为:pd.DataFrame(data,index,columns,dtype,copy)5.2.3DataFrame5.2Pandas数据结构DataFrame的创建1参数说明data包含在DataFrame中的数据index索引值,或者可以称为行标签,如果未提供,则默认为整数范围(0到n-1,其中n是数据的长度)columns列标签,如果未提供,则默认为从0开始的整数。如果数据是字典形式,字典的键将被用作列名,除非提供了此参数。dtype数据类型copy拷贝数据,默认为False,如果想确保原始数据不被修改,可以设置copy=True。通过列表、字典等数据类型创建DataFrame,代码如例5-24、5-25、5-26所示:5.2.3DataFrame5.2Pandas数据结构例5-24代码录入行号代码行1importpandasaspd2#通过列表创建DataFrame3data=[['张明',14,88],['李丽',13,92],['王强',14,95]]4df=pd.DataFrame(data,columns=['姓名','年龄','分数'])5print(df)通过列表、字典等数据类型创建DataFrame,代码如例5-24、5-25、5-26所示:5.2.3DataFrame5.2Pandas数据结构例5-25代码录入行号代码行1importpandasaspd2#从字典的列表创建DataFrame3data=[{'姓名':'张明','年龄':14,'分数':88},{'姓名':'李丽','年龄':13,'分数':92},{'姓名':'王强','年龄':14,'分数':95}]4df=pd.DataFrame(data)5print(df)6#通过loc属性返回指定行的数据7df.loc[0:1]#返回第一行和第二行通过列表、字典等数据类型创建DataFrame,代码如例5-24、5-25、5-26所示:5.2.3DataFrame5.2Pandas数据结构例5-26代码录入行号代码行1importpandasaspd2#从字典的字典创建DataFrame,并指定行索引3data={'A':[1,2],'B':[3,4]}4df=pd.DataFrame(data,index=['Row1','Row2'])5print(df)DataFrame的基本操作有行列重命名、插入新列、删除数据、查看数据等,常用操作方法如表5-5所示。5.2.3DataFrame5.2Pandas数据结构DataFrame的基本操作2常用操作方法说明rename()修改行索引/列名insert()插入列drop()删除指定行或列head(n)返回DataFrame前n行tail(n)返回DataFrame后n行①行列重命名5.2.3DataFrame5.2Pandas数据结构DataFrame的基本操作2
rename()用于重命名行索引或列标签,修改列名传入columns参数、修改行索引传入index参数。语法为:df.rename(mapper=None,index=None,columns=None,axis=None,copy=True,inplace=False,level=None,errors='ignore')①行列重命名5.2.3DataFrame5.2Pandas数据结构
将学生成绩单使用rename()方法对列标签和行标签进行重命名,代码如下行号代码行1importpandasaspd2#创建学生成绩单3data=[{'姓名':'张明','年龄':14,'分数':88},{'姓名':'李丽','年龄':13,'分数':92},{'姓名':'王强','年龄':14,'分数':95}]4df=pd.DataFrame(data)5#将列标签重命名6df.rename(columns={'姓名':'名字','分数':'成绩'},inplace=True)7print(df)8#将行标签重命名9df.rename(index={0:'学生1',1:'学生2',2:'学生3'},inplace=True)10print(df)②插入新列5.2.3DataFrame5.2Pandas数据结构DataFrame的基本操作2
insert()用于DataFrame中插入新的列,可以指定要插入列的位置和列的名称,以及列的值。语法如下:df.insert(loc,column,value,allow_duplicates=False)②插入新列5.2.3DataFrame5.2Pandas数据结构
将学生成绩单使用insert()插入一列性别,代码如下行号代码行1importpandasaspd2#创建学生成绩单3data=[{'姓名':'张明','年龄':14,'分数':88},{'姓名':'李丽','年龄':13,'分数':92},{'姓名':'王强','年龄':14,'分数':95}]4df=pd.DataFrame(data)5#在第二列位置插入新列'性别',值为['男','女','男']6df.insert(1,'性别',['男','女','男'])7print(df)③删除数据5.2.3DataFrame5.2Pandas数据结构DataFrame的基本操作2
drop()用于删除DataFrame中的行或列,语法如下:df.drop(labels=None,axis=0,index=None,columns=None,level=None,inplace=False,errors='raise')③删除数据5.2.3DataFrame5.2Pandas数据结构
在学生成绩单中进行删除行或列,代码如下行号代码行1importpandasaspd2#创建学生成绩单3data=[{'姓名':'张明','年龄':14,'分数':88},{'姓名':'李丽','年龄':13,'分数':92},{'姓名':'王强','年龄':14,'分数':95}]4df=pd.DataFrame(data)5#删除名为'年龄'的列6df.drop(columns='年龄',inplace=True)7print(df)8#删除索引为1的行9df.drop(index=1,inplace=True)10print(df)④查看数据5.2.3DataFrame5.2Pandas数据结构DataFrame的基本操作2
head()用于查看DataFrame的前几行数据,默认显示前5行。tail()用于查看DataFrame的后几行数据,默认显示最后5行。语法如下:df.head(n=5)df.tail(n=5)④查看数据5.2.3DataFrame5.2Pandas数据结构
在学生成绩单中查看数据,代码如下行号代码行1importpandasaspd2#上面创建的学生成绩单3data=[{'姓名':'张明','年龄':14,'分数':88},{'姓名':'李丽','年龄':13,'分数':92},{'姓名':'王强','年龄':14,'分数':95}]4df=pd.DataFrame(data)5#使用head()方法查看前两行数据6print(df.head(2))7#使用tail()方法查看后两行数据8print(df.tail(2))5.3Pandas函数调用5.3.1数据清洗5.3Pandas函数调用
数据清洗是数据分析过程中的一个关键步骤,它涉及到从原始数据中修正或删除错误、不完整、不准确或无关紧要的部分。在许多实际应用中,数据往往是不完美的,可能包含许多问题,如重复数据、缺失值等。进行有效的数据清洗可以确保数据分析或模型训练的质量和准确性。重复值处理1
重复值指的是在一个给定的集合、列表、数组或数据结构中存在的相同元素或值。Pandas提供了两个专门处理重复值的函数,分别是5.3.1数据清洗5.3Pandas函数调用查找重复项:DataFrame.duplicated(subset=None,keep='first')删除重复项:DataFrame.drop_duplicates(subset=None,keep='first',inplace=False)重复值处理15.3.1数据清洗5.3Pandas函数调用①检测重复值
使用duplicated()函数,检测数据中的重复值。该函数返回一个布尔序列、重复值,除了首次出现外,其余均被标记为True。5.3.1数据清洗5.3Pandas函数调用①检测重复值
假设有一个客户交易记录的DataFrame,其中包含客户ID、交易日期、交易金额等字段。使用duplicated()函数找出并处理这些记录中的重复值。代码如例5-31所示。行号代码行1importpandasaspd2#创建一个客户交易记录的DataFrame3df=pd.DataFrame({4'客户id':[101,102,101,103,102,101],5'交易日期':['2023-01-01','2023-01-02','2023-01-01','2023-01-03','2023-01-02','2023-01-01'],6'交易金额':[100,200,50,300,150,50]7})8print("原始交易记录:")9print(df)10#检测重复的交易记录11duplicates=df.duplicated()12print("\n重复的交易记录:")13print(duplicates)5.3.1数据清洗5.3Pandas函数调用①检测重复值
如果我们只关心客户ID和交易日期来确定重复(即同一客户在同一天有多笔相同金额的交易),我们可以使用subset参数,代码如下所示:行号代码行14#根据客户ID和交易日期检测重复的交易记录15duplicates_subset=df.duplicated(subset=['客户id','交易日期'])16print("\n根据客户ID、交易日期和交易金额检测重复的交易记录:")17print(duplicates_subset)缺失值处理25.3.1数据清洗5.3Pandas函数调用
缺失值是指在数据集中某些数据属性缺少值或信息的现象。缺失值会对数据分析造成困扰,Pandas提供了多种功能来处理缺失值,包括删除含有缺失值的行或列、填充缺失值以及检测缺失值等。5.3.1数据清洗5.3Pandas函数调用①检测缺失值
在缺失值处理过程中,首先我们需要识别数据中的缺失值,缺失值通常用NaN(NotaNumber)表示。用来检测缺失值的函数包括:isnull()和notnull()函数。isnull()函数常用方法方法说明df.isnull()查看缺失值位置df.isnull().any()判断某一列是否有缺失值df.isnull().sum()统计每列缺失值数量df.isnull().sum().sum()统计DataFrame中缺失值合计数Series.value_counts()统计Series中不同元素出现的次数,在DataFrame中使用时,需要指定对哪一列或行使用5.3.1数据清洗5.3Pandas函数调用①检测缺失值
创建一个包含缺失值的DataFrame,使用isnull()检测缺失值,代码如例5-33所示:行号代码行1importpandasaspd2#创建一个包含缺失值的DataFrame3df=pd.DataFrame({4'A':[1,2,None,4],5'B':[5,None,None,8],6'C':[9,10,11,None]7})8#使用isnull()检测缺失值9is_null=df.isnull()10print(is_null)5.3.1数据清洗5.3Pandas函数调用①检测缺失值
notnull()函数是isnull()的反函数,用于检测数据中的非缺失值,返回标识非缺失值位置的布尔对象。接例5-33,检测数据中的非缺失值,代码及运行结果如下所示。行号代码行11#使用notnull()检测非缺失值12non_is_null=df.notnull()13print(non_is_null)5.3.1数据清洗5.3Pandas函数调用②删除含有缺失值的行或列
如果DataFrame中的任何一行或列含有至少一个缺失值,就可以使用dropna()函数将其删除,它会返回一个新的DataFrame或Series,其中不包含任何含有NaN(NotaNumber,即缺失值)的行或列。语法结构如下所示:DataFrame.dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)5.3.1数据清洗5.3Pandas函数调用②删除含有缺失值的行或列
dropna()函数常用参数如表5-8所示参数说明axis默认axis=0,表示删除包含缺失值的行,axis=1,表示删除包含缺失值的列how默认how=’any’,表示删除含有缺失值的所有行或列,how=‘all’,表示删除全部缺失值的行或列thresh:int可选。要求行或列中非空(非NaN)元素的最小数量。如果未达到此阈值,则删除该行或列subset指定要在其中查找缺失值的列,对特定列进行缺失值删除inplace默认为False,表示不修改原始DataFrame,而是返回一个新的DataFrame。如果设置为True,则直接在原始DataFrame上进行修改,不返回新的DataFrame5.3.1数据清洗5.3Pandas函数调用行号代码行1importpandasaspd2#创建一个包含缺失值的DataFrame3df=pd.DataFrame({4'A':[1,2,None,4],5'B':[5,None,None,8],6'C':[9,10,11,None]7})8#删除包含至少一个缺失值的行9rows=df.dropna()10#删除包含至少一个缺失值的列11columns=df.dropna(axis=1)12#仅当行中全部都是缺失值时才删除该行13all_rows=df.dropna(how='all')14#保留至少有2个非空元素的行15thresh=df.dropna(thresh=2)16print('删除包含至少一个缺失值的行\n',rows)17print('删除包含至少一个缺失值的列\n',columns)18print('仅当行中全部都是缺失值时才删除该行\n',all_rows)19print('保留至少有2个非空元素的行\n',thresh)5.3.1数据清洗5.3Pandas函数调用③填充缺失值
填充缺失值可以用fillna()函数来实现
DataFrame.fillna(value=None,method=None,axis=None,inplace=False,limit=None,downcast=None)参数说明value用于填充的值,可以是数值、字符串、变量、字典、series、DataFrame,不能使用列表method填充方法{‘backfill’,‘bfill’,‘pad’,‘ffill’,‘None’},pad/ffill表示用前一个非缺失值填充,backfill/bfill表示用后一个非缺失值填充,默认为Noneaxis填充缺失值所沿的轴,默认为Noneinplace默认为False,True表示直接在原数据上更改limit限制填充次数5.3.1数据清洗5.3Pandas函数调用以例5-33创建的DataFrame为例,用fillna()函数填充缺失值,代码例5-35所示。行号代码行1importpandasaspd2df=pd.DataFrame({3'A':[1,2,None,4],4'B':[5,None,None,8],5'C':[9,10,11,None]6})7#使用0填充所有的NaN值8df_filled=df.fillna(0)9print(df_filled)5.3.1数据清洗5.3Pandas函数调用④数据转换
数据转换指的是将数据从一种格式、结构或类型转换为另一种,以满足特定的分析、处理或存储需求。在Pandas中,使用astype()函数进行数据转换,语法结构如下所示:
DataFrame.astype(
dtype
,copy=True
,errors='raise'
)dtype是数据类型copy是布尔值,默认为True,表示返回一个副本针对数据类型转换无效引发异常的处理,默认为“raise”,表示允许引发异常5.3.1数据清洗5.3Pandas函数调用使用astype()函数进行数据转换,代码如例5-36所示。行号代码行1importpandasaspd2importnumpyasnp3df=pd.DataFrame({4'A':[1,2,0,4],5'B':[5,-1,-1,8],6'C':[9,10,11,99]7})8print(df)9df_astype=df.astype('float')10print(df_astype)5.3.2数据连接5.3Pandas函数调用
数据连接是数据处理和分析中的关键步骤,它指的是将不同来源、格式或结构的数据集合并成一个统一的数据集,以便于进行更深入的分析和挖掘。主要通过Pandas库提供的concat()、merge()等函数来实现,它们可以满足不同的数据连接需求。concat()函数15.3.2数据连接5.3Pandas函数调用
concat()函数用于沿特定轴连接两个或两个以上的DataFrame,既可以实现横向合并,也可以实现纵向合并,并且行列索引均可重复。pandas.concat(objs,axis=0,join='outer'
,
ignore_index=False
,
sort=False)连接对象轴向,0代表纵向拼接,1代表横向拼接连接方式,inner(内连接)和outer(外连接)是否重建索引将合并的数据进行排序,默认为True5.3.2数据连接5.3Pandas函数调用①横向合并
横向合并是将多个DataFrame或Series对象沿着列方向连接在一起。使用concat()函数进行横向合并时,需要将axis参数设置为1,代码如例5-37所示。行号代码行1importpandasaspd2#初始化两个DataFrame对象3df1=pd.DataFrame({'A':[1,2],'B':[3,4]})4df2=pd.DataFrame({'C':[5,6],'D':[7,8]})5#横向合并两个DataFrame对象6result=pd.concat([df1,df2],axis=1)7#输出合并后的DataFrame8print(df1)9print(df2)10print(result)5.3.2数据连接5.3Pandas函数调用①横向合并
运行结果:5.3.2数据连接5.3Pandas函数调用②纵向合并
纵向合并是将多个DataFrame或Series对象沿着行方向连接在一起。默认情况下,concat()函数就是按行进行纵向合并的,代码如例5-38所示。行号代码行1importpandasaspd2#初始化两个DataFrame对象3df1=pd.DataFrame({'A':[1,2],'B':[3,4]})4df2=pd.DataFr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年最-新审计师考试(中级)《审计理论与实务》最-新试题与答案
- 2025郑州市一模试卷及答案
- 2026事业单位工勤技能-新疆-新疆农业技术员四级(中级工)历年参考题库含答案详解
- 2026事业单位工勤技能-广西-广西护理员二级(技师)历年参考题库含答案详解
- 2026事业单位工勤技能-广东-广东计量检定工四级(中级工)历年参考题库含答案详解
- 2026事业单位工勤技能-广东-广东堤灌维护工五级(初级工)历年参考题库含答案详解
- 工业固体废物处置合同(范本)
- 2026事业单位工勤技能-山西-山西下水道养护工四级(中级工)历年参考题库含答案详解
- 广告牌合同(范本)
- 2026事业单位工勤技能-宁夏-宁夏地图绘制员二级(技师)历年参考题库含答案详解
- 农房安全知识培训课件
- 胡桃夹综合征的超声诊断
- T-CAEPI 102-2025 重金属污染土壤稳定化工程技术指南
- T/CEMIA 032-2022显示面板用氧化层缓冲刻蚀液
- 高中生法制教育
- 运动解剖学课件12 下肢骨连结学习资料
- 幼儿园开学食堂安全培训
- 白内障手术前后护理
- GB/T 4706.23-2024家用和类似用途电器的安全第23部分:室内加热器的特殊要求
- 干式螺杆真空泵培训
- 《功能性食品开发与应用》课程标准
评论
0/150
提交评论