机器学习之数据预处理——数据清洗(缺失值、异常值和重复值的处理)

机器学习之数据预处理——数据清洗缺失值、异常值和重复值的处理

  • 基础知识
  • 技术点总结
  • 数据列缺失的处理方法
    • 1、丢弃(缺失值处理)
      • 1、生成一份随机数据
      • 2、查看哪些值缺失
      • 3、获得含有NA的列
      • 4、获取全部为NA的列
      • 5、丢弃缺失值
    • 2、补全(缺失值处理)
      • 1、使用sklearn将缺失值替换为特定值
        • 使用这一列的均值代替NaN
        • 使用这一列的中位数代替NaN
        • 使用这一列的众数代替NaN
      • 2、使用Pandas将缺失值替换为特定值
        • 用后面的值替换缺失值
        • 用后面的值替换缺失值,限制每列只能替换一个缺失值
        • 用前面的值替换缺失值
        • 用0替换缺失值
        • 用不同值替换不同列的缺失值
        • 用平均数代替,选择各自列的均值替换缺失值
        • 使用replace方法替换缺失值
    • 3、异常值处理
      • 知识点
      • 1、箱线图
      • 2、正态分布图法
      • 3、通过Z-Score方法判断异常值
    • 4、重复值处理
      • 1、判断重复数据
      • 2、删除重复值
        • 删除数据记录中所有列值相同的记录
        • 删除数据记录中col1值相同的记录
        • 删除数据记录中指定列(col1/col2)值相同的记录

基础知识

在数据清洗过程中,主要处理的是缺失值,异常值和重复值。所谓清洗,是对数据进行丢弃,填充,替换,去重等操作,实现去除异常,纠正错误,补足缺失的目的。

数据缺失分为2种:

  1. 行记录的缺失,这种情况又称为数据记录丢失;
  2. 数据列值的丢失,即由于各种原因导致的数据记录种某些列的值缺失。
    这里重点讨论数据列类型缺失值的处理

技术点总结

通过pd.DataFrame新建数据框;
通过df.iloc[]来选择特定的列或对象;
使用Pandas的isnull()判断值是否为空;
使用all()和any()判断每列是否包含至少1个为True或者全部为True的情况;
使用Pandas的dropna()直接删除缺失值。
使用Sklearn.preprocessing中的Imputer方法对缺失值进行填充和替换,支持3种填充方法:mean(均值),median(中位数),most_frequent(众数);
使用Pandas的fillna填充缺失值,支持更多自定义的值和常用预定义法;
通过copy获取一个对象副本,常用于原始对象和复制对象同时进行操作的场景;
通过for循环遍历可迭代的列表值。
自定义Z-Score计算公式;
通过Pandas的duplicated()判断重复数据记录;
通过Pandas的drop_duplicates()删除重复记录,可指定特定的列或全部。

数据列缺失的处理方法

1、丢弃(缺失值处理)

1、生成一份随机数据


import numpy as np  # 导入Numpy库
import pandas as pd  # 导入Pandas库

# 生成缺失数据
df = pd.DataFrame(np.random.randn(6, 4), columns=['col1','col2','col3','col4']) # 生成一份数据

df.iloc[1, 1] = np.nan #增加缺失值
df.iloc[4, 3] = np.nan
print("生成缺失数据:")
print(df)

机器学习之数据预处理——数据清洗(缺失值、异常值和重复值的处理)_第1张图片

2、查看哪些值缺失

# 查看哪些值缺失
nan_all = df.isnull() # 获取所有数据框中的N值
print("查看哪些值缺失:")
print(nan_all) # 打印输出

机器学习之数据预处理——数据清洗(缺失值、异常值和重复值的处理)_第2张图片

3、获得含有NA的列

# 获得含有NA的列
nan_col = df.isnull().any()  # 查找含有至少1个缺失值的列,any()方法用来返回指定轴中的任何元素为True
print("获得含有NA的列")
print(nan_col)

机器学习之数据预处理——数据清洗(缺失值、异常值和重复值的处理)_第3张图片

4、获取全部为NA的列

# 获得全部为NA的列
nan_col2 = df.isnull().all() 
# 查找全部缺失值的列,其中all()方法用来返回指定轴的所有元素都为True
print("获取全部为NA的列")
print(nan_col2)

机器学习之数据预处理——数据清洗(缺失值、异常值和重复值的处理)_第4张图片

5、丢弃缺失值

df2 = df.dropna() # 直接丢弃含有NA的行记录
print(df2)

机器学习之数据预处理——数据清洗(缺失值、异常值和重复值的处理)_第5张图片

2、补全(缺失值处理)

相对于丢弃而言,补全是更加常用的缺失值处理方式,常用的补全方法有:

  1. 统计法:对于数值行的数据,使用均值,加权均值,中位数等方法补足;对于分类型数据,使用类别众数最多的值补足。
  2. 模型法
  3. 专家补全法
  4. 其他方法

1、使用sklearn将缺失值替换为特定值

使用这一列的均值代替NaN
import pandas as pd # 导入Pandas库
import numpy as np # 导入Numpy库
from sklearn.preprocessing import Imputer # 导入sklearn.preprocessing中的Imputer库

# 生成缺失数据
df = pd.DataFrame(np.random.randn(6, 4), columns=['col1',

你可能感兴趣的:(#,机器学习,机器学习,决策树,人工智能)