当我们拿到一份原始数据,首先会查看数据的基础信息,例如每一列数量统计,内存消耗、哪些列有缺失值等。完整的数据对于我们的数据分析工作来说意义重大,但对于实际收集数据的人却不是,所以我们经常会遇到数据缺失的情况。
重要的字段数据的缺失会影响进行数据分析后得出的结论,故不能随意舍弃这些字段。因此,数据预处理中非常重要的一项工作就是处理缺失值。
本文例子使用的是泰坦尼克号数据集,首先预览一下数据集的整体情况:从data.info()函数可以查看到数据的基础信息:
Age样本量为714,正常样本量应为891,有少部分数据缺失;Cabin字段的样本量为204,缺失了绝大部分数据;Embarked字段的样本量为889,缺失2行数据;其他字段无缺失,样本量均为891。
一、填充缺失值
下面将使用Age字段来做例子讲解填充缺失值具体方法:
1、使用常数0填充缺失值
data['Age']=data['Age'].fillna(0)
2、使用均值填充缺失值
data['Age']=data['Age'].fillna(data['Age'].mean)
3、使用中值填充缺失值
data['Age']=data['Age'].fillna(data['Age'].median)
4、使用众数填充缺失值
data['Age']=data['Age'].fillna(data['Age'].mode()[0])
mode()返回的是data['Age']中的众数,若有两个或以上的众数,将取第一个众数作为返回的值,所以fillna中填写为data['Age'].mode()[0]
二、删除缺失值
除了填充缺失值外,还有的一种处理方法就是删除缺失值。这种方法比较适合在数据样本大的情况下使用,在数据量足够大的情况,删除少量样本对后续的数据分析影响较小;但在数据样本量不足的情况,每一条记录都会对后续结果产生重要影响,这时我们更倾向于补充缺失值而不是删除缺失值样本。
1、删除缺失值所在的列
泰坦尼克号数据集中,Cabin字段缺失了687条数据,缺失比重过大,因此在这里我们将弃用这一特征,删除Cabin这一列样本数据。
data.drop(['Cabin'],axis=1,inplace=True)
运行结果:处理后查看前五行数据,Cabin字段这一列已被删除。
2、删除缺失值所在的行
泰坦尼克号数据集中,Embarked字段的样本量为889,缺失2行数据,缺失数量少。这种情况我们可以采用删除缺失值所在行的方式处理缺失值。
data.dropna(axis=0,inplace=True)
# dropna(axis=0)删除所有有缺失值的行,dropna(axis=1)删除所有有缺失值的列
# 参数inplace,为True表示在原数据集上进行修改,为False表示生成一个复制对象,不修改原数据,默认False
运行结果:查看数据集基础信息发现,原始行数从891行删除了2行缺失值的样本后,样本总数变为889行了。到此为止该数据集的全部缺失值均已处理完成。
以上就是Python Pandas 处理缺失值的全部内容,欢迎大家学习和分享。