【整整600集】顶级大学196小时讲完的Python教程(数据分析)全程干货无废

P9-P91
常用快捷键:1.多行注释:选中多行,Ctrl+/,已有注释则取消注释;2.撤回上一步:Ctrl+Z;3.还原上一步:Ctrl+Shift+Z
其他:可以自设pycharm语言;可以设置输入法中文时使用英文字符;字符串和代表其的变量是等效的;字符:str {字典}:dict {元组}:tuple [列表]:list 整数:int 小数:float;现代计算机中,一般“定点数”就是整数,“浮点数”含小数部分
P9基础语法1
1.缩进:四个空格/一个tab
2.单行语句变多行语句,句末会多“/”;但是括号内的多行语句不需要
P10基础语法2
1. 双引号/单引号内存放字符串,三对双引号内存放多行字符串
2. #注释,不会被运行
3. 空格和空行不是必须存在,是为了美化
P12转义符
转义符:\+特异功能的首字母
1. \n:换行
2. \t:制表符,代表四个空格的位置(4个4个一节,若前面是五个字符,则补齐三个空格)
3. \r覆盖,后面的字符覆盖前面的字符
4. \b删除(bckspace)删除前一个字
5. \:两个反斜线表示一个\
6. 原字符:使转义字符不起作用,写在整个字符串前面,用r或R
P13变量
1. 变量命名规则:
*变量名只能是字母,数字和下划线的任意组合
*变量名第一个字符不能是数字
*变量名区分大小写,大小写字幕被认为是两个不同的字符
*特殊关键字不能命名为变量名
2. 变量赋值
3. 多个变量赋值
4. 常量,用大写命名
P14数据类型-数字
1. Python3的六个标准数据类型:Number数字,String字符串,Tuple元组,List列表,Set集合,Dictionary字典;其中前三个为不可变数据,后三个为可变数据
2. Python3支持的数字有int,float和bool
3. 整型int-整数,可正可负
4. 浮点型float-有整数部分和小数部分
5. 布尔型bool - True False,大小写固定
P15数值运算
1. // 除法运算后向下取整
2. % 取模,得到两数相除的余数
3. ** 幂运算,例子:2**3=8
P16常见比较运算符
1. 常见的比较运算符号:
大于等于:>=
小于等于:<=
不等于:!=
等于:==,单个=是赋值操作
2. 直接print则自动返回布尔值 例:print(4>=3 返回True
3. True=1 False=0,布尔值可以转化为数字并用于运算,例如1+True的形式
P17运算符与或非
and 与,两者都为True才输出True,否则False
or 或,有至少一个True,则输出True,否则False
not 非运算,取反
P18空值和内置函数的返回值
1. python的空值 -- None 什么都没有,不能进行运算,不能和字符串进行拼接
2. 内置函数的返回值
内置函数即print(),可以用变量进行接收,没有返回值则print该变量得到None;之后学习中通过自己的设置可以使函数运行之后有返回值
P19字符串-切片-1
字符串的下标是从零开始的
*切片
[开始:结尾] 取左不取右
例:
a = "12345"
print(a[0:3])
>>>123
省略冒号前,则自动从头开始;省略冒号后,则取到末尾
倒着取则用负数,例如[-3:-1]
P20字符串-切片-2
*切片
[开始:结尾:步长] 取左不取右
步长:n ,跨n步,即n个一组,每组取第一个
[结尾:开始:-步长]即可实现倒序,例子[8:2:-2]
P21字符串-下标取值
字符串索引/下标
[ ]中输入对应字符串下标即可取得该字符,负数则倒着取,*空格也算字符
P22字符串拼接
方法一:两个字符串之间使用“+ ”,则两个字符串合并为一个
方法尔:需要在字符之间加入诸如标点符号时,先定义一个字符串 “ , ”(引号内内容根据想要插入的内容而定),然后“ .join((字符串0, 字符串1, 字符串2))”
P23字符串的格式化
在字符串内需要添加信息的地方插入{ }(一个字符串内可插入多个),在字符串后使用“.format(需要加入的字符串0, 需要加入的字符串1, 需要加入的字符串2)”,运行结果默认按顺序填入
改变填入顺序:加入的字符串也有下标,默认从0开始,在{ }内填入相应下标,就可以自定义插入的顺序
P24字符串的常用方法find&count
find:查找元素位置
查找字符串片段在字符串中的下标位置,从前往后找,返回的是第一个被找到字符串片段起始位置
字符串.find(“要查找的字符串片段”, “查找范围起始点”, “查找范围终止位置+1”) *可以只要第一个参数
*如果查找的字符串存在多个,查找结果是第一个出现的字符串下标,找不到就返回-1
count:统计字符串片段,在字符串中出现的次数,找不到返回0
字符串.count(“要统计的字符串片段”, “查找范围起始点”, “查找范围终止位置+1”) *可以只要第一个参数
P25 字符串replace&upper%lower
1.replace:替换指定的字符串片段
参数一:要替换的字符串片段
参数二:替换之后的字符串片段
参数三:替换的次数,从前往后替换(默认替换所有的)
字符串.replace( ‘ ’ , ‘ ’ , n )
2.upper:将小写字母转为大写
字符串.upper( )
3.lower:将大写字母转为小写
字符串.lower( )
P26 字符串split&strip
1.split:指定分割点对字符串进行分割
参数一:分割点
参数二:分割的次数,从前往后(默认找到所有分割点进行分割)
字符串.split( “分割点” , “分割次数” )
运行结果→ ‘字符串片段1’ , ‘字符串片段2’ , ‘字符串片段3’ ......列表中不含分割点
2.strip:去除字符串首尾的空格/字符 *该字符只在首/尾亦可使用
字符串.strip( 空格或 ‘需要去除的首尾字符’ )
*strip只能去除首尾字符串,如果想要将中间一同去除,可以使用replace( ‘想要去除的字符’ , ‘’) #第二个引号内不留空格
P27 传统的格式化输出&F表达式
传统的格式化输出方法:%
%s:为字符占位,任意类型都可以
%d:为数值类型占位(如果输入浮点数,会自动取整)
%f:为浮点数占位(定点数亦可),保留到小数点后六位
‘xxxx%sxxxx’ %(y) #新版本中不再需要括号
F表达式(f亦可)
用字符串前的f代替字符串后的format
例: ‘我的名字叫{ } , 我的年龄是{ }’.format(name , age)
→ F ‘我的名字叫{name} , 我的年龄是{age}’
P28 字符串format的进阶用法
len( ):计算字符串的长度 #空格也占字符
format:格式化输出(进阶)
1. 格式化小数长度(会四舍五入) :.nf #小数点后n位 #如果不加f则从前往后保留n位
“字符串{对应的字符串下标:.nf}字符串”.format(s,x)
2. 将小数按百分比的形式显示 :.n% #n为百分比形式下小数点后n位
P29 定义列表
列表是写在[]之间、用逗号分隔开的元素列表,列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套),列表中的元素是可以改变的。
1. 定义列表
2. 列表的下标 #从0开始
3. 列表取值 #如果想要取得列表中的列表中的某一个值,可以连续用两个[外层下标1][内层下标2] ,Ex:print(list1[5][1])
P30列表的长度和更新列表
1. 列表的长度 len( ) #获得的是列表中元素数量
2. 更新列表中的值 #直接给对应下标重新赋值 例:list[2]=99
P31 列表的加法和乘法操作
列表的加法:list1+list2 → 两个列表元素首尾相接,合为一个列表
列表的乘法:list*n → 该列表内元素重复n遍
#字符串*n则该字符串被重复n遍
P32 列表的切片取值
原理同字符串的切片(P19&20)
P33 列表的操作方法del&append
1. del关键字 删除
可以删除整个列表,也可以删除中的指定值
例:del a del a[2]
2. append方法 用于向列表末尾添加元素
#不可以直接在print处使用,要先写列表a.append( ),再print列表a
P34列表的操作方法insert&clear
1. insert用于向列表中插入元素
#第一个参数是插入的位置,第二个参数是要插入的对象
2. clear函数用于将列表清空 list.clear() → [] #列表括号会保留
P35 列表操作方法remove&pop
1. remove函数-从列表移除元素 #参数为要移除的元素
*执行结果中,若列表有重复元素,则只移除第一个
2. pop函数-移除列表中指定位置的元素,并返回要移除的元素(直接print则执行结果为要移除的元素) #参数为要移除的元素下标
#默认情况下,移除列表中的最后一个元素
P36 列表操作方法index&reverse
1. index函数-用于返回所匹配的元素的索引。该函数的第一个参数是待查找的对象,第二个参数是查找的起始范围,第三个参数是查找的结束范围
2. reverse函数-用于将列表反向排列 list.reverse()和[::-1]等效
P37 列表操作方法extend
用于在列表的末尾添加另一个列表,与append相比,extend可以一次性添加多个元素(append会把整个列表作为一个元素加入,extend会将列表中的元素逐一加入)
*extend和加法的结果是一样的,但是extend会将另一个列表并入当前列表,而列表加法是返回新的列表,为节约内存空间,更推荐使用extend来实现大列表的连接操作
P38 列表的操作方法copy
copy函数用于创建列表的副本 例:b = a.copy()
#copy得到的b,对列表a进行的操作不会影响b;赋值b=a,对a的操作会影响b
P39 列表操作方法sort
1. sort函数用于将列表进行排序,排序顺序遵循ascii码,默认升序排列
#只有同一类型数据才能比对,ex.不能字符串和数字一起比较排序
#降序: list.sort(reverse=True)
2. ascii码科普
美国信息交换标准代码(一种编码标准),每个字符都有一个对应的ascii码可查询
3. 常见ASCII码的大小规则:0~9<A~Z<a~z
P40 列表操作方法count
count用于统计某个元素在列表中出现的次数
#要定义变量来接受返回值
P41 元组的创建&元组与列表的不同
元组(tuple)与列表类似,能使用列表的地方基本上都能使用元组,不同之处在于元组的元素不能修改。元组写在小括号()里,元素之间用逗号隔开,组中的元素类型也可以不相同。
P42 元组的加法以及元组中列表的数据更新
#元组的拼接只能使用加法,不能使用extend
#元组包含的列表中的数据可以更改
P43 关于元组列表字符串的一些共同操作
len() max() min() #实为比较ascii码大小
P44 元组的注意事项以及乘号的使用
#定义元组时可以省略小括号,运行结果会存在小括号
#元组仅包含单个数据时,需要在其后加上逗号,否则不能作为元组,运行结果不包含小括号
#元组与数字相乘,元组内元素重复
P45 集合的创建&数据的去重
集合:集合是无序的,集合中的元素是唯一的,集合一般用于元组或列表中的元素去重,集合中默认去重。
创建集合:
1. 变量名=set(元素) 字符串/列表/元组/字典
运行结果:字符串→拆成单个字符,顺序随机;字典→只保留键;列表/元组→元素顺序不变
字典:键值对形式,冒号前为键,冒号后为值;键是描述性质;
例:d={“AGE”:18, “NAME”: “MUZHOU”
2. 变量名={元素, 元素, , ,} 元组/字符串/数字 #不能用字典/列表
3. 元素是唯一的,用于列表/元组/字典的键/字符串的去重(用set)
P46 集合添加元素的方法&合并集合
1. add() 往集合中添加元素 数字/字符串/元组
2. update 可以将集合合并 #如果a.update(b)则b并入a,b不变
P47 集合删除元素的方法
1. remove 如果有直接删除,如果没有程序报错
2. pop 随机删除集合中的元素,如果集合没有元素程序报错
3. discard如果元素存在直接删除,如果元素不存在不做任何操作
P48 集合的交集和并集
1. 交集 使用&符号连接多个集合,得到相同的元素
2. 并集 使用|符号连接多个集合,得到集合中的全部数据
P49 创建字典&空字典
字典是一种映射类型,它的元素是键值对,字典的关键字必须为不可变类型,且不能重复;键可以是任意不可变类型(元组/字符串/数字)。创建空字典使用{}
1. 字典的创建方式
1.1 直接使用{}
1.2 使用dict(),元组结构中嵌套列表 ex. b = dict(([“年龄”, “18”], [“名字”, “慕洲”]))
2. 空字典 直接写{}表示空字典 #空集合为a = set()
P50 字典的增删改查的操作
1. 增加 d[新的键]=值
2. 删除 del d[键]
3. 修改 d[原有的键]=要改为的值
4. 查找(获取) d[键]
P51 字典的操作方法get&keys
1. get函数 用于从字典获取指定键的值,在get函数中可以设置默认值,当get函数没有获取到对应键时,get函数会将默认值返回
r = d.get(键) ; r=d.get(不存在的键, 返回值) 则print后返回设定的值,不设定默认值则返回None
2. keys函数 keys函数将以列表的形式返回字典中的所有键 #如果字典中嵌套了字典,不会返回里层的键
Ex. print(d.keys()) → dict_keys([键1, 键2, 键3])
P52 字典操作方法items&values
1. items函数 将以列表的形式返回字典中所有键值对
print(d.items()) → dict_items([(键1, 值1), (键2, 值2), (键3, 值3)])
2. values函数 将以列表的形式返回字典中的所有值
print(d.values()) → dict_values([值1, 值2, 值3])
P53 字典的操作方法clear©
1. clear函数 用于将字典清空
2. copy函数 用于创建字典的副本,修改原字典对象,不会影响其副本
P54 字典的操作方法fromkeys&pop
1. fromkeys函数 用于创建一个新的字典 #需要先建一个空字典 #用变量接收返回值
第一个参数时一个序列(列表/元组/集合),用于作为字典的键
第二个参数可以是任何数据类型,作为每个键的值
d.fromkeys((键1,键2), 值)
2. pop函数 用于从字典中移除指定键,并返回该键所对应的值 #用变量接收返回值
P55 字典的操作方法popitem&setdefault
1. popitem函数 用于从字典中删除最后一项,并以元组形式返回该项所对应的键和值
2. setdefault函数 用于设置键的默认值,若在字典中该键已存在,则忽略设置;若不存在,则添加该键和值 #约等于低优先级的赋值操作 #一个字典中若有多个相同的键,则只保留最后一个的值
d.setdefault(键,值)
P56 字典的操作方法update函数
update函数 用于将字典2的值更新到字典1。若字典2的键在字典1已经存在,则对字典1进行修改;若不存在,则对字典1进行添加。
P57 成员检测in¬ in
成员检测与标识号检测
使用in和not in运算符来判断某个对象是否为序列的成员
in:判断对象是否在序列(列表/字符串/元组/字典)中,如果是则返回True
not in:判断对象是否不在序列中,如果是则返回True
Ex. print(1 in (1,2,3)) → True print(1 not in [1,2,3]) → False
#只能判断键,无法判断值是否在字典中
P58 判断某两个对象是否相同is&is not
is判断对象是否相同
is not判断对象是否不相同
print(a is b) print(a is not b)
#两对象必须完全一样,包括前后的空格等
#数字/字符串/元组表面一样就完全一样,列表/字典/集合表面一样,其实不一样,不是同一个对象
P59/60同P70/71
P61 python数据检测方法type()
print(type(a)) → 返回a的数据类型,ex. <class ‘str’>
#str字符串;int整型;list列表;tuple元组;set集合;dict字典;bool-bool值;float浮点数值
P62 python的强制数据类型转换str()
str() 可以把其他类型数据转化为字符串类型 #所有类型都可以转化为字符串类型
P63 python的数据类型强制转换int()&float()
int() 可以把其他类型数据转化为整型
float() 可以把其他类型数据转化为浮点型
#数字类型之间可以相互转化
#只有字符串可以转换为数字类型
#并且字符串中的元素必须为纯数字,否则无法转换(可以在最前方带负号);带小数点的字符串只能转化为float,不能转化为int
#浮点型转整型,自动取整,去掉小数点后部分,不遵循四舍五入
#布尔值也是数字类型,True1,False0
P64 python的数据类型强制转换bool()
其他类型转数字类型中有一个特殊情况,就是其他类型转布尔类型
bool() 可以把其他类型转为True或False
1. 容器类型转布尔类型
容器类型数据:字符串,列表,元组,字典,集合
非容器类型数据:数字类型,布尔类型
容器中为空---False
容器中有元素---True
2. 数字类型转布尔类型
int类型中,0为False,其他为True
float类型中,0.0为False,其他为True
P65 python的数据类型强制转换list()
1. 数字类型是非容器类型,不能转换为列表
2. 字符串转列表时,会把字符串中的每一个字符当作列表的元素
3. 元组转列表时,会把元组中的每一个元素当作列表的元素
4. 字典转列表时,只保留字典中的键
5. 集合转列表时,结果是无序的,因为集合本身就是无序的
P66 python的数据类型强制转换tuple()
转元组与转列表的规则相同
P67 python的数据类型强制转换set()
1. 数字类型是非容器类型,不能转换为集合
2. 其他数据类型转集合时,结果是无序的
3. 字典转集合时,只保留键
P68 python的数据类型强制转换dict()
1. 数字类型是非容器类型,不能转换为字典
2. 字符串不能转字典类型,因为字符串不能生成二级容器
3. 列表/元组类型转字符类型,列表/元组必须为等长二级容器,子容器中的元素个数必须为2
#可以元组里嵌列表/列表里嵌元组,一部分列表一部分元组也可以
4. 集合不能转字典类型 #集合中使用元组作为二级容器可以转字典,集合/列表不可以
P69 python判断一个对象是否是一个已知的类型isinstance()
isinstance()函数的返回值是布尔型,
若对象的类型是已知的类型,那么就返回True,否则返回False
语法:isinstance(对象,对象类型)
P70/71 python的条件语句if
if...elif...else...分支语句
#必须有缩进,一般为四个空格,即一个tab
#条件是真值才会运行,也可以直接用if True→运行,if False→不运行
#满足前面的条件后,不运行后面的
#if语句可以单独存在,elif/else不可以
P72 python的for循环
for循环用来遍历序列,
通过不使用下标的方式来实现对序列中每一个元素的访问
列表/元组/字符串/字典(只访问键)/集合
遍历数字range() ex. for i in range (1,10): #i是自命名的变量 #区间取左不取右,只取整数
P73 python的for循环操作-2
1. 遍历字典的键和值 .items()
2. 函数的步长range(开始, 结束, 步长)
P74 python双层for循环提取嵌套列表中的元素
案例
P75 python的while循环
while后必须输入真条件
#a+=1即每次自我增加1
#while可以配合else使用
P76/77 python关键字break和continue在for/while循环中的使用
break语句可以跳出for和while的循环体
continue语句被用来跳过当前循环块中的剩余语句,然后继续进行下一轮循环
P78 python的pass语句
pass语句是空语句,是为了保持程序结构的完整性。
它用于那些语法上必须要有什么语句,但程序什么也不做的场合。#比如还没想好这部分,先用pass占位,保持代码结构的完整性,不会报错
P79 python函数的创建和调用以及参数传递
创建函数的目的是封装业务逻辑,实现代码的重复使用。
1. 创建函数的关键字:def
#def,空格,函数名字(和变量命名规则一样),括号,冒号 -- def a():
2. 调用函数:a() → 运行
3. 函数的参数:()是用来传递参数的--- def a():的括号内用变量接收a()的括号传递的内容
#可以一次传递多个参数
# 先前使用的都是python的内建函数,实际中自定义函数使用更多
P80 python函数的位置参数
函数的参数:
Python函数的参数具有灵活性,其定义的方法可以接受各种形式的参数,也可以简化函数调用方法的代码
0. 函数中的pass关键字
1. 位置参数
2. 默认参数
3. 可选参数
4. 可变参数与关键字参数
位置参数:在对函数进行调用的时候,有几个位置参数就需要传递几个参数,否则会触发异常。并且,传入参数与函数参数列表是一一对应的,数量不对应则会报错
P81 python函数的默认参数
默认参数是指带有默认值的参数,在对该函数进行调用的时候,可以不必显示传递给该函数。当不传递值的时候,函数将使用默认值
*默认值只会执行一次,这条规则在默认值为可变对象(列表、字典以及大多数类的实例)时非常重要
*官方建议默认参数尽量使用不可变对象!!!因为可变对象会存储在后续调用中传递给它的参数
设置默认值:在def后括号内给变量定义 ex. def abc(a=300, b=400):
调用:括号内不传入参数,就会使用默认值;若传入参数,依次以此替代默认值
Ex. def abc(a=300, b=400): ;调用时 abc(600) →600会且只替代300
#可以指定默认参数进行传值:ex. abc(b=1000)
P82 python的关键字参数
函数调用时,指定参数名称,称为关键字参数(不要和默认参数混淆,这里是函数调用)
Ex. 调用时 abc(a=200,b=600)
注意:函数调用时,关键字参数必须在普通参数后面,否则会报错
ex. abc(100,a=200,b=600)
P83 python命名关键字参数
限定关键字形参(命名关键字参数)
特点:必须使用关键字方式传递参数
限定关键字形参,是为了限制后面几个参数只能按关键字传递,往往是因为后面几个形参名具有十分明显的含义,显式写出有利于可读性;或者后面几个形参随着版本更迭很可能发生变化,强制关键字形式有利于保证跨版本兼容性
#默认参数后面必须也是默认参数(即普通参数必须在前,默认参数必须在后)
限定关键字形参的方法:使用*占位,其后的参数必须用关键字传递
ex. def abc(a, *, c, d) 则c和d只能接收关键字传递
P84 python的可变参数星号加参数名
可变参数:传递参数就接受,没有传递参数也不会报错
*参数:最常见的变量名是args(也可以另外命名),看到该变量名,就知道它指向一个tuple对象
自动收集所有未匹配的位置参数到一个tuple对象中,变量名args指向了此tuple对象
# 元组至少有一个逗号
Ex. def abc(a, *args):
abc(100,200,300,400) → a接收100,*args接收200,300,400并指向元组形式,即为(200,300,400)
# print时不要带*,直接print(args)
P85 python的可变参数两个星号加参数名
**参数:最常见的变量名是kwargs,看到该变量名,就知道变量kwargs指向一个dict对象
自动收集所有未匹配的关键字参数到一个dict对象中,变量名kwargs指向了此dict对象
# 由于kwargs是字典,向其传值要用键值对的方式,以键=值的形式输入 ex. x=200
# 其他基本同上节课
P86 python参数解包(拆包)
参数数据类型是:字符串/列表/元组/集合/字典的时候可以解包
传递实参时,可以在序列类型的参数前添加星号,这样他会自动将序列中的元素依次作为参数传递
Ex. s= “123”
def abc(a,b,c):
abc(*s) →字符串s会被拆成1、2、3分别传递给a、b、c
#如果无法一一对应则会报错,ex.四个字符不能对应三个参数
#字典解包只传输键,如果想拿到值,用两个星号**,并且键名必须与函数的参数一致
Ex. d={“年龄”:19} 那么函数应为abc(“年龄”)
P87 参数的解包
对上节课的纠错
一个*不需要键和参数对应,两个**需要
P88 参数解包和可变参数配合使用
注意:**参数只收集未匹配的关键字参数
#在调用时用*解包,列表中的元素会被拆出,逐一传递到函数参数
ex. def abc(a,b,*args):
abc(100,*[200,300,400]) → a接收100,b接收200,args指向(300,400)
#在调用时用**解包与*效果类似,但是解包后所有元素都传递到kwargs,不能分给其他参数如上例的b
P89 python函数中各种参数排列的注意事项
1. 可变参数,必须定义在普通参数以及默认值参数的后面
2. 函数定义时,二者同时存在,一定需要将*args放在**kwargs之前
# 格式应为 def abc(普通参数,默认值参数,*参数,**参数):
P90 python的return关键字
函数的返回值:python中的函数可以使用return返回数据,也可以不用return返回,则默认返回None
# 函数调用的返回值可以用变量接收,默认print该变量会返回None
return关键字:用来在函数执行时,帮助返回处理好的结果,返回值是一个元组数据类型
# return关键字一次可以返回多个数据
Ex. def abc(a,b,c):
return a+100,b+200,c+300
r = abc(100,200,300)
print(r) → (200,400,600)
# 接上,元组解包的另一种方法:x,y,z=r 然后分别打印x,y,z
P91 函数返回函数
1. 函数里面嵌套函数
*注意缩进
2. 函数返回函数
Ex. def abc():
def xyz():
return [1,2,3]
return xyz #如果此处改为xyz(),则print(r)就可以得到相同结果
r = abc() #此时r接收的是xyz函数
r2 = r()
print(r2) → [1, 2, 3]