缺失值的处理办法

一.我们先大概随机生成一个可以处理的数据

import numpy as np
import pandas as pd
X = np.random.normal(0,5,(100,7))
column = ['a','b','c','d','e','f','g']
X = pd.DataFrame(X,columns=column)
X['g'][X['g']>0]=1
X['g'][X['g']<=0]=0

其中数据X的函数

二.随机构造缺失值

#构造一些缺失值
none = np.random.randint(0,99,10)
X['a'][none] = None
none = np.random.randint(0,99,5)
X['g'][none] = None
X.info()

在这里插入图片描述

1.删除观测

在一条观测上的多个特征都缺失的时候,进行再多的缺失值填补过于主观,此时可以将其删除

2. 平均值填充

最常见的,但这是再不能获取数据规律及联系时才用,个人觉得因数据而已,比如一个时间序列,其具有时间的趋势,故不能简单的利用均值填充

#平均数填充
X['a'] = X['a'].fillna(X['a'].mean())
3. 组内均值填充

在有多个特征的时候,可利用缺失值的特征X[‘a’]与其他各个特征或者目标分类回归进行相关性检验,若

import seaborn as sns
import matplotlib.pyplot as plt
def test(df):
    dfData = df.corr()
    plt.subplots(figsize=(9, 9)) # 设置画面大小
    sns.heatmap(dfData, annot=True, vmax=1, square=True, cmap="Reds")
    plt.savefig('./BluesStateRelation.png')
    plt.show()
test(X)

在这里插入图片描述
看到特征a和特征b的相关性最高(emmmm,虽然这里不高,但就举个例子好说话);根据特征c的组内均值进行填充或者最值等。

mean_b=X[['a','b']].groupby('b').mean()['a']
X.loc[X[X['a'].isnull()].index,'a'] = X.loc[X[X['a'].isnull()].index,'b'].map(mean_b)
4.众数填充

同特征中采用最常见的特征值填充

X['g'].value_counts()   # 显示出各个特征值的频数
X['g'] = X['g'].fillna(0)
X['g'].value_counts()
5.时间序列填充

若此数据中带有时间特征,或者周期特征,可考虑时间的连续性,对于某一个缺失值,可以采用临近的几个值进行拟合(线性,插条,等,虽然可能造成的成本较高,但这在数据量较小的时候不失为一种方法)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值