当前位置:网站首页>缺失值处理
缺失值处理
2022-07-24 18:20:00 【阿松丶】
处理思路
在数据预处理过程中,难免会有数据的确实情况,无论是自己爬虫获取的还是从公开数据源上获取的数据集,都不能保证数据集是完全准确的,难免会有一些缺失值。而以这样数据集为基础进行建模或者数据分析时,缺失值会对结果产生一定的影响,所以提前处理缺失值是十分必要的。
常用的处理思路主要有:
- 填充处理:数值变量、类别变量、时间序列
- 删除处理:按行删除、按列删除
- 不做处理
一、填充处理
常用的填充方法有:
- 统计量填充:如均值、中位数、众数、最值等
- KNN填充
- 预测填充
pandas中用于填充缺失值的方法:
df.fillna()参数解释:
对于数值型变量
1 统计量填充:
**均值填充:**
缺点:容易受到异常值的影响
df[col].fillna(value=df[col].mean(),inplace=True)
**中位数填充**
df[col].fillna(value=df[col].median(),inplace=True)
**众数填充**
缺点:众数结果可能有多个,需要取第一个df.mode(numeric_only=False)[0]
df[col].fillna(value=df[col].mode()[0],inplace=True)
**最大值填充**
df[col].fillna(value=df[col].max(),inplace=True)
**最小值填充**
```python
df[col].fillna(value=df[col].min(),inplace=True)
2 填充KNN数据
pip install fancyimpute
填充近邻的数据,先利用knn计算临近的k个数据,然后填充他们的均值。(安装fancyimpute)除了knn填充,fancyimpute还提供了其他填充方法
缺点:基于欧式距离找找最相邻的K个点的均值做填充,不能填充类别变量,并且进入KNN模型的数据也不能有非数值变量。
import pandas as pd
import numpy as np
from fancyimpute import KNN
data = pd.DataFrame([[3, 2, 4, 0],
[3, np.nan, 3, 1],
[5, np.nan, np.nan, 1],
[5, 5, 3, 4]],
columns=list('ABCD'))
print(data)
# fancyimpute填补缺失值时会自动删除列
data = pd.DataFrame(KNN(k=6).fit_transform(data),columns=data.columns)名
print(data)
3 预测填充
from sklearn.ensemble import RandomForestRegressor
def set_missing_ages(df):
#把数值型特征都放到随机森林里面去,除了Age其他四个特征均无缺失值
age_df=df[['Age','Fare','Parch','SibSp','Pclass']]
known_age = age_df[age_df.Age.notnull()].as_matrix()
unknown_age = age_df[age_df.Age.isnull()].as_matrix()
y=known_age[:,0]#y是年龄,第一列数据
x=known_age[:,1:]#x是特征属性值,后面几列
rfr=RandomForestRegressor(random_state=0,n_estimators=2000,n_jobs=-1)
#根据已有数据去拟合随机森林模型
rfr.fit(x,y)
#预测缺失值
predictedAges = rfr.predict(unknown_age[:,1:])
#填补缺失值
df.loc[(df.Age.isnull()),'Age'] = predictedAges
return df,rfr
对于类别型变量
1 出现频率最高的变量填充(相当于众数)
data["D"] = data["D"].fillna(data["D"].value_counts().index[0])
2 将缺失作为一个特定的类别
把缺失当作一种特定的状态,
比如对于账户信息的收集,其中有些是选填项,这些特征肯定会存在缺失,我们可以把它当作一个”保密“的类别。
3 预测填充
对于时间序列
由于时间序列的特殊性,相邻的点相关性比较大。所以,对于时间序列的缺失值的处理方式会与数值型缺失值处理方式不同,往往会用相邻的点填充。
前一个值填充
df["col"] = df["col"].fillna(df["col"].fillna(method='ffill'))
后一个值填充
df["col"] = df["col"].fillna(df["col"].fillna(method='bfill'))
线性插值
df["col"] = df["col"].fillna(df["col"].interpolate())
二、删除处理
按列删除
某一列缺失数据较多,比如缺失率高达80%以上时,往往会删除整列特征
按行删除
对于重要的唯一标识ID特征存在缺失,比如我的建模目标是预测每个用户的消费能力。每个用户ID唯一标识一个特定的用户,若用户ID存在缺失直接删除缺失所在行。
三、不处理
其实对于树模型来说是支持缺失值的,但是建模效果可能会差于处理后建模。
边栏推荐
- Web penetration experience summary ing
- 如何为超级通胀做好准备
- Inherit, override, overload
- 0616项目二结束~~总总结
- 0629 ~ SaaS platform design ~ global exception handling
- A practical scheme of realizing 0.5px on mobile terminal
- 关于接口的写法 1链式判读 ?. 2方法执行 (finally)一定会执行
- Maximum sum and promotion of continuous subarrays (2)
- 0625~<config>-<bus>
- 2022最新短视频去水印解析API接口分享
猜你喜欢

【“码”力全开,“章”显实力】2022年第1季Task挑战赛贡献者榜单

第五届数字中国建设峰会在福建福州开幕
![[OBS] dependency Library: x264 vs Build](/img/24/4caea5dc6ff092a3161f43b6026d25.png)
[OBS] dependency Library: x264 vs Build
Go to bed capacity exchange

【刷题记录】20. 有效的括号

The 5th Digital China Construction summit opened in Fuzhou, Fujian

Emerging potential of interactive virtual reality technology in drug discovery

继承与派生

【OpenCV】—阈值化

Use of jumpserver
随机推荐
A practical scheme of realizing 0.5px on mobile terminal
初识Pytorch和Pytorch环境配置
文件上传漏洞——.user.ini与.htaccess
Int8 & int8, have you ever stumbled like this?
pycharm配置opencv库
Alibaba /166 obtains the API instructions for all products in the store
Wu Enda writes: how to establish projects to adapt to AI career
[OBS] dependency Library: x264 vs Build
数组扁平化.flat(Infinity)
Simple test JS code
undefined reference to H5PTopen
Simulation implementation vector
Go language interface and type
数组常用方法(2)
0621~ES&Lucene
Framework introduction
New can also create objects. Why do you need factory mode?
0612~quartz定时器框架
去不图床容量兑换
In depth analysis of the famous Alibaba cloud log4j vulnerability