Python做数据分析时要注意的坑-20200405

Feronia ·
更新时间:2024-09-21
· 713 次阅读

 

目录

1.计算法则

1.数值型

2.字符型

1.字符型数据的切片:

2.字符串的格式化:

3.逻辑型

2.数据结构

1.列表(数组)

2.字典

3.序列

4.数据框

3.向量化运算

4.注意事项

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')


作者:wanercsdn



数据 数据分析 405 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号