专注于快乐的事情

Pandas缺失值/异常值处理

缺失值处理

sample = pd.DataFrame({'name':['Bob','Lindy','Mark',
         'Miki','Sully','Rose'],
        'score':[99,78,999,77,77,np.nan],
        'group':[1,1,1,2,1,2],})

查看缺失情况

在进行数据分析前,一般需要了解数据的缺失情况,在Python中可以构造一个lambda函数来查看缺失值。

sample.apply(lambda col:sum(col.isnull())/col.size)

以指定值填补

Pandas数据框提供了fillna方法完成对缺失值的填补,例如对sample表的列score填补缺失值,填补方法为均值。

sample.score.fillna(sample.score.mean())

缺失值指示变量

每个有缺失值的变量可以生成一个指示哑变量,参与后续的建模。
sample.score.isnull().apply(int)

离散化和分箱

连续值经常需要离散化,假设你有某项研究中一组人群的数据,你想将他们进行分组,放入离散的年龄框中。
我们将这些年龄分为18~25、26~35、36~60以及61及以上等若干组。

ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]
bins = [18, 25, 35, 60, 100]
cats = pd.cut(ages, bins)

cut返回的对象是一个特殊的Categorical对象。
使用cats.codescats.categories可以分别查看所属分箱的编号和分箱。

cats.codes
array([0, 0, 0, 1, 0, 0, 2, 1, 3, 2, 2, 1], dtype=int8)

cats.categories
IntervalIndex([(18, 25], (25, 35], (35, 60], (60, 100]]
              closed='right',
              dtype='interval[int64]')

平均进行分箱,pandas将根据数据中的最小值和最大值计算出等长的箱
例如数据被切成四份,代码如下:

pd.cut(data, 4, precision=2)

基于样本分位数进行分箱

cats = pd.qcut(data, 4) # 切成四份
pd.qcut(data, [0, 0.1, 0.5, 0.9, 1.]) #自定义分位数

异常值处理

噪声值是指数据中有一个或几个数值与其他数值相比差异较大的值,又称为异常值、离群值(outlier)。
对于大部分的模型而言,噪声值会严重干扰模型的结果,并且使结论不真实或偏颇,
需要在数据预处理的时候清除所有噪声值。噪声值的处理方法有很多,对于单变量,常见的方法有盖帽法、分箱法;多变量的处理方法为聚类法。

参考网站

评论系统未开启,无法评论!