Pandas 3.数据预处理

pandas 进行数据分析之前,需要异常、缺失数据进行预处理

缺失值处理

缺失值就是由某些原因导致部分数据为空,对于该类值通常 1. 删除 2. 填充

查看缺失值

info() 查看

python 中通过 .info() 方法可以查看有多少缺失值。
例如我们有一个缺失表那么我们就可以用 info() 方法查看

1
2
3
4
import pandas as pd

pf = pd.read_excel('test.xlsx')
print(pf.info())


通过查看 有几个非null值就可以粗略看出,多少缺失值

isnull() 判断

还可以通过 isnull() 来判断哪个值是缺失值,如果是缺失值则返回 True, 如果不是返回 False

删除缺失值

大概分为 2 种情况

  • 一行中某个字段缺失
  • 整行缺失,即空白行

删除语法

语法 描述
dropna() 删除所有有缺失的行
dropna(how='all') 只删除空白行

缺失值填充

其实大多数情况下,我们并不会删除数据,而是进行填充毕竟数据宝贵!数据缺失不大于30% 的情况下我们都选择填充

语法 描述
fillna(值) 将所有空白填充为设定值
fillna({'列1': 值1,'列2': 值2}) 按列给默认填充值

推荐使用第二种,就可以给不同字段设定一个填充值!

重复值处理

这类数据我们一般做删除处理

语法 描述
drop_duplicates() 删除整行相同的行,保留第一个
drop_duplicates(subset='列头字段') 指定判断字段去重
drop_duplicates(subset=['字段1','字段2']) 指定多个字段去重
drop_duplicates(keep='last') 指定保留谁

指定保留字段,可以设置最后一个 last 不保留任何重复值 False

异常值检测与处理

异常值是相比正常数据,过高或过低的数据,例如年龄 200 岁这种就是不正常数据

异常值检测

  • 根据业务经营划定正常范围, 超过该范围则为异常值。
  • 通过绘制箱形图,把大于小于箱形图上下边缘的点称为异常值
  • 如果数据服从正态分布,则如果一个数值与平均数只之间偏差超过3倍标准,那么是异常值

异常值处理

  • 最常用的处理方式就是删除
  • 把异常值当成缺失值进行填充, 后面会单独写一篇来介绍。
  • 把异常值当作特殊情况,研究异常值出现的原因

数据类型转换

数据类型介绍

Pandas 主要有 6 种数据类型

类型 说明
int 整数
float 浮点小数
object python 对象,用 O 标示
string_ 字符串,通常 S 标示, S10 代表长度为 10 的字符串
unicode_ 固定长度的 unicode 类型, 跟字符串定制一样
datetime64[ns] 时间格式

可以通过 info() 方法获取数据类型, 还可以用 dtpye 来获取一列的数据类型

类型转换

1
2
3
4
df['字段名'].dtpye  # 通过 dtpye 先查看字段类型

'''用setype设置字段类型'''
df['字段名'].setype('float64') # 可以将该字段转化为小数

索引设置

索引的存在便是,便于我们查找数据

为无索引表添加索引

  1. 如果索引,在 python 导入时会默认从 0 开始的自然数做索引。
  2. 通过 columns 传入横排索引, index 参数出入竖排索引

重设索引

通常现有索引并不是我们需要的索引,比如销售订单表,我们是以序号为索引但是我实际需求订单号为索引,这种情况下我们就需要重设索引。

1
df.set_index('订单号')  # 我们就可以将订单号这个字段设为索引

重命名索引

可以通过 rename 方法来重命名

1
2
3
4
5
6
7
8
9
10
df.rename(
columns={
'订单号': '新的名字1',
'用户名': '新的名字2'
},
index = {
'1': '一'
'2': '二',
}
)

columns 控制修改竖排字段名, index 修改横排索引

重制索引

在有层次表中,需要用到这个方法。 rest_index() 常用于数据分组、数据透视表中。

rest_index() 方法简介

参数 说明
level 指定要将层次化索引的的第几级别转换为 columns, 默认全部设为
drop 指定是否将索引删掉, 默认索引全部转化为 columns
inplace 指定是否修改原数据表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"""
c d
a b
bar one z 1.0
two y 2.0
foo one x 3.0
two w 4.0
"""

df.reset_index()

"""
a b c d
0 bar one z 1.0
1 bar two y 2.0
2 foo one x 3.0
3 foo two w 4.0
"""