![e407fda63f7bfdd6d6eceeec14cf046b.png](https://img-blog.csdnimg.cn/img_convert/e407fda63f7bfdd6d6eceeec14cf046b.png)
写在前面
上周我们读取完了数据(Python数据分析实战:获取数据),下面就要对数据进行清洗了,首先是对缺失值的处理。缺失值也就是空值,先找出来再处理。
查看缺失值
可以使用isnull方法来查看空值,得到的结果是布尔值。
# 查看缺失值
df_list.isnull()
结果:
![ced88d1fee05fdacc3d08f9369bba94e.png](https://img-blog.csdnimg.cn/img_convert/ced88d1fee05fdacc3d08f9369bba94e.png)
对于小的数据集来说,可以这样看,但对于大的数据集这样查看空值貌似没什么意义,没关系,还有其他方法,可以使用info方法
# 查看空值
df_list.info()
结果:
![d268fc9608d973874d1176fee2d577a5.png](https://img-blog.csdnimg.cn/img_convert/d268fc9608d973874d1176fee2d577a5.png)
info方法可以看到字段的数据类型以及每个字段下有多少个非空值,可以看到neighbourhood_group 字段全为空,这和布尔值显示的结果一致。
其实还有一个方法,更简单了:
# 查看空值
df_list.isnull().sum()
对取出来的isnull的布尔值求和,就很明显地看到,id列是没有空值的,name列有一个空值,结果:
![b79300df140fa9d20d97ee8bb16ae7ad.png](https://img-blog.csdnimg.cn/img_convert/b79300df140fa9d20d97ee8bb16ae7ad.png)
也可以对单独的某一列这样查看空值,对name列查看空值
# 对单独一列查看空值
df_list["name"].isnull().sum()
结果为1,说明name列有1个空值:
![574dafa9fa02382054b8ac37bb1323e4.png](https://img-blog.csdnimg.cn/img_convert/574dafa9fa02382054b8ac37bb1323e4.png)
缺失值的处理
找到缺失值以后如何处理呢?删除或填充。
删除缺失值
用dropna方法,默认是只要一行中有一个缺失值这一行就全都删除
# 删除缺失值
df_list.dropna()
结果就是这个数据集里的数据全被删掉了,因为其中的neighbourhood_group这个字段全为空,按照dropna的尿性,有一个为空就整行删除,就得到了如下结果:
![0be68e74d3e99fb5d90dc20e073aa782.png](https://img-blog.csdnimg.cn/img_convert/0be68e74d3e99fb5d90dc20e073aa782.png)
当然也可以给这个方法传入how="all"参数,只有在整行为空的前提下才删除。
# 整行都为空才删除
df_list.dropna(how = "all")
结果是一条都没有删除,因为这个数据集里没有所有字段都为空的记录:
![1debb4360ab83bf542f166e9ed09a752.png](https://img-blog.csdnimg.cn/img_convert/1debb4360ab83bf542f166e9ed09a752.png)
但是有一列数据都为空的字段,把neighbourhood_group这一列删掉,还记得删除列的方法吗
# 删除列
df_list = df_list.drop(columns = "neighbourhood_group")
df_list
结果:
![4823b844c179df618752b1ec8b93100a.png](https://img-blog.csdnimg.cn/img_convert/4823b844c179df618752b1ec8b93100a.png)
name列也是有一个空值的,找出来看一下
# 定位到name列的空值
df_list[df_list["name"].isnull()]
结果如下,这一行还是删了吧。
![215e0362f059aa1e2d79cd9c80664cfc.png](https://img-blog.csdnimg.cn/img_convert/215e0362f059aa1e2d79cd9c80664cfc.png)
删除行用drop方法,刚刚定位出了要删除的那一行,行索引是456
# 删除name列的空值的行
df_list = df_list.drop(index = 456)
df_list
结果可以看到变成了28451行,之前一直都是28452行。
![5e176eda747c0904cafbefe135bf6ee7.png](https://img-blog.csdnimg.cn/img_convert/5e176eda747c0904cafbefe135bf6ee7.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()})
结果
![346d7341c30ded0a239652627ba713e4.png](https://img-blog.csdnimg.cn/img_convert/346d7341c30ded0a239652627ba713e4.png)
这里只是举例缺失值也可以被填充这样处理,在这个案例里,不建议这两列填充,空着就空着吧。下节内容来处理重复值和异常值。
猜你喜欢:
Python数据分析实战:获取数据
为什么要学统计学:赤裸裸的统计学
成为数据分析师的第三年,我写了10W字
@ 作者:可乐
@ 公众号/知乎专栏/头条/简书:可乐的数据分析之路
@ 加微信(data_cola)备注:进群,拉你进可乐的数据分析交流群,数据分析知识总结,不定期行业经验分享
![1cb1df6af8a1671dae2bceb25f38ded1.png](https://img-blog.csdnimg.cn/img_convert/1cb1df6af8a1671dae2bceb25f38ded1.png)