【Python学习笔记】处理缺失值、重复值和异常值

【Python学习笔记】处理缺失值、重复值和异常值_第1张图片
镇楼图(图片源自unsplash)

零、前言

刚获取的数据中可能会有一些不规整的数据,比如:缺失数据、重复数据、异常数据,因此我们需要对数据进行预处理,剔除这些不规整的数据。

一、缺失值的检测与处理

缺失值就是由于某些原因导致部分数据为空,对于为空的这部分数据我们一般有两种处理方式,一种是删除,即将含有缺失值的数据删除;另一种是填充,即将缺失的那部分用某个值代替。
Python中缺失值一般用NaN表示。

1.1 缺失值的检测

相关方法

  • df.info()
  • df.isnull()
    • 如果是缺失值则返回True,否则返回False。
  • df.notnull()
    • 同isnull(),返回相反。

1.2 缺失值的处理

1.2.1 删除缺失值

相关方法:
  • df.dropna(self, axis=0, how='any', thresh=None, subset=None, inplace=False)
    • axis : {0 or ‘index’, 1 or ‘columns’}, default 0
    • how : {‘any’, ‘all’}, default ‘any’
    • thresh : int, optional
    • subset : array-like, optional
    • inplace : bool, default False

dropna()默认删除含有缺失值的行,也就是只要某一行又缺失值就把这一行删除。
指定thresh参数可以设置缺失值的判定个数,例如thresh=3,那么当某一行有3个缺失值是才会对这一行删除。
指定how='all'就只会删除那些全为空值的行了。
指定axis参数可以设置删除行或者列,默认为删除行。

1.2.2 填充缺失值

相关方法:
  • df.fillna(self, value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
    • value : scalar, dict, Series, or DataFrame
    • method : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None

设置value参数指定要填充的值。
设置method参数,bfill为向后取值,ffill为向前取值。
也可以传入一个字典进行分别填充。例如:df.fillna({'A':'apple','D':'dog'}),A列中的缺失值填充为 apple ,D 列中的缺失值填充为 dog 。

二、重复值的检测与处理

重复数据就是同样的记录有多条,对于这样的数据我们一般做删除处理。

相关方法:

  • df.drop_duplicates(self, subset=None, keep='first', inplace=False)
    • subset : 列标签名或标签序号,可选;
    • keep : {‘first’, ‘last’, False},默认为first。

df.drop_dunplicates()默认对所有值进行重复值判断,且默认保留第一个(行)值。
设置subset参数可以自定义按照某一列进行重复值判断;
设置keep参数可以自定义删除是保留第一个重复值还是最后一个重复值。

三、异常值的检测与处理

3.1 异常值的检测

  • 根据业务经验划定不同指标的正常范围,超过该范围的值算作异常值;
  • 通过绘制箱形图,把上下限之外的数值算作异常值;
  • 如果数据服从正态分布,则可以利用3σ原则:如果一个数值与平均数之间的偏差超过3倍标准差,那么我们就认为这个值是异常值。


    【Python学习笔记】处理缺失值、重复值和异常值_第2张图片

3.2 异常值的处理

  • 最常用的处理方式为删除;
  • 把异常值当作缺失值来填充就是对异常值进行替换,利用replace()方法可以对特定的值进行替换;
  • 把异常值当作特殊情况,研究异常值出现的原因。

你可能感兴趣的:(【Python学习笔记】处理缺失值、重复值和异常值)