目录
1.计算法则
1.数值型
符号 | 说明 |
/ | 相除,注意结果的精度问题 |
// | 相除并取整 |
% | 相除并取余 |
** | 乘方 |
2.字符型
符号 | 说明 |
+ | 连接 |
* | 重复;例如‘*3’表示重复3次 |
startswith('字符串内容') | 判断是否以括号内的字符串开头 |
find('字符串内容') | 判断是否包含了括号内的字符串 |
replace('旧的字符串','新的字符串') | 用新的字符串替换旧的字符串 (并不更改原数据) |
【坑】:在Python中,很多地方使用函数进行的修改、追加或删除等操作,并不会更改原本的数据。但是通过赋值语句进行的修改、追加或删除操作,能够更改到原本的数据。
1.字符型数据的切片:
- 不论正向还是反向,都是取前不取后
- 可以反向索引,末位从-1开始
- 用中括号,中间用冒号
2.字符串的格式化:
%[对齐标记][宽度][.精度]类型
标记 | 说明 |
%s | 后面跟字符型 |
%d | 后面跟整数 |
%f | 后面跟小数 |
%% | 百分号,前面一个为转义符 |
+ | 显示正数的+号 |
- | 表示左对齐 |
‘ ’ | 位数不够时用空格补齐 |
0 | 位数不够时用0补齐 |
宽度 | 最小宽度,默认右对齐,不够的默认用空格补齐 |
精度 | 限制长度,超过则将四舍五入或是截断,默认为6位。 精度前有一个小圆点,与宽度做区别 |
3.逻辑型
注意首字母大写,其他字母小写
运算符 | 说明 |
& | 与 |
| | 或 |
not | 非 |
2.数据结构
1.列表(数组)
输入 | 说明 |
age[0] | 列表中的第1位的数据 |
age[0:2] | 列表的切片,即从第1位数字,到第2位数字 (同样取前不取后,不包含第3位) |
21 in age | 判断值是否存在于列表中,返回值是逻辑值 |
列表名.append(数据值) | 给列表增加一个数据(能更改原数据) |
列表名.extend(新的列表名) | 给列表增加另外一个列表(能更改原数据) |
allName[0]='刘一' | 修改列表中第一个数的值 |
del allName[0] | 根据位置删除列表中的值(能更改原数据) |
allName.remove('陈二') | 根据数据值删除列表中的值(能更改原数据) |
【坑】:列表中的操作都可以更改原数据
2.字典
键值对的集合,中间用逗号隔开
输入 | 说明 |
字典名[键名] | 访问该键对应的值 |
字典名.keys() | 获取字典中的所有键 |
字典名.values() | 获取字典中的所有值 |
'键名' in 字典.keys() | 判断这个键名是否存在于该字典的键中 (先判断要查找的是键还是值) |
'值' in 字典.values() | 判断这个值是否存在于该字典的值中 (先判断要查找的是键还是值) |
字典名[键名]=[值] | 如果该键存在,则修改键对应的值,只会保存最后一次出现的键值对 如果该键不存在,则增加键值对 |
del 字典名[键名] | 删除键值对(能更改原数据) |
【坑】:字典中的操作都能更改原数据
3.序列
- 序列是带索引的列表
- 用pandas模块下的Series函数
输入 | 说明 |
序列名=pandas.Series(data=[数值内容],index=[索引名]) | 定义一个序列 如果不定义索引,则使用默认索引 |
序列名[索引名] | 可以使用自定义索引或默认索引访问某个值,也可以用切片的形式访问多个值 |
索引名[[2,0,1]] | 按照指定位置返回值(常用于随机抽样) 外面的中括号用来取值;里面的中括号表示一个列表,要取多个值 |
'first' in x | 判断是否存在于序列中,如果不指定是index还是values,则默认判断索引 |
2 in x.values | 判断数值型或逻辑型的值是否存在,不用加括号 |
x.isin([True,'a']) | 依次判断序列x每个索引上的值是否存在于括号里的列表中 返回值也是按照索引顺序排列,返回逻辑值 |
ns = pandas.Series(['2']) x.append(ns) | 给序列增加数据时,要保证append()函数里面包含的是一个序列 调用append()函数后,会自动返回结果,但是没有更改原来的数据 |
序列名[索引名]=值 | 按照索引修改值 |
序列名[[索引名1,索引名2]]=[值1,值2] | 按照多个索引进行修改 看到多个就用列表形式,带上中括号 索引名外面要用中括号,表示按照索引取值 |
序列.drop(索引名) | 索引名可以是一个,也可以是多个 多个用列表形式,带上中括号 不清楚索引名时,可以用x.index[默认索引]代替索引名 删除操作后自动返回结果,但没有更改原来的数据 |
序列名['保留的值'!=序列名.values] | 按照值删除,把除了要保留的值以外的都删除 |
【坑】:如果自定义索引中有与默认索引冲突的,则会按照自定义索引操作。比如自定义第四位的索引名为0
【坑】:在序列中,追加和删除操作不会更改原来的数据
4.数据框
- 数据框是序列的集合
- 在数据框中,索引不单独算一列
- 使用pandas模块下的DataFrame函数
输入 | 说明 |
pandas.DataFrame(data=数值内容,index=索引名,columns=列内容) | columns控制数据框的列结果,包括列的顺序以及具体有哪些列 data、index、columns之间是用逗号隔开的 |
数据框名[列名] | 按照列名访问数据 可以是一列,也可以是多列 多列用列表形式,带上中括号 |
数据框名.iloc[默认索引] | 用默认索引访问行数据 也可以是切片形式访问多行 也可以用行列号访问具体位置的数据:数据框名.iloc[0:1,0:1] 表示第1行第1列数据 |
数据框名.loc[自定义索引] | 用自定义索引访问行数据 可以演变成增加行数据:数据框名.loc[len(数据框名)]=数据值 但这种方法效率很低,不适宜用在遍历中 |
数据框名.at[索引名,列名] | 访问数据框中某个具体位置的值 |
数据框名.append(新数据框名) | 追加操作,追加的内容是数据框 与序列一样,该操作没有更改原来的数据 |
数据框名[列名]=[列值] | 新增一列,注意新增的列值个数与行数要一致 |
数据框名.columns=[列名1,列名2] | 重新设置列名,注意中括号内要包含所有的列 |
数据框名.index=[索引名1,索引名2,索引名3] | 重新设置索引名,注意中括号内要包含所有的索引 |
数据框名.at[索引名,列名]=数据框中的值 | 修改数据框中某个具体位置的值 |
数据框名.drop(行索引名,axis=0) | 根据行索引名删除行,注意axis=0 与序列一样,该操作没有更改原来的数据 |
数据框名.drop(列名,axis=1) | 根据列名删除列,注意axis=1 与序列一样,该操作没有更改原来的数据 |
【坑】:在数据框中,追加和删除操作不会更改原来的数据
【坑】:数据框中表示某一列,可以用:数据框名[列名],也可以用:数据框名.列名
数据框中有一个函数iterrows,返回每一行的索引以及每一行对应的值,其中每一行的值用一个以列名为索引名的序列来表示
3.向量化运算
对同一列中的所有数据执行相同的操作
向量化运算更加高效,可以避免for语句的使用
- r>3 可以对向量r中的所有数与3进行比较,返回值为逻辑型
- r[r>3] 可以进行数据的过滤,只保留大于3的数值,返回值为新的r向量包含的值
- apply函数默认是按照列遍历,把函数的axis参数值改为1,就是按行遍历
4.注意事项
- 大小写敏感
- 变量名、文件名不要和正在用的模块名或函数名重复
- 变量名中包含两个以上单词的,可以用'_'分隔开,或者第一个单词首字母小写,后面的单词首字母大写
- 变量命名可以用字母、数字、下划线,但是不能以数字或下划线开头
- 缩进敏感。在Spyder中,用Tab键可以一次4个空格。注意不同的编辑器中Tab代表的空格数可能不同,所以最好用空格
- 控制一行代码的长度
- 转义符的使用:
输出 | 说明 |
想输出冒号 | 在冒号前加上反斜杠\ |
想输出反斜杠\ | 在其前面加上反斜杠\ |
想表示后面跟着的都是原始字符串,不含有转义 | 在字符串前面加上一个r |
想表示接续下一行,实际输出并不换行 | 反斜杠\用在一行末尾 |
8.浮点数计算的精度问题:
a=4.2
b=2.1
a+b
#结果
Out[2]: 6.300000000000001
使用decimal模块下的Decimal函数对浮点数进行封装,即可解决精度问题:
from decimal import Decimal
a=Decimal('4.2')
b=Decimal('2.1')
a+b
#结果
Out[3]: Decimal('6.3')