Python难点
1.Debug
主要有两个标记:1.直接执行到下一个断点。2.一条一条的执行
2.数据转换
-
float转换为int类型,会将小数部分去除,只保留整数部分。
-
int类型可以随意转化为str
-
int类型转化为float类型,小数点后面会加一个0
3.f字符
{变量:类型}
4.算数运算符
- 除法运算中,结果必定为浮点型
- 浮点型参与运算后,结果一定为浮点型
5.三条目运算
a=2
b=1
max=a if(a>b) else b
6.字符串
字符串切片
str='我家在济南市长清区张夏镇'
'''
起始位置可以省略
若起始位置省略,则步长为正数,则起始位置为0
若起始位置省略,则步长为负数,则起始位置为末尾
若结束位置省略,则步长为正数,则结束位置为末尾
若结束位置省略,则步长为负数,则结束位置为0
'''
字符串查找
- index:查找字符串所在位置,查询其从左到右第一个索引号
- find:查找字符串所在位置,查询其从左到右第一个索引号
- rindex:从左往右
- rfind:从左往右
- count:查找出现的个数
修改字符串(拆分与合并)
- replace(a,b):把a替换为b
- split():去空格,变为列表
- join():给列表加入间隔符号变成字符串
字符串大小写转换
-
capitalize():将字符串第一个字母大写,其余小写
-
title():把所有单词首字母大写
-
upper():所有字母均大写
字符串两侧内容删除
-
strip():无参数为删除两侧空格,有参数为删除两侧指定参数
-
rstrip():右侧
-
lstrip():左侧
字符串对齐
- rjust(10,’¥’):右对齐,10代表总的大小,剩余部分用¥t填充
str='你好啊啊'
print(str.rjust(10)) # 你好啊啊
print(str.rjust(10,'$')) # $$$$$$你好啊啊
- ljust(10,’¥’)
字符串判断
- startwith(): 判断是否以…开头,可指定范围
- endwith():
- isalnum():判断是否无空格,全为数字
- isalpha():判断是否全为字母
未知函数补充
-
公用函数:enumerate():获取容器内元素可带序号
-
lambda函数
-
数组按照字典中的值进行排序
list1=[{'尹燕辉':10},{'燕辉尹':20},{'辉燕尹':5}] list1.sort(key=lambda x:list(x.values())[0])
-
7.不定长参数与关键字不定长参数
def max(*args)
def max(**keargs)
8.修改文件
-
为什么要关闭文件?
- 在文件打开状态时辉保持连接,会持续消耗内存。(内存泄漏)
-
当文件所有内容读取完成后,会持续返回空字符串,因此识别标志为
if content == ''; break
-
文件函数
- readline():读取一行,并且以‘/n’结束
- readlines():一次性将文件全部读下去,将文字以一行为一个元素保存到列表当中
-
文件操作
1.os.mkdir(‘student’):创建一个student文件夹
2.os.rmdir(‘student’):删除student文件夹
3.os.getcwd():获取当前活动的工作目录
4.os.chdir(‘文件’):切换到文件目录下
5.os.listdir():当前目录下的目录结构
9.面向对象
常用的函数
-
init:在对象创建完成后,初始化对象过程中自动调用的方法
-
在init之外的方法,不是每个对象都拥有,称为独有属性
-
str:
1.强制类型转换 str(对象)
2.隐式类型转换 print打印
-
del:程序结束后,变量释放,自动调用del方法,不占内存,使用del操作可以提前释放。
-
__dict__:查询对象的属性,该属性以字典形式保存
面向对象的三大特性
面向对象的三大特性:封装、继承、多态
-
在属性名前加上__可以进行私有化(dict私有属性方法可以查询)
-
通过get方法可以获取私有属性的值,set方法可以改变私有属性的值
def get_age(self): return self.__b def set_age(self, c): self.__b = c return self.__b
-
继承:
1.在继承中可以多级继承,子类中可以使用父类及父类的父类中非私有的属性和方法
2.如果在父类或者更高级的父类中实现了init方法,并且书写了参数,则实例化对象时,必须传值。
3.使用类名mro可以输出类的继承链条。
-
多继承
1.两个父类同时有重名函数,则谁写在前面就调用谁的。
-
多态
1.子类中调用父类三种方法
-
super().方法名() # 只能调用当前类的上一级类中的方法或函数
-
类名.方法名(self) #所使用的类名,必须在当前类的继承关系中
-
super(要从哪个类的上级类开始查询,self)
self是指调用的对象
-
类属性方法
-
类属性(所有对象共有的属性)
1.修改类属性应使用:类名.属性名,而不是对象名.属性名[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fUvrskDz-1689645252200)(Python%E9%9A%BE%E7%82%B9.assets/image-20230426130144175.png)]
-
实例属性(每个对象独有的)
-
类方法(只是用类属性):会随着调用次数的增多而不断变化
1.格式:类名.类方法名
@classmethod def eat_apple_num(cls):
2.会自动传入cls,指的类本身
静态方法
-
在静态方法中,不会传入self和cls,不适用类属性和实例对象属性
-
静态方法就是一个普通函数,放到类内部就是为了封装。
class Person(object): @staticmethod def func(): print(1) # 调用方法 Person.func()
10.模块与包
-
if __name__ == '__main__'
代表只可在模块内部调试时调用
-
__all__ =['func']
all可以控制模块使用功能from 模块名 import *,不能控制import效果
凡是没有在all控制的类表内的功能,不能在其他文件中使用
-
包的导入
1.import 包名.模块名:注意顺序
2.from 包名 import 模块名
11.Pandas
-
文件读取
数据=pd.read_csv('ziliao.tsv',sep='\t')# 注意加后面那一部分
-
行标签列标签
china_df.index #获取行标签 china_df.columns #获取列标签 a= china_df.set_index('盈利') #设置某一列为行标签
常用函数
1.数据.loc:根据行标签和列标签决定数据位置
-
数据.loc[[行标签],[列标签]]:对应行列的数据
-
数据.loc[[行标签]]:对应行的所有数据
-
数据.loc[行标签]:series格式数据
-
数据.loc[行标签,[列标签]]:一边省略series格式数据
-
数据.loc[行标签,列标签]:获取行列的具体数据
china_df.iloc[[1]]#获取行位置为1行的所有列的数据,类型为dataframe china_df.iloc[1]#获取行位置为1行的所有列的数据,类型为series china_df.iloc[[1],2]#获取一个数据,类型为series,标签为行标签 china_df.iloc[1,[2]]#获取一个数据,类型为series,标签为列标签 china_df.iloc[1,2]#获取一个数据
2.数据.iloc:根据行列位置确定数据位置,用法与loc一致
3.loc和iloc的切片操作:
- 数据.loc[起始:结尾,起始:结尾]
4.通过[]语法获取指定列的数据
- 数据[‘列标签’1,’列标签2’,’列标签3’]
-
-
标签
1.数据.columns:数据的列标题
2.数据.index:数据的行标题
- 数据.set_index(“year”):设置某一列为行标签
-
series and Datafram
1.创建Series
-
传入数据均为数字,dtype为int64
-
传入数据均为字符串,dtype为object
-
传入数据为多种类型,最终dtype也是object
object类似于字符串结构
s = pd.Series([1,2],index = ['1','2'])# index指定标签
2.Series常用操作
3.Series常用统计方法
4.bool索引
5.Series运算
-
Series和数值型计算
series+100:每个元素都加100
-
Series和另外Series计算:两个相同标签进行运算,若不同则结果为NAN
6.dataframe常用操作
值得注意的是info,可以显示有没有非空
7.dataframe——bool
找到对应的行的信息
8.修改行标签和列标签
df.index = ['新标签1',‘新标签2’,‘新标签3’]
df.colums = ['新标签1',‘新标签2’,‘新标签3’]
9.数据的增加删改
-
修改行
l.iloc[4]=[1,2,3]
l -
删除行
l.iloc[4]=[1,2,3] l.drop([1:3]) #删除指定行
-
添加行
china_df b = [i for i in china_df.columns] a = pd.Series(['1','A11','3'],index = b) l =china_df.append(a ,ignore_index=True) l
-
增加列
直接命名一个名字即可,如添加叫年龄的列
l['年龄'] = [i for i in range(11)]
- 删除列
l['年龄'] = [i for i in range(11)]
l.drop(['年龄'],axis=1) #axis=1表示列
10.函数nlargest 和nsmallst 的用法
11.简单的统计分析
原数据
按照菜品名分组并统计每一组中盈利的平均值
a=l.groupby('菜品名').盈利.mean()
12.dataframe条件查询操作
china_df.loc[(china_df['盈利']>3594)&(china_df['盈利']<9000)]
13.dataframe分组聚合
14.dataframe排序操作
china_df.sort_values('盈利',ascending=True) # 盈利按照从小到大排序,Series没有列标签参数
china_df.sort_index(ascending=False) # 行标签按照从大到小排序
‘盈利’]<9000)]
<img src="https://i-blog.csdnimg.cn/blog_migrate/2d115699c44dcde9bc78c3e92e40cbdd.png" alt="image-20230715202754054" style="zoom:50%;" />
### 13.dataframe分组聚合
<img src="https://i-blog.csdnimg.cn/blog_migrate/5be55710768e73dee2530ff232c86c6a.png" alt="image-20230715203207539" style="zoom:50%;" />
### 14.dataframe排序操作
china_df.sort_values(‘盈利’,ascending=True) # 盈利按照从小到大排序,Series没有列标签参数
china_df.sort_index(ascending=False) # 行标签按照从大到小排序