Python中数据清洗缺失值,重复值和异常值的处理

1 缺失值的处理

1.1 常规缺失值的处理

np.nan,NaN,None,NaT(时间数据类型的缺失值)等

df.isnull()

1.判断每一个df中的数据是否为缺失值,是则返回True,否则返回False
2.可以利用True为1,False为0的特性,sum()即为缺失值数量
df.notnull()

判断每个df中的值是否不为缺失值,是不为缺失值返回True,不是不为缺失值则返回False
df.dropna() 1.删除缺失值,可以指定axis来控制删除出现缺失值的行或者列 2.使用dropna( )中的参数how设置删除行列标准

  • how=‘all’:只有当该列(或行)全为缺失值时,才删除该列(或行)
  • how=‘any’:只要该列(或行)中有一个缺失值,就会将该列(或行)删除掉 默认
    df.fillna(999)

fillna填充缺失值

平均数填充:df.fillna(df.字段名(列名).mean()) 使用某一字段(列)的平均数填充
众数填充:df.fillna(df.字段名(列名).mode()[0]) 使用某一字段(列)的第一个众数填充
中位数填充:df.fillna(df.字段名(列名).median()) 使用某一字段(列)的中位数填充
上下文填充:df.fillna(method=‘ffill’) 使用上文填充(forwardfill),使用下文填充(backfill/bfill)
df.fillna(df.mean()) 使用各个字段(列)对应的均值填充(众数/中位数等同理)

df.interpolate()

使用线性差值填充,可以通过设置method参数来改变方式

1.2 其他缺失值的处理

实际工作中,某些异常值我们也会当做缺失值来处理。 例如,在我们的患者信息中,年龄字段出现了大约120岁的值,我们就可以认为这是一个异常值。

再比如,我们都知道性别分为男性(male)和女性(female),在记录用户性别的时候,对于未知的用户性别都记为了 “unknown”,很明显,我们也可以认为“unknown”是缺失值。

此外,有的时候会出现空白字符串,这些也可以认为是缺失值。

对于上面的这种情况,我们可以使用 replace 方法来替换缺失值。

  • df.replace(’’,np.nan) 使用np.nan替换是’'的数据

2 重复值的处理

df.duplicated() 按行进行检验,第一次出现返回False,不是第一次返回True
df.drop_duplicates()

  • subset
    考虑哪些列来标识重复项
  • keep
    • “first”:保留第一个重复项,其余删除。
    • “last”:保留最后一个重复项,其余删除。
    • False:删除所有重复项。

3 异常值的处理¶

散点图,箱线图(数据百分位数),算法

3.1可以通过箱线图来查找异常值

箱线图所表示的各个数值的含义:线条右下到上分别表示。
最小值、第一四分位数、中位数、第三四分位数和最大值
第一四分位数(Q1),又称“较小四分位数”或“下四分位数”,等于该样本中所有数值由小到大排列后第25%的数字;
第二四分位数(Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字;
第三四分位数(Q3),又称“较大四分位数”或“上四分位数”,等于该样本中所有数值由小到大排列后第75%的数字;
第三四分位数与第一四分位数的差距又称四分位间距(InterQuartile Range,IQR)。

3.2 检测到了异常值,我们需要对其进行一定的处理。而一般异常值的处理方法可大致分为以下几种:

删除含有异常值的记录:直接将含有异常值的记录删除;
视为缺失值:将异常值视为缺失值,利用缺失值处理的方法进行处理;
平均值修正:可用前后两个观测值的平均值修正该异常值;
不处理:如果异常值具有实际价值,直接在具有异常值的数据集上进行数据挖掘;

->内容来自与我的老师,自己整理学习用!!!

你可能感兴趣的:(数据分析,python)