python sklearn与pandas实现缺失值数据预处理流程详解
作者:talle2021 发布时间:2023-05-31 14:47:56
注:代码用 jupyter notebook跑的,分割线线上为代码,分割线下为运行结果
1.导入库生成缺失值
通过pandas生成一个6行4列的矩阵,列名分别为'col1','col2','col3','col4',同时增加两个缺失值数据。
import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer
#生成缺失数据
df=pd.DataFrame(np.random.randn(6,4),columns=['col1','col2','col3','col4']) #生成一份数据
#增加缺失值
df.iloc[1:2,1]=np.nan
df.iloc[4,3]=np.nan
df
col1 col2 col3 col4
0 -0.480144 1.463995 0.454819 -1.531419
1 -0.418552 NaN -0.931259 -0.534846
2 -0.028083 -0.420394 0.925346 0.975792
3 -0.144064 -0.811569 -0.013452 0.110480
4 -0.966490 -0.822555 0.228038 NaN
5 -0.017370 -0.538245 -2.083904 0.230733
2.查看哪些值缺失(第2行第2列,第5行第4列)
nan_all=df.isnull() #获得所有数据中的nan
nan_all
col1 col2 col3 col4
0 False False False False
1 False True False False
2 False False False False
3 False False False False
4 False False False True
5 False False False False
3 any()方法来查找含有至少1个缺失值的列,all()方法来查找全部缺失值的列
#使用any方法
nan_col1=df.isnull().any() #获得含有nan的列
print(nan_col1)
col1 False
col2 True
col3 False
col4 True
dtype: bool
#使用all方法
nan_col2=df.isnull().all() #获得全部为nan的列
print(nan_col2)
col1 False
col2 False
col3 False
col4 False
dtype: bool
4.法一:直接丢弃缺失值
df1=df.dropna()#直接丢弃含有nan的行记录
df1
col1 col2 col3 col4
0 -0.480144 1.463995 0.454819 -1.531419
2 -0.028083 -0.420394 0.925346 0.975792
3 -0.144064 -0.811569 -0.013452 0.110480
5 -0.017370 -0.538245 -2.083904 0.230733
5.法二:使用sklearn将缺失值替换为特定值
首先通过SimpleImputer创建一个预处理对象,缺失值替换方法默认用均值替换,及strategy=mean,还可以使用中位数median,众数most_frequent进行替换,接着使用预处理对象的fit_transform对df进行处理,代码如下:
#使用sklearn将缺失值替换为特定值
nan_mean=SimpleImputer(strategy='mean') #用均值填补
nan_median=SimpleImputer(strategy='median') #用中位数填补
nan_0=SimpleImputer(strategy='constant',fill_value=0) #用0填补
#应用模型
nan_mean_result=nan_mean.fit_transform(df)
nan_median_result=nan_median.fit_transform(df)
nan_0_result=nan_0.fit_transform(df)
print(nan_mean_result)
print(nan_median_result)
print(nan_0_result)
[-0.48014389 1.46399462 0.45481856 -1.53141863]
[-0.4185523 -0.22575384 -0.93125874 -0.53484561]
[-0.02808329 -0.42039426 0.925346 0.97579191]
[-0.14406438 -0.81156913 -0.0134516 0.11048025]
[-0.96649028 -0.82255505 0.22803842 -0.14985173]
[-0.01737047 -0.53824538 -2.0839036 0.23073341]
[-0.48014389 1.46399462 0.45481856 -1.53141863]
[-0.4185523 -0.53824538 -0.93125874 -0.53484561]
[-0.02808329 -0.42039426 0.925346 0.97579191]
[-0.14406438 -0.81156913 -0.0134516 0.11048025]
[-0.96649028 -0.82255505 0.22803842 0.11048025]
[-0.01737047 -0.53824538 -2.0839036 0.23073341]
[-0.48014389 1.46399462 0.45481856 -1.53141863]
[-0.4185523 0. -0.93125874 -0.53484561]
[-0.02808329 -0.42039426 0.925346 0.97579191]
[-0.14406438 -0.81156913 -0.0134516 0.11048025]
[-0.96649028 -0.82255505 0.22803842 0. ]
[-0.01737047 -0.53824538 -2.0839036 0.23073341]
6.法三:使用pandas将缺失值替换为特定值
pandas对缺失值处理方法是df.fillna(),该方法的两个主要参数是value和method。前者通过固定或手动指定的值替换缺失值,后者使用pandas提供的方法替换缺失值。以下是method支持的方法:
(1)pad和ffill:使用前面的值替换缺失值
(2)backfill和bfill:使用后面的值替换缺失值
(3)大多数情况下用均值、众数、中位数的方法较为常用
#使用pandas将缺失值替换为特定值
nan_result_pd1=df.fillna(method='backfill')
nan_result_pd2=df.fillna(method='bfill',limit=1)#用后面的值替换缺失值,限制每列只能替换一个缺失值
nan_result_pd3=df.fillna(method='pad')
nan_result_pd4=df.fillna(0)
nan_result_pd5=df.fillna({'col2':1.1,'col4':1.2}) #手动指定两个缺失值分别为1.1,1.2
nan_result_pd6=df.fillna(df.mean()['col2':'col4'])
nan_result_pd7=df.fillna(df.median()['col2':'col4'])
print(nan_result_pd1)
print(nan_result_pd2)
print(nan_result_pd3)
print(nan_result_pd4)
print(nan_result_pd5)
print(nan_result_pd6)
print(nan_result_pd7)
col1 col2 col3 col4
0 -0.480144 1.463995 0.454819 -1.531419
1 -0.418552 -0.420394 -0.931259 -0.534846
2 -0.028083 -0.420394 0.925346 0.975792
3 -0.144064 -0.811569 -0.013452 0.110480
4 -0.966490 -0.822555 0.228038 0.230733
5 -0.017370 -0.538245 -2.083904 0.230733
col1 col2 col3 col4
0 -0.480144 1.463995 0.454819 -1.531419
1 -0.418552 -0.420394 -0.931259 -0.534846
2 -0.028083 -0.420394 0.925346 0.975792
3 -0.144064 -0.811569 -0.013452 0.110480
4 -0.966490 -0.822555 0.228038 0.230733
5 -0.017370 -0.538245 -2.083904 0.230733
col1 col2 col3 col4
0 -0.480144 1.463995 0.454819 -1.531419
1 -0.418552 1.463995 -0.931259 -0.534846
2 -0.028083 -0.420394 0.925346 0.975792
3 -0.144064 -0.811569 -0.013452 0.110480
4 -0.966490 -0.822555 0.228038 0.110480
5 -0.017370 -0.538245 -2.083904 0.230733
col1 col2 col3 col4
0 -0.480144 1.463995 0.454819 -1.531419
1 -0.418552 0.000000 -0.931259 -0.534846
2 -0.028083 -0.420394 0.925346 0.975792
3 -0.144064 -0.811569 -0.013452 0.110480
4 -0.966490 -0.822555 0.228038 0.000000
5 -0.017370 -0.538245 -2.083904 0.230733
col1 col2 col3 col4
0 -0.480144 1.463995 0.454819 -1.531419
1 -0.418552 1.100000 -0.931259 -0.534846
2 -0.028083 -0.420394 0.925346 0.975792
3 -0.144064 -0.811569 -0.013452 0.110480
4 -0.966490 -0.822555 0.228038 1.200000
5 -0.017370 -0.538245 -2.083904 0.230733
col1 col2 col3 col4
0 -0.480144 1.463995 0.454819 -1.531419
1 -0.418552 -0.225754 -0.931259 -0.534846
2 -0.028083 -0.420394 0.925346 0.975792
3 -0.144064 -0.811569 -0.013452 0.110480
4 -0.966490 -0.822555 0.228038 -0.149852
5 -0.017370 -0.538245 -2.083904 0.230733
col1 col2 col3 col4
0 -0.480144 1.463995 0.454819 -1.531419
1 -0.418552 -0.538245 -0.931259 -0.534846
2 -0.028083 -0.420394 0.925346 0.975792
3 -0.144064 -0.811569 -0.013452 0.110480
4 -0.966490 -0.822555 0.228038 0.110480
5 -0.017370 -0.538245 -2.083904 0.230733
另外,如果是直接替换为特定值,也可以考虑用pandas的replace功能,例如本示例可直接使用df.replace(np.nan,0),这种方法简单粗暴,但也能达到效果。当然replace的出现是为了解决各种替换用的,缺失值只是其中一种应用而已。
来源:https://blog.csdn.net/weixin_60200880/article/details/126988094
猜你喜欢
- 1、简介AI 聊天机器人使用自然语言处理 (NLP) 来帮助用户通过文本、图形或语音与 Web 服务或应用进行交互。聊天机器人可以理解自然人
- 1.颜色空间转换(RGB转HSV)为了较准确的调红色和绿色的HSV,我使用cv2.createTrackbar()函数创建了六个滚动条#创建
- 一、需求分析我们首先有一个成绩表单,但是学生的成绩是按照学号进行排序的,现在,我们希望清晰明了的知道每一个学生的名次,并且需要将学生按照成绩
- 本文实例讲述了python图像处理之反色实现方法。分享给大家供大家参考。具体如下:我们先加载一个8位灰度图像每一个像素对应的灰度值从0-25
- 下面是我已经证实可用的自动备份的方法. 1、打开企业管理器->管理->sql server代理 2、新建一个作业,作业名称随便取
- 本文实例讲述了python求众数问题的方法,是一个比较典型的应用。分享给大家供大家参考。具体如下:问题描述:多重集中重数最大的元素称为众数.
- 前言Sphinx是一款支持多种编程语言的文档生成工具,在python项目开发过程中,可以帮助开发者根据需求生成相应的说明文档,拿今天我们就基
- 一、去除空格strip()" xyz ".strip() &n
- Thinkphp5微信小程序获取用户信息接口的实例详解首先在官网下载示例代码, 选php的,这里有个坑 官方的php文件,编码是UTF-8+
- python版本:python 3.9 mutagen版本:1.46.0mutagen是一个处理音频元数据的pytho
- JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的。而cookie是运行在
- pytorch读取图像数据转成opencv格式方法:先转成numpy通用的格式,再将其转换成opencv格式。pytorch读取的数据使用l
- 本文实例讲述了Django发送html邮件的方法。分享给大家供大家参考。具体如下:在Django中,发送邮件非常的方便,一直没有时间,今天来
- 拿到需求之后,发现这两个网站的MYSQL数据库都不能远程访问(安全第一吧)。于是想起了 平时使用的CSV文件批量录入数据。于是 尝试使用CS
- 实例是具象化的类,它可以作为类访问所有静态绑定到类上的属性,包括类变量与方法,也可以作为实例访问动态绑定到实例上的属性。实例1:class
- 本文实例为大家分享了Python/C++实现字符串逆序的具体代码,供大家参考,具体内容如下题目描述:将字符串逆序输出Python实现一:借助
- 原文作者:青女 附注及色样添加:Quester西式的色名及色样表,可以参见以下链接 (Java 类色彩兼容):http
- 在向大家详细介绍Linux mysql之前,首先让大家了解下Linux mysql,然后全面介绍Linux mysql,希望对大家有用。1.
- 本文主要介绍的是MySQL慢查询分析方法,前一段日子,我曾经设置了一次记录在MySQL数据库中对慢于1秒钟的SQL语句进行查询。想起来有几个
- Ruby中有一个很方便的Struct类,用来实现结构体。这样就不用费力的去定义一个完整的类来仅仅用作访问属性。class Dog <