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

本文探讨了Python数据分析中的关键点,包括数值型、字符型数据处理的注意事项,如切片、格式化,以及逻辑型操作。在数据结构部分,讲解了列表、字典、序列和数据框的特点及潜在陷阱,特别是对原数据的修改行为。同时,介绍了向量化运算的优势和如何避免浮点数计算的精度问题。遵循这些实践,能有效提高Python数据分析的效率和准确性。
摘要由CSDN通过智能技术生成

 

目录

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.注意事项

  1. 大小写敏感
  2. 变量名、文件名不要和正在用的模块名或函数名重复
  3. 变量名中包含两个以上单词的,可以用'_'分隔开,或者第一个单词首字母小写,后面的单词首字母大写
  4. 变量命名可以用字母、数字、下划线,但是不能以数字或下划线开头
  5. 缩进敏感。在Spyder中,用Tab键可以一次4个空格。注意不同的编辑器中Tab代表的空格数可能不同,所以最好用空格
  6. 控制一行代码的长度
  7. 转义符的使用:

输出

说明

想输出冒号

在冒号前加上反斜杠\

想输出反斜杠\

在其前面加上反斜杠\

想表示后面跟着的都是原始字符串,不含有转义

在字符串前面加上一个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')

Python的设计哲学是“优雅”、“明确”、“简单。Python用途极广。图形处理:有PIL、Tkinter等图形库支持,能方便进行图形处理。 数学处理:NumPy扩展提供大量与许多标准数学库的接口。 文本处理:python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。 数据库编程:程序员可通过遵循Python DB-API(数据库应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。 网络编程:提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet 及BitTorrent. Google都在广泛地使用它。 Web编程:应用的开发语言,支持最新的XML技术。 多媒体应用:Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。 pymo引擎:PYMO全称为python memories off,是一款运行于Symbian S60V3,Symbian3,S60V5, Symbian3, Android系统上的AVG游戏引擎。因其基于python2.0平台开发,并且适用于创建秋之回忆(memories off)风格的AVG游戏,故命名为PYMO。 黑客编程:python有一个hack的库,内置了你熟悉的或不熟悉的函数,但是缺少成就感。 用Python写简单爬虫
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值