2021.6.7
《流程的python》
prompt
jupyter notebook
终端
第一步 pip install jupyter_contrib_nbextensions -i https://pypi.mirrors.ustc.edu.cn/simple
第二步 jupyter contrib nbextension install --user
第三步 pip install --user jupyter_nbextensions_configurator
第四步 jupyter nbextensions_configurator enable --user
快捷键
命令模式下:
a前面加一行
b后面加一行
dd删除一行
python基础语法
1.缩进 - python语句的开头不能随意添加缩进
2.变量 - 保存数据
只要不是定义在函数或者类中的变量都是全局的
- 定义语法: 变量名 = 变量值
- 变量名要求:
1.是标识符(由数字、字母、_组成,不能以数字开头)
2.不能是关键字(本身就具备特殊功能或者特殊意义的标识符: for if while else import等等) - 变量名的规范:
1.字母都小写,如果由多个单词组成,单词之间用“_”隔开
2.见名知义
3.不使用系统的函数名、类名、模块名
3.使用变量
4.同时定义多个变量
a,b,c = 10,20,30
x=y=z=100
运算符
1. 数学运算符:
加(+) 减(-) 乘() 除(/) 整除(//) 求余(%) 幂运算()
求余(%):
整除(//):求商,向下取整
幂运算():x*y==x的y次方
2.比较运算符:>、<、>=、<=、!=、==
比较运算符的运算结果都是布尔型:True/False
print(8<=age<=18) //python语言可以直接连写,表示范围
3.逻辑运算符:
and(逻辑与==并且)
or(逻辑或==或者)
not(逻辑非==否定)
4.赋值运算符 :( = ) ( += )( -= ) ( /= ) ( *= ) ( %= ) ( //= ) ( **= )
作用:给变量赋值,赋值运算没有结果
5.运算符优先级(优先级高的先算)
数学运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符(最低)
分支与循环
1.分支结构 -if语句
if单分支结构--如果满足条件就执行某个操作,否则就不行
语法:
if 条件语句:
执行代码
说明:
if -- 固定写法
条件语句 -- 可以是任何有结果的表达式(赋值语句除外)比如:一个具体的数据、已经赋值过的变量、运算表达 式等
: -- 固定写法,必须是英文输入法下的冒号
代码段 -- 满足条件才会执行的一条或多条语句(和if保持一个缩进的语句) 。注意,至少要有一条语句,可以用pass代替
执行过程:
先判断if条件语句是否为true(如果结果不是布尔型就看转换成布尔型是否为true),是就执行,反之不执行
转换,只要数值不是0或null,其他的数1,2,3...转换成布尔型都是true
2.多分支结构
if - else
if 条件语句:
满足条件的执行
else:
不满足的执行
不管满足与否都执行
if - elif - else:
if :
代码段
elif :
代码段
else :
代码段
3.循环结构
1. for循环
for 变量 in 序列 :
循环体
说明:
for和in --关键字,固定写法
变量 - 变量名
序列 - 容器型数类型,比如:列表、元组、集合、迭代器、生成器、range、字符串
不是序列的:数字
循环体:和for保持一个缩进的一条或多条语句;循环体就是需要重复执行的代码
执行过程:
让变量去序列中取值(一个一个的取),每取一个值执行一次循环体,直到取完为止。for循环的循环次数和序列中元素的个数有关
比如:
for x in 'abc' :
print('xxx',x)
结果:
xxx a
xxx b
xxx c
2. range函数
-
产生一定范围的数字序列
range(N) - 产生【0,N),步长为1
range(M,N) - 产生【M,N),步长为1
range(M,N,step) - 产生[M,N],步长为step
3.PNG
3. while循环
while 条件语句:
循环体
2021.6.8
1. 循环关键字 - continue、break、else
-
continue - 结束一次循环(结束当次循环直接进入下次循环),使用时一般要加入条件语句
4.PNG
5.PNG
-
break - 跳出整个循环()
while true : 执行代码 if 循环结束条件: break
完整的for循环和while循环:
for 变量 in 序列:
循环体
else ://循环完之后执行
代码段
while 条件语句:
循环体
else ://循环完之后执行
代码段
-
else的存在不会影响循环的执行,else的代码段在循环自然结束的时候会执行,循环因为遇到break而结束的时候不会执行。
6.PNG
数据类型
1. 数值
- int - 整型
- float - 浮点型
.0不要小数
.1一位小数
%.1f,保留一位小数 - complex - 复数
数学中的复数:a+bi
python中的复数:a+bj,j才是虚数的单位
数学复数中支持的数学运算符,python的复数都支持
2. 布尔型
- bool - bool只有True 和False两个值,bool的本质是整数,True = 1 ,False = 0
3. 字符串
str - 字符串表示的时候用单引号或双引号,例:‘abc’,“hello”
电话号码、邮编转义字符
\n - 换行
\t - 水平制表符,相当于tab键
\ ' - 一个单引号
\ " - 一个双引号
\ - 一个反斜杠原始字符串
在python的字符串前面(引号前面)加 r 或者 R ---可以让字符串中所有的转义字符功能消失-
f-string - 连接字符串
8.PNG
4. 列表
[ 元素1,元素2,元素3,... ]
-
一个列表中的元素可以是不同的类型
例:
10.PNG
1. 列表的元素和索引(下标)
列表是有序的(顺序标志就是下标),也是可变的
一个列表一旦确定了,那么列表中的每个元素都有两组下标值:从 0 开始递增和从 -1 开始递减
2. 下标操作
列表[ 下标 ] - 获取指定下标对应的单个元素
切片 - 同时获取列表中的部分元素
列表[ 开始下标:结束下标:步长 ] (完整切片)
注意:开始下标能取到,结束下标不能取,即 [ )
省略步长:列表[ 开始下标:结束下标 ],相当于步长为1
省略开始下标:列表[ :结束下标:步长 ] 或者 列表[ :结束下标 ]
省略开始下标时,从两边的一端开始,看步长。步长省略之后的默认为值为 1
3. 遍历
for 变量 in 列表:
循环体
for 下标,元素 in enumerate(列表):
循环体
for 下标 in range(len(列表)):
循环体
4. 列表相关方法
- 添加元素
列表.append
- 删除元素
列表.remove - 如果有多个同样的元素只删除最前面的一个;如果没有这个元素则报错
del 列表[ 下标 ] - 删除指定下标对应的元素
列表.pop() - 取出最后一个元素
列表.pop(下表) - 取出指定下标对应的元素
列表[下标] = 值
5. 列表推导式
- 列表推导式的基本功能是创建列表
结构一:
[ 表达式 for 变量 in 序列 ]
作用:做序列的变换
结构二:
[ 表达式 for 变量 in 序列 if 条件语句 ]
作用:筛选
结构三:
三目运算
C语言的三目运算符:表达式?值1:值2
python的三目运算符:值1 if 表达式 else 值2
12.PNG
6. 元组( tuple )
- 元组 (元素1,元素2,元素3,...)
tuplel1 = (10,20,30)
tuplele2 = 10,20,30 - 省略括号
- in操作:
元素 in 元组/列表 -- 判断元组/列表中是否存在指定元素
13.PNG
15.png
7. 字典
- 字典: { 键1:值1,键2:值2,键3:值3,... }
创建字典
14.PNG
获取值
方法一: 字典 [ 键 ]
方法二: 字典 . get ( 键 )区别:
方法一:如果输入空键,运行会报错
方法二:如果输入空键,运行会成功,但是返回none
修改值
字典 [ 键 ] = 值
添加键值对:前提是添加的这个没有
字典 [ 键 ] = 值
如果原来就有的键值对,使用后会修改原来的
字典 . setdefault ( 键,值 )
如果原来就有的键值对,使用后不会修改原来的
遍历
遍历字典变量获取的是每个键
for 键值对 in 字典 : print()
字典的 in 操作判断的是键是否存在
‘键 / 值’ in 字典
字典推导式
{ 键:值 for 变量 in 序列 }
{ 键:值 for 变量 in 序列 if 条件语句 }
2021.6.9
函数(基础、高阶函数(实参高阶、返回值高阶、装饰器))
类(创建对象、发送消息、使用数据)
模块(导入和使用模块中的内容)
1. 函数 - 对实现某一特定功能的代码封装
1. 定义函数
def 函数名(形参列表):
函数说明文档
函数体
说明:
def - 关键字,固定写法
函数名 - 程序员自己命名(要求和规范同变量)
(): - 固定写法
形参列表 - 以 , 隔开如:变量名1,变量名2,...(将函数外部的数据传递到函数内部)
函数说明文档 - 一个文档注释(可有可无)
函数体 - 和 def 保持一个缩进的一条或多条语句,以实现函数功能
17.PNG
2. 调用函数
函数名(实参列表)
说明:
函数名 - 想要调用哪个函数就写哪个函数名
函数在调用前必须先定义
3. 函数的参数
1. 位置参数和关键字参数
位置参数和关键字参数一起用 - 位置参数必须在关键字参数前面
2. 参数默认值
定义函数的时候给参数赋默认值 - 调用函数时如果参数有默认值可以不传参(只给其中一个参数传参必须用 关键字参数,使用位置参数默认给第一个参数传参 )
3. 不定长参数
-
形参的前面加一个 * 可以不定长
21.png - 也可以加 **
*和 ** 的区别
*在传参(调用)的时候只能使用位置参数
** 在传参(调用)的时候只能用关键字参数
() 和 (*) 同时使用
传参时可以同时使用位置参数(在前)和关键字参数
5. 匿名函数
js函数
function 函数名 (形参列表){
函数体
}
js的匿名函数
function (形参列表){
函数体
}
匿名函数
匿名函数
函数名 = lambda 形参列表:返回值
相当于
def 函数名(形参列表):
return 返回值
- max()- 求最大值
- min() - 求最小值
- sorted() - 从小到大排序
- sorted(,reverse = True - 从大到小排序
5.map函数
map(函数,序列) - 将序列中所有的元素按照制 定规则进行变换
函数 - 一个参数(序列中的元素),一个返回值(描述变换规则)
map ( 函数,序列1,序列2 )
函数 - 两个参数(分别指向两个序列中的元素),一个返回值(新序列中的元素)
类和对象
深入学习:魔法方法、内置属性、私有化、slots\getter和setter、继承(mro模型)
1. 定义类
class 类名:
类的内容(包括属性和方法)
//属性:类属性和对象属性
//方法:定义在类中的函数,分为对象方法、类方法、静态方法

1. 使用类创建对象
c1=Circle(10)
10 - 赋值
- 定义方法的时候,self后面定义参数r,x,y,...
2. 使用对象属性
3. 使用对象方法
4. 使用类属性
5. 使用类方法
6. 使用静态方法
模块的使用
1. 定义
python中一个py文件就是一个模块
怎么在一个模块中使用另外一个模块的内容 - 导入
1. 导入方式
- import 模块名 - 导入后可以通过 模块名 . 的方式使用这个模块中所有的全局变量
- from 模块名 import 内容1,内容2 - 导入后可以直接使用被导入的所有内容
- from 模块名 import * - 直接导入所有
- 重命名模块 - import 模块名 as 新名字
例如:import numpy as np- 重命名内容 - from 模块名 import 内容1 as 新名字
三大神器 - numpy pandas matplotlib
- numpy - 处理数据 (ndarry - 提供多维数组)
- matplotlib - 数据可视化
- pandas - 结合numpy和mayplotlib的功能 - 处理数据、数据可视化
导入
- import numpy as np
- import pandas as pd
- import matplotlib as plt
下载第三方库
pip install
2021.6.10
numpy
- ndarry(多维数组的数据处理)
1. 一维数组
//方式一:用array函数将列表转换成数组
array1 = np.array ( [ 10,78,34,89,23 ] )
//方式二:用arange函数创建指定范围的数字数组
// arange()
array2 = np.arange(1,100)
//步长为2
array2 = np.arange(1,100,2)
//方式三:用linspace函数创建等差数列
//-5 到 5产生 10 个等差数列
array3 = np.linspace( -5,510 )
//方式四:使用numpy的随即模块中的随机函数产生数字数组
//1 到 101 内产生五个随机整数
array4 = np.random.randint( 1,101,5 )
2. 二维数组
//方式一:
array5 = np.array( [ [ 1,2,3 ],[ 4,5,6 ],[ 7,8,9, ] ] )
//方式二:
//产生 1 到 100 内三行四列的随机二维数组
array6 = np.random.randint(1,100,(3,4))
//方式三:
//产生一个五行三列的零值数组
array7 = np.zeros( (5,3) )
//方式四:
//全是1
array8 = np.ones((3,4))
//方式五:
//产生一个三行四列且全是10的数组
array9 = np.full((3,4),10)
//方式六:
//产生一个单位矩阵
array10 = np.eye(4)
3. 数组的属性
-
例子
34.PNG
//数组元素的个数
array6.size
//数组的形状(几行几列)
array6.shape
//数组的维度
array6.ndim
//数组的类型(注意:numpy中数组中的元素的类型必须一致)
array6.dtype
//每个元素所占的内存大小(单位:字节)
array6.itemsize
//整个数组所占的内存大小(单位:字节)
array6.nbytes
4. 数组的方法
1. 获取描述性统计信息相关方法
-
例子
34.PNG
//求和
print(array1.sum())
//平均值
print(array1.mean())
//最大值和最小值
print(array1.max() , array1.min())
//标准差
print(array1.std())
//方差
print(array1.var)
//累计和
//当前时期与前面时期的和
print(arry1.cumsum())
//累积乘积
print(array1.cumprod())
2. 变换相关方法
-
例子
35.PNG
//
从小到大排序
array1.sort()
//调整数组形状,三行两列,六个元素
//不修改原数组,产生一个新的数组
array1 .reshape(3,2)
//调整数组大小,不够的数据用 0 填上,recheck
//直接修改原数组
array1.resize(3,4,refcheck=False)
//数组扁平化(将多维数组变成一维数组)
//array1是一维数组不做此例子使用
array.flatten
3. 切片
//numpy一维数组切片和列表切片一样
array1[1:-1]
二维数组【行切片:列切片】
37.PNG
4. 索引操作
普通索引 - 和列表一样
一维
35.PNG
print(array1[1])
print(array1[-1])
二维
38.PNG
花式索引
在 [ ] 中用一个一个的列表罗列出所有要获取的元素的下标
一维
array1 [ [0,2] ]
二维
二维数组[ (所有的行索引),所有的列索引]
array6[ (x1,x2),(y1,y2) ...]
布尔索引
5. 数组的运算
1. 数学运算
+-**
2. 数组和数组的运算
一维对一维,个数必须相等
二维相同数组,对应运算
如果形状不同,满足广播机制的时候两个数组可以运算
43.png
44.png
矩阵乘法 - x @ y (x的列数必须等于y的行数)
3. 其他相关函数
1. 将数据保存到本地(硬盘中)- 保存成二进制文件
array.dump('文件名')
2. 加载本地数据
temp = np.load('文件名',allow_pickle=True)
3. 去重
np.unique(数组名)
2021.6.11
pandas
1. Series
1. 创建Series对象
s1 = pd.Series(
data = [10,30,78,20,12]
)
s2 = pd.Series(data = range(1,10))
s3 =pd.Series(
np.randint(20,100,6)
)
s4= pd.Series(
data=[ 70,12 ]
index= ['小明','小红']
)
s5 = pd.Series(
data= {
'张三':10,
'李四':20
}
)
2. 索引操作
s5[ 0 ] , s5[ '张三' ]
//获取描述性统计信息
s6 = s5.describe( )
//获取全部索引
s6.index
//获取所有数据
s6.values
//获取元素个数
s5.size
//判断是否单调
//默认是判断单调递增与否
s5.is_monotonic()
//单调递增
s5.is_monotonic_increasing()
//单调递减
s5.is_monotonic_decreasing()
索引操作:支持numpy中的普通索引、花式索引、布尔索引
s7 = pd.Series(
np.random.randint( 20,80,6 ),
index =
)
相关方法
常规数据
print(s7.max())
print(s7.min())
print(s7.mean())
print(s7.std())
print(s7.median())#中位数
print(s7.quantile())#分位数
删除空值
47.PNG
填充空值
48.PNG
去重
49.PNG
2. DataFrame(二维数组)
df2 = pd.DataFrame(
data=np.random.randint(70,100,(4,3)),
index=range(1001,1005),
columns=['语文','英语','数学']
)
df2
#字典创建
df3 = pd.DataFrame(
data={
'语文':[90,94,90,88],
'数学':[85,82,78,95],
'英语':[75,78,87,95]
},
index=range(1001,1005)
)
df3
#读csv文件,逗号分隔符文件
#pd.read_csv(文件路径)
df4 = pd.read_csv('data/2018年北京积分落户数据.csv')
df4
df5 = pd.read_csv(
'data/2018年北京积分落户数据.csv',
#设置作为索引的列
index_col='id',
# #设置读取的行数
# nrows=10,
# #跳过指定行
# skiprows=range(0,6)
#设置需要读取的列
usecols=['id','name','score']
)
df5
#读excel文件
df6 = pd.read_excel('data/阿里巴巴2020年股票数据.xlsx')
df
2021.6.15
2. DataFrame的属性和方法
1. 基本属性
print(df2.shape)#形状
print(df2.values)#所有的值,data
print(df2.index)#行索引
print(df2.columns)#列索引



