python缺失值类型与分析_Python数据分析实战:缺失值处理

写在前面

上周我们读取完了数据(Python数据分析实战:获取数据),下面就要对数据进行清洗了,首先是对缺失值的处理。缺失值也就是空值,先找出来再处理。

查看缺失值

可以使用isnull方法来查看空值,得到的结果是布尔值。

# 查看缺失值

df_list.isnull()

结果:

be68a369b96ee828291318c7f088b39a.png

对于小的数据集来说,可以这样看,但对于大的数据集这样查看空值貌似没什么意义,没关系,还有其他方法,可以使用info方法

# 查看空值

df_list.info()

结果:

bed26d2d14fe70d56cf03c5e76f4b6a0.png

info方法可以看到字段的数据类型以及每个字段下有多少个非空值,可以看到neighbourhood_group 字段全为空,这和布尔值显示的结果一致。

其实还有一个方法,更简单了:

# 查看空值

df_list.isnull().sum()

对取出来的isnull的布尔值求和,就很明显地看到,id列是没有空值的,name列有一个空值,结果:

也可以对单独的某一列这样查看空值,对name列查看空值

# 对单独一列查看空值

df_list["name"].isnull().sum()

结果为1,说明name列有1个空值:

缺失值的处理

找到缺失值以后如何处理呢?删除或填充。

删除缺失值

用dropna方法,默认是只要一行中有一个缺失值这一行就全都删除

# 删除缺失值

df_list.dropna()

结果就是这个数据集里的数据全被删掉了,因为其中的neighbourhood_group这个字段全为空,按照dropna的尿性,有一个为空就整行删除,就得到了如下结果:

当然也可以给这个方法传入how="all"参数,只有在整行为空的前提下才删除。

# 整行都为空才删除

df_list.dropna(how = "all")

结果是一条都没有删除,因为这个数据集里没有所有字段都为空的记录:

但是有一列数据都为空的字段,把neighbourhood_group这一列删掉,还记得删除列的方法吗

# 删除列

df_list = df_list.drop(columns = "neighbourhood_group")

df_list

结果:

80965e0b8cecb1d6b779949335f1025a.png

name列也是有一个空值的,找出来看一下

# 定位到name列的空值

df_list[df_list["name"].isnull()]

结果如下,这一行还是删了吧。

ea435ff69784c348da6db2aab1f36daf.png

删除行用drop方法,刚刚定位出了要删除的那一行,行索引是456

# 删除name列的空值的行

df_list = df_list.drop(index = 456)

df_list

结果可以看到变成了28451行,之前一直都是28452行。

8ef1a01f93fca046201bbd14c7c2c37b.png

缺失值填充

当然缺失值除了删除外,还可以进行填充,可以用0填充,也可以用均值、众数填充。用fillna方法进行缺失值的填充。

last_review和reviews_per_month这两列也有缺失值,我们用众数填充(mode)last_review列的缺失值,用均值(mean)填充reviews_per_month列的缺失值。

# 缺失值填充

df_list.fillna({"last_review":df_list.last_review.mode(),

"reviews_per_month":df_list.reviews_per_month.mean()})

结果

abce9cecd9831268fc2b6cdf9a2a36a3.png

这里只是举例缺失值也可以被填充这样处理,在这个案例里,不建议这两列填充,空着就空着吧。下节内容来处理重复值和异常值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值