定义变量名时要遵循的规则:
不能对元组中的元素做修改,只能做切片查询。如果元组中只有1个元素,则需要在这个元素的后面加上逗号。数字100正确的表示方法为(100,)
列表:a=[1,2,3]
,常用列表函数
函数 | 用途 |
---|---|
append() | 向列表末尾添加单个元素 |
extend() | 向列表末尾添加多个元素 |
pop() | 删除列表中指定下标对应的元素 |
remove() | 删除列表中指定名称的元素,如果列表中有多个相同名称的元素,则只删除第1个 |
列表切片:
a[0] # 第一个元素
a[-1] # 最后一个元素
a[0:1] # 指定开头到指定结尾
a[:2] # 开头到指定结尾
a[1:] # 指定开头到结尾
a[:] # 所有元素
列表切片的结果只有1个元素,则不再是列表类型,显示为标量值;有多个元素,则依然是列表类型,显示为列表。
集合是无序集的,即集合中元素的位置无法固定,不能像列表、元组一样做切片。
获取字典的键和值,有3种常用操作:
自定义函数语法:
def 函数名称(参数):
语句块
规则:
匿名函数,一种特殊的自定义函数,特殊在定义的函数没有名称,一般用于功能比较简易的函数。使用lambda来创建匿名函数。语法结构如下:
lambda [arg1 [, arg2,...,argn]]: expression
函数的参数调用通常分为按位置给参数赋值和通过指定参数名称给参数赋值。按位置给参数赋值是对照函数的参数位置一一赋值,但如果遇到函数的参数比较多,并且只需使用到其中一部分参数时,如果按照参数位置赋值,函数就显得比较臃肿、不简洁,则可以通过指定参数名称来给这些参数赋值,即关键字参数赋值。参数赋值方式有两大优点:第一,不再需要考虑参数的顺序,函数的使用将更加容易;第二,可以只对那些希望赋值的参数赋值。
函数的参数分为必选参数和可选参数。
函数 | 用途 |
---|---|
type() | 查询类型 |
函数:
np.arange()的3种情况:
DataFrame表格的行索引获取用df.index属性,列索引获取用df.columns属性,如果需要同时获取,则用df.axes属性,只获取行索引可用df.axes[0]表示,只获取列索引可用df.axes[1]表示。
df.dtypes属性可以获取各列的数据类型。
DataFrame表格数据可以按行或列获取,按行获取数据使用df.iterrows(),按列获取数据使用df.iteritems()函数,但这两个函数获取数据后会产生一个生成器对象(generator object)
单列选择的两种方式:
df['列标签']
df.列标签
选择单列,返回Series类型数据;选择多列,返回DataFrame类型表格。
筛选法只能选择行,不能选择列。
实例:df[[True,False,False,True,True]]
,在df[]
中提供一组布尔值,这组布尔值必须遵循以下两点要求:
loc切片法相当于是直接切片法df[]
的升级版。
行选择的表示方式有两种:
df.loc[行索引序号]
df.loc['行索引标签']
在指定DataFrame表格上添加列时,有直接添加列和df.assign()
两种方式,添加列的数据结构可以是列表、数组、Series等可迭代对象。
mask()与where()结构相同,含义相反。mask()在条件成立时做处理,where()在条件不成立时做处理,均可以对Series和DataFrame进行判断处理。
逻辑统计:all()和any()
遍历函数:
聚合函数,如sum(),max(),min(),mean()等。
极大值:nlargest()
极小值:nsmallest()
排名函数:rank(),统计出的名次是小数类型,在rank()之后加astype('int')
转换为整数类型。method参数提供对相同值的5种处理方法:
枚举 | 解释 |
---|---|
average | 默认值,对相同值做平均排名 |
min | 对相同值做最小排名,美式排名 |
max | 对相同值做最大排名 |
first | 对相同值出现的顺序做排名 |
dense | 与最小排名类似,但不同名次之间差值为1,中式排名 |
Python中的聚合函数可以对一组任意形式的序列值做统计;Pandas中的聚合函数只能对Series和DataFrame做统计;NumPy中的聚合函数可以对数组、Series和DataFrame做统计,Pandas和NumPy中的聚合函数在对二维数据统计时可以指定聚合方向。
如果需要重复使用一个正则表达式对象,可将正则表达式预编译成正则表达式对象,提高效率。
常见函数:
txt = '这是一段文本'
re.sub(r'\d+', '、', txt)
re.sub(r'(\d+)', r'\1、', txt)
re.sub(r'\d+', lambda m:m.group() + '、', txt)
sub()的3种不同的替换方式:
re.sub(r'\d+', '、', txt)
,第2参数是’、',表示将匹配成功的连续数字替换为顿号re.sub(r'(\d+)', r'\1、', txt)
,第2参数是r’\1、',其中\1表示引用正则表达式中第1个分组的内容,然后与顿号(、)连接re.sub(r'\d+', lambda m:m.group()+'、', txt)
,第2参数是lambda m:m.group() + '、'
,其中lambda m:m.group()
是匿名函数,m表示匹配成功后返回的re.Match对象,group()表示获取re.Match对象的值,然后与顿号(、)连接。
语法:re.compile(pattern[,flags])
希望多种匹配模式同时生效,则可以使用字符’|',或直接写在正则表达式字符串的最前面:
re.compile(r'abc', re.U|re.M)
re.compile(r'(?um)abc')
常见正则表达式flags
的匹配模式
完整写法 | 简写 | 内联标记 | 注释 |
---|---|---|---|
re.ASCII | re.A | (? a) | 表示\w、\W、b、\B、\d、\D、\s和\S只匹配ASCII,而不是 Unicode |
re.UNICODE | re.U | (? u) | 表示\w、\W、\b、B、\d、\D、\s和\S依赖于Unicode 字符属性数据库 |
re.IGNORECASE | re.l | (? i) | 忽略大小写匹配。如表达式要求匹配小写字母,但实际上也会匹配大写字母 |
re.MULTILINE | re.M | (? m) | 多行模式,'^‘匹配整个字符串的开始和每行的开始;’$'匹配整个字符串的结尾和每行的结尾 |
re.DOTALL | re.S | (? s) | 让’.‘特殊字符匹配任何字符,包括换行符。如果没有此标记,则’.'匹配除换行符的其他任意字符 |
re.VERBOSE | re.X | (? x) | 允许编写更具可读性、更友好的正则表达式,忽略空格和#后面的注释 |
长度匹配,量词匹配,6种模式如下:
边界匹配指单词边界和首尾边界,边界匹配是匹配的位置,元字符如下:
分组匹配,分组就是将正则表达式字符串中被括号引用的部分作为整体。匹配完成后,分组的内容可以被获取,之后可以用\number转义序列进行再次匹配。普通分组与命名分组。
m.group(0)或者m.group()表示获取正则表达式匹配成功的所有数据,包括分组外的数据,m.group(1)表示第1个分组中的数据,m.group(2)表示第2个分组中的数据,以此类推。还可以使用切片的方式提取数据,这种表示方法更为简洁。m[0]与m.group(0)的作用相同,m[1]与m.group(1)的作用相同,以此类推。
索引按方向可以分为行索引和列索引,按层级分类可分为单层索引和分层索引。在Pandas中行索引和列索引是可以修改的。分层索引(MultiIndex)可在Series或DataFrame上设置多个层次的索引,用于处理更高维度的数据。
分层索引数据的呈现方式还可以使用MultiIndex类下面的函数设置,分别按数组、元组、笛卡儿积和DataFrame这4种方式设置分层索引:
函数:
数据透视表
函数: