获取数据:

Python怎么自动清理数据 python数据清理案例_数据集

检查缺失值

首先第一步,我们先检查一下数据集中是否存在空值,可以用pandas中的isnull、nonull、info方法来检查,我们都来试一遍

data.isnull()

Python怎么自动清理数据 python数据清理案例_Python怎么自动清理数据_02


可以看到,因为数据太多,没有办法全部找出来,这个时候可以用到sum方法来进行统计每一列有多少个缺失值

data.isnull().sum()

Python怎么自动清理数据 python数据清理案例_数组_03


结果显而易见,前三列各自带有3个缺失值。

那么nonull和info方法呢,我们也都来试一下

data.notnull().sum()

Python怎么自动清理数据 python数据清理案例_数组_04


nonull与isnull方法相反,它是找出非空值

data.info()

Python怎么自动清理数据 python数据清理案例_数组_05


info方法则是将数据集的详细详细给显示出来,可以看到数据集的行数,非空值以及数据类型等

清理异常值

使用seaborn来看一下数据的分布情况

sns.pairplot(data,hue='species')
plt.show()

Python怎么自动清理数据 python数据清理案例_缺失值_06


从图中我们可以看到一个特别不合群的点,仔细观察发现它的花瓣长度达到了15cm以上,这显然是不合理的,所以把它给过滤成空值

data['petal_length'][data['petal_length']>14] = None
data.isnull().sum()

Python怎么自动清理数据 python数据清理案例_Python怎么自动清理数据_07


成功将异常值替换为空值,然后接下来就可以清理这些空值了。

处理缺失值

处理缺失值的方法主要有2种,一是直接删除带有缺失值的行或列,二是对缺失值进行填充

直接删除

pandas中的dropna方法可以达到删除的功能,以下是我个人总结的dropna的详细用法

参数

作用

axis

选择作用的轴,axis=0删除行,axis=1删除列,默认为0

how

可选参数有 ‘any’,和‘all’, 默认 ‘any’,any表示行或列中只要有一个缺失值就清除,all表示要整行都是缺失值才清除

thresh

thresh参数接受一个int值,表示保留有n个非空值的行或列

subset

subset参数接受一个集合作为值,可以是列表、元组、数组等,表示哪些列必须不能有空值,处于这些列或行的空值所处的行或列将被清除

inplace

inplace参数接受一个bool的值,表示是否在原数组上操作,如果值为True,那么返回None,并且直接对原数组进行缺失值的清理,否则就只返回一个copy

这里数据集缺失值的清理我们可以先尝试一下直接删掉带有缺失值的行和列,看看效果如何

data.dropna().info()

Python怎么自动清理数据 python数据清理案例_数组_08


从结果上可以看得出来,结果处理之后已经不存在缺失值了,但是删除数据集7行。如果我们选择的是对列进行操作,那会删掉哪些数据呢?我们再来试一下

data.dropna(axis=1).info()

Python怎么自动清理数据 python数据清理案例_缺失值_09


结果很明显,缺失值是删掉了,但是我们的数据集却只剩下2列了。

剩下的一些参数我就不一一举例了。

填充

上面的dropna方法是直接进行删除操作,比较暴力,如果我们想保留这些数据,又想去掉缺失值,那么我们可以采用填充的方法fillna

下面是我个人总结的一些fillna的参数用法

参数

用法

value

用于填充的值,也可以用字典、序列等进行填充

axis

选择作用的轴,axis=0为行,axis=1为列,默认为0

method

填充的方法。大致分为2种:ffill/pad拿前面的值填充,backfill/bfill拿后面的值填充,这里前后可以是行和列,根据axis的值决定,当空值处于行或列的头尾时会出现无值填充,继续为空值

limit

限制每行或每列填充的空值个数

inplace

inplace参数接受一个bool的值,表示是否在原数组上操作,如果值为True,那么返回None,并且直接对原数组进行缺失值的清理,否则就只返回一个copy

Python怎么自动清理数据 python数据清理案例_缺失值_10


还是一样的数据,先检查一下缺失值的存在

data.isnull().sum()

Python怎么自动清理数据 python数据清理案例_数组_11


这里我们可以看到,缺失值是出现在花萼长度,花萼宽度和花瓣长度的位置中,考虑到这些值不会相差特别大,所以我采用每一列的平均值进行缺失值的填充

fill_sepal_length = data['sepal_length'].mean()
fill_sepal_width = data['sepal_width'].mean()
fill_petal_length = data['petal_length'].mean()
data2 = data.fillna({'sepal_length':fill_sepal_length,
            'sepal_width':fill_sepal_width,
            'petal_length':fill_petal_length},).isnull().sum()
data2

Python怎么自动清理数据 python数据清理案例_数组_12


填充完毕,这样数据集中就没有缺失值了。