主要有两个标记:1.直接执行到下一个断点。2.一条一条的执行
float转换为int类型,会将小数部分去除,只保留整数部分。
int类型可以随意转化为str
int类型转化为float类型,小数点后面会加一个0
{变量:类型}
a=2
b=1
max=a if(a>b) else b
str='我家在济南市长清区张夏镇'
'''
起始位置可以省略
若起始位置省略,则步长为正数,则起始位置为0
若起始位置省略,则步长为负数,则起始位置为末尾
若结束位置省略,则步长为正数,则结束位置为末尾
若结束位置省略,则步长为负数,则结束位置为0
'''
capitalize():将字符串第一个字母大写,其余小写
title():把所有单词首字母大写
upper():所有字母均大写
strip():无参数为删除两侧空格,有参数为删除两侧指定参数
rstrip():右侧
lstrip():左侧
str='你好啊啊'
print(str.rjust(10)) # 你好啊啊
print(str.rjust(10,'$')) # $$$$$$你好啊啊
未知函数补充
公用函数:enumerate():获取容器内元素可带序号
lambda函数
数组按照字典中的值进行排序
list1=[{'尹燕辉':10},{'燕辉尹':20},{'辉燕尹':5}]
list1.sort(key=lambda x:list(x.values())[0])
def max(*args)
def max(**keargs)
为什么要关闭文件?
当文件所有内容读取完成后,会持续返回空字符串,因此识别标志为
if content == '';
break
文件函数
文件操作
1.os.mkdir(‘student’):创建一个student文件夹
2.os.rmdir(‘student’):删除student文件夹
3.os.getcwd():获取当前活动的工作目录
4.os.chdir(‘文件’):切换到文件目录下
5.os.listdir():当前目录下的目录结构
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()
if __name__ == '__main__'
代表只可在模块内部调试时调用
__all__ =['func']
all可以控制模块使用功能from 模块名 import *,不能控制import效果
凡是没有在all控制的类表内的功能,不能在其他文件中使用
包的导入
1.import 包名.模块名:注意顺序
2.from 包名 import 模块名
文件读取
数据=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的切片操作:
4.通过[]语法获取指定列的数据
标签
1.数据.columns:数据的列标题
2.数据.index:数据的行标题
传入数据均为数字,dtype为int64
传入数据均为字符串,dtype为object
传入数据为多种类型,最终dtype也是object
object类似于字符串结构
s = pd.Series([1,2],index = ['1','2'])# index指定标签
Series和数值型计算
series+100:每个元素都加100
Series和另外Series计算:两个相同标签进行运算,若不同则结果为NAN
值得注意的是info,可以显示有没有非空
找到对应的行的信息
df.index = ['新标签1',‘新标签2’,‘新标签3’]
df.colums = ['新标签1',‘新标签2’,‘新标签3’]
修改行
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表示列
原数据
按照菜品名分组并统计每一组中盈利的平均值
a=l.groupby('菜品名').盈利.mean()
china_df.loc[(china_df['盈利']>3594)&(china_df['盈利']<9000)]
china_df.sort_values('盈利',ascending=True) # 盈利按照从小到大排序,Series没有列标签参数
china_df.sort_index(ascending=False) # 行标签按照从大到小排序
‘盈利’]<9000)]
### 13.dataframe分组聚合
### 14.dataframe排序操作
china_df.sort_values(‘盈利’,ascending=True) # 盈利按照从小到大排序,Series没有列标签参数
china_df.sort_index(ascending=False) # 行标签按照从大到小排序