python数据清洗与准备:缺失值、重复值、异常值处理

目录

一、缺失值处理

(1)判断缺失值

(2)去掉缺失值

(3)填补缺失值

(二)重复值处理(针对于dataframe里面的重复行)

(1)判断是否重复出现

(2)处理重复行

三、异常值处理

(1)挑选异常值

(2)处理异常值(比如超过了区间范围内的值)


一、缺失值处理

(1)判断缺失值

(data类型为series/dataframe)

data.isnull()

##返回布尔值对象,缺失值即为true.

data.notnull()

##isnull的否定形式 

(2)去掉缺失值

 data.dropna()

默认丢掉所有缺失值的行;

data.dropna(how='all')

##丢掉全部为na的行

data.dropna(how='any')

##丢掉只要含有na的行

date.dropna(axis=1,how='all')

##同理,丢弃全部为na的列传入axis=1即可)

data.dropna(thresh=n)

##每一行除去na值后如果剩下的数值>=n才显示

(3)填补缺失值

不想滤除缺失值,那就用其他数来填补:

data.fillna(0)

##最简单的就是括号里直接填写用来填补的值

data.fillna({1: 0.5, 2: 0})

##如果有不同列(比如不同特征)的空值要用不同值来填补,就用字典传输,1和2表示列;

 data.fillna(data.mean())

##可以直接用计算得到的其他值填补

除了用另外的值填补,还可以向前/向后填补(用空值前面的值或者后面的值自动填补),比较适用于时间序列。

 data.fillna(method='ffill')

##前面的值填补,后面的值用‘bfill’

data.fillna(method='ffill',limit=2)

##limit表示最多两个连续的两个空值被填补,因为如果连续的空值太多,还用之前的值填补可能不具有实效性;

(二)重复值处理(针对于dataframe里面的重复行)

(1)判断是否重复出现

data.duplicated()

##返回布尔值,如果前面的确出现过,那么重复行返回false

(2)处理重复行

data.drop_duplicates()

##把第二次即后面再出现的行都去掉 
data.drop_duplocates(['k1'])

##如果只想依据具体的某一列是否有重复值去掉重复行(并不一定是一模一样的两行),就在括号里面加上列名即可;

data.drop_duplocates(['k1','k2'],keep='last')

##keep='last'表示保留最后一次出现的行

值得注意的是,前面是把缺失值替换,但有的时候缺失值并不表示为na,甚至可能是具有特殊的性质,比如(-999)啊或者各种无意义的值,所以我们还要将这些值首先替换成缺失值:

data.replace(-999,np.na) 

data.replace([-999, -1000], [np.nan, 0])

##或者对于不同值,替换的也可以不同

三、异常值处理

(1)挑选异常值

首先,肯定是满足某个条件的值才能是异常值,因此要对data进行判断:

 data[(np.abs(data) > 3).any(1)]

##data中行有一个为true,则返回真,否则全部为false则返回假

返回data中只要含有绝对值>3的行

data[np.abs(data) > 3]

##或者中括号直接填入筛选条件

(2)处理异常值(比如超过了区间范围内的值

data[np.abs(data) > 3] = np.sign(data) * 3 

##引入numpy里面的sign函数,负数取-1,正数取1,所以整个数据的上限和下限就是3和-3

你可能感兴趣的:(python,开发语言,数据分析,机器学习)