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

本文介绍了数据清洗中关键的步骤:处理缺失值、异常值和重复值。针对缺失值,讲解了丢弃和补全两种策略,包括使用均值、中位数、众数填充,以及使用Pandas和sklearn的方法。异常值处理涉及箱线图、正态分布图法和Z-Score方法。重复值的处理则包括如何检测和删除。
摘要由CSDN通过智能技术生成

基础知识

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

数据缺失分为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)

在这里插入图片描述

2、查看哪些值缺失

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

在这里插入图片描述

3、获得含有NA的列

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

在这里插入图片描述

4、获取全部为NA的列

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

在这里插入图片描述

5、丢弃缺失值

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

在这里插入图片描述

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','col2','col3','col4']) # 生成一份数据

df.iloc[1, 1] = np.nan #增加缺失值
df.iloc[4, 3] = np.nan
print(df)

nan_model = Imputer(missing_values='NaN', strategy='mean', axis=0) # 建立替换规则:将值为Nan的缺失值用均值做替换
nan_result = nan_model.fit_transform(df) # 应用模型规则
print("使用这一列的均值代替NaN")
print(nan_result)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值