Python的应用范围广泛,可以应用于云计算、Web开发、人工智能、系统运维、数据分析等领域。本书所讲的Pandas就属于数据分析范畴内的应用。在学习Pandas之前,必须有一定的Python基础,就像在Excel中要用VBA处理数据,就需要有一定的VBA编程基础,因此,本节将讲解Python的相关知识,为后续学习Pandas打下基础。
在Python中,万物皆对象。数字、字符串、列表、函数和类等都是对象。如果在内存中创建了对象,则为了方便使用这些对象,会给对象取个名称,这个名称就是变量,引用变量就是在引用相应的对象,示例代码如下:
分别将对象100(数字)、"Pandas"(字符串)和[1,2,3](列表)赋值给变量a、b和c。它们分别代表了等号后的对象,对象是可以变化的。
在定义Python中的变量名时,要遵循以下规则。
(1)变量名必须以字母或下画线开始,名字中间只能由字母、数字和下画线组成。
(2)变量名的长度不能超过255个字符。
(3)变量名在有效范围内必须具有唯一性。
(4)变量名不能与Python中的保留字(关键字)相冲突。
(5)变量名是区分大小写的。
注释表示对代码进行说明,并不运行。使阅读者能轻松读懂代码,有利于后期代码的维护。在Python中,单行代码注释以#开头。多行代码注释则是将注释文字置于一对'''中或者""""中,示例代码如下:
代码的行首部分有空白,即缩进,目的是识别代码,有的编程语言使用花括号来表示,而Python使用的是空格。Python中通常用4个空格表示1次缩进。在Jupyter中按Tab键可完成代码的缩进设置。按Tab键表示增加缩进,按快捷键Shift+Tab表示减少缩进。
参照下面的代码,代码print(i)前面有4个空格,表示是for循环体中的语句。如果运行代码,会循环执行print(i)3次。如果前面没有4个空格,则不会循环执行print(i),示例代码如下:
运行结果如下:
Python中常用的数据结构有6种:数字、字符串、列表、元组、集合和字典。其中使用频率较高的是数字、字符串、列表和字典。
数字(number)有4种类型,分别为int(整数)、float(小数)、complex(复数)和bool(布尔值)。其中bool只有True和False两种值,True和False本质是数字1和0,可以使用type()函数查询类型,示例代码如下:
运行结果如下:
字符串(string)的组成内容可以是数字、字母、汉字和符号等任何可以在计算机上表示出来的一串字符。字符串放置在一对单引号(')或双引号(")中,示例代码如下:
运行结果如下:
注意: 在表示字符串时,最好统一使用一种字符串表示方式,本书均采用单引号的方式来引用字符串。如果字符串中有特殊字符,但希望具有普通意义,而不具有特殊意义,就需要在字符串左侧加r。例如'\n'将被视为换行符,而r'\n'将被视为\后跟的字符n。
要获取字符串中的某部分字符串,可以通过切片方式来截取。在对字符串切片时默认的起始位置为0。下面罗列了几种基本的切片方式,用户可以根据这些切片原则衍生出更多的切片方法,示例代码如下:
运行结果如下:
列表(list)可有序地存储一组数据元素。数据元素置于一对中括号之间,元素之间用英文半角逗号分隔,如[1,2,3]。列表中的元素可以是任何数据类型,并且可以对列表进行修改,下面讲解常用操作。
1)列表的添加
使用append()函数向列表末尾添加单个元素,也可以使用extend()函数向列表末尾添加多个元素,示例代码如下:
运行结果如下:
2)列表的删除
使用pop()函数删除列表中指定下标对应的元素,也可以使用remove()函数删除列表中指定名称的元素,如果列表中有多个相同名称的元素,则只删除第1个,示例代码如下:
运行结果如下:
3)列表的切片
列表的切片与字符串的切片方式一样,通过指定列表的下标完成切片操作,下面罗列了常见的列表切片方式,示例代码如下:
运行结果如下:
注意: 如果列表切片的结果只有1个元素,则显示为标量值;如果切片的结果有多个元素,则显示为列表。
4)列表的修改
要修改列表中的元素,必须先用切片的方法获取要修改的元素,然后将修改的数据赋值给切片结果。可以修改单个元素,也可以修改连续的多个元素,示例代码如下:
运行结果如下:
注意: 如果切片结果是标量值,则提供修改的数据就是标量值;如果切片结果是列表,则提供修改的数据就是列表。
元组(tuple)可有序地存储一组数据元素。数据元素置于一对圆括号之间,元素之间用英文半角逗号分隔,如(1,2,3)。元组中的元素可以是任何数据类型。不能对元组中的元素做修改,只能做切片设置,下面列出了元组常见的切片方法,示例代码如下:
运行结果如下:
注意: 如果元组中只有1个元素,则需要在这个元素的后面加上逗号。例如数字100,正确的表示方法为(100,),表示为(100)是错误的。
集合(set)是由唯一元素组成的无序集。数据元素置于一对花括号之间,元素之间用英文半角逗号分隔,如{1,2,3}。集合里的每个元素必须保持唯一性,如果集合中的元素有重复,则在输出时会自动去做重复处理,示例代码如下:
运行结果如下:
注意: 集合是无序集的,即集合中元素的位置无法固定,所以不能像列表、元组一样做切片。
字典(dict)是最重要的数据类型之一。每个元素由键值对组成,键与值之间用半角冒号分隔,键在字典中必须保持唯一性,值可以有重复。元素置于花括号中,元素之间用逗号分隔,如{'梨子':99,'苹果':95,'橙子':91}。
获取键对应的值,示例代码如下:
运行结果如下:
修改键对应的值,示例代码如下:
运行结果如下:
要获取字典的键和值的相关信息,有以下3种常用操作。
(1)获取字典中所有的键用keys()方法。
(2)获取字典中所有键对应的值用values()方法。
(3)获取字典中所有的键值对用items()方法。
示例代码如下:
运行结果如下:
一般来讲,程序中的代码运行顺序都是自上而下的,但代码在运行的过程中可能需要反复执行一段代码,或者跳过一段代码。本节将讲解如何控制代码的运行顺序。
Python语句像其他编程语言一样,代码运行的顺序都是自上而下的,以下面示例代码为例:
运行结果如下:
解读一下上面代码的运行过程。
(1)先将数字100赋值给变量a。
(2)再将数字200赋值给变量b。
(3)再将a和b相加的结果赋值给变量c。
(4)最后输出变量c的结果。
注意: 按顺序执行代码时,并不是绝对地自上而下运行每句代码,中途可能会做循环处理、条件分支处理等操作。
1)for循环语句
for循环语句可以用来遍历任何可迭代序列,如字符串、列表和字典等,在循环序列中的每个项目时,可以对项目执行处理操作。
例如将'Pandas'这个字符串中的每个字符循环打印在屏幕上,示例代码如下:
运行结果如下:
再例如将列表['pandas','Python','Excel']中的每个元素循环打印在屏幕上,示例代码如下:
运行结果如下:
再例如将字典{'pandas':100,'Python':99,'Excel':88}中的每个键循环打印在屏幕上,示例代码如下:
运行结果如下:
如果希望将字典{'pandas':100,'Python':99,'Excel':88}中的每个键及对应的值循环打印在屏幕上,则可以使用字典的items()方法,示例代码如下:
运行结果如下:
2)while循环语句
while循环语句用来循环执行指定的代码块,当条件成立时一直循环,直到条件不成立时终止循环,示例代码如下:
运行结果如下:
解读一下上面代码的运行过程。
第1行,首先对变量n做初始化赋值;第2行,在while关键字后面写入循环的条件;第3和4行是while循环体中要循环的代码块,当变量n累加到不再小于5时,终止执行这两行代码,也就是终止while循环语句。
编写分支语句首先要给定一个表达式,如果表达式返回值为布尔值True,则表示条件成立;如果表达式返回布尔值False,则表示条件不成立,可以根据返回的不同布尔值做不同的代码处理。
1)单条件判断
if单条件分支语句判断指定的表达式是否成立。如果成立,则执行if下面的代码块,示例代码如下:
运行结果如下:
条件判断成立需要处理,但如果条件不成立也需要处理呢?则可以将if与else配合,示例代码如下:
运行结果如下:
2)多条件判断
如果有多个条件判断,则可以将if与elif配合,例如要求n>90返回'优',n>80返回'良',n>60返回'中',否则返回'差',示例代码如下:
运行结果如下:
上面代码做了3个条件判断,每个判断都有对应的返回值,直到3个条件都不成立时,执行else下的返回值。
3)if三目运算
if三目运算是写在一行的,如果条件判断比较简单,则可以使用此种代码编写方式,示例代码如下:
运行结果如下:
函数是组织好的、可重复使用的代码,能提高应用的模块性和代码的重复利用率。Python提供了许多内置函数,当然用户也可以自己定义函数。
内置函数无须用户定义,直接调用即可,例如前面经常使用到的print()函数,可以用此函数在屏幕上打印输出数据。
除了使用Python内置函数,用户也可以自己定义函数。自定义函数语法如下:
创建自定义函数的规则如下:
(1)以def关键词开头,后接函数名称和圆括号(),再接冒号。
(2)传入的参数必须放在圆括号中,圆括号之间用于定义参数。
(3)函数代码块内容以冒号起始,并且缩进。
(4)return后接函数的最终返回值。
例如定义fun()函数,其中x和y是fun()函数的两个参数,此函数将x和y参数接收的值相加,然后赋值给变量z,最后将变量z的值作为此函数的返回值,示例代码如下:
运行结果如下:
匿名函数是一种特殊的自定义函数,特殊在定义的函数没有名称。一般在自定义功能比较简易的函数时,可以定义成匿名函数。Python中使用lambda来创建匿名函数。语法结构如下:
下面定义一个匿名函数,示例代码如下:
运行结果如下:
讲解一下此匿名函数的定义和使用方法,lambda后设置了x和y两个参数,冒号后是函数的返回值表达式,此匿名函数的处理方式为将参数x和y接收的值相加。此时lambda x,y:x+y就是一个完整的匿名函数。在函数后传入100和99,函数中的x和y参数接收到值后,再将两个值相加,最后返回值为199。
也可以将定义好的匿名函数赋值给变量,变量就相当于是函数名,这样看起来与普通函数的用法相同,示例代码如下:
运行结果如下:
函数的调用很简单,这里主要讲解函数的参数调用方式,函数的参数调用通常分为按位置给参数赋值和通过指定参数名称给参数赋值。
按位置给参数赋值是对照函数的参数位置一一赋值,但如果遇到函数的参数比较多,并且只需使用到其中一部分参数时,如果按照参数位置赋值,函数就显得比较臃肿、不简洁,则可以通过指定参数名称来给这些参数赋值,这就是Python的关键字参数赋值。这种参数赋值方式有两大优点:第一,不再需要考虑参数的顺序,函数的使用将更加容易;第二,可以只对那些希望赋值的参数赋值。
下面罗列出了常见的参数赋值方式,示例代码如下:
运行结果如下:
注意: 函数的参数分为必选参数和可选参数,例如自定义函数fun(x,y=1,z=0),x就是必选参数,表示必须填写;而y和z是可选参数,表示可以填写,也可以不填写(因为可选参数有默认值)。