python sklearn与pandas实现缺失值数据预处理流程详解

注:代码用 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的出现是为了解决各种替换用的,缺失值只是其中一种应用而已。

到此这篇关于python sklearn与pandas实现缺失值数据预处理流程详解的文章就介绍到这了,更多相关python 数据预处理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 一文搞懂Python Sklearn库使用

    目录 1.LabelEncoder 2.OneHotEncoder 3.sklearn.model_selection.train_test_split随机划分训练集和测试集 4.pipeline 5 perdict 直接返回预测值 6 sklearn.metrics中的评估方法 7 GridSearchCV 8 StandardScaler 9 PolynomialFeatures 4.10+款机器学习算法对比 4.1 生成数据 4.2 八款主流机器学习模型 4.3 树模型 - 随机森林 4.

  • Python sklearn库三种常用编码格式实例

    目录 OneHotEncoder独热编码实例 LabelEncoder标签编码实例 OrdinalEncoder特征编码实例 OneHotEncoder独热编码实例 class sklearn.preprocessing.OneHotEncoder(*, categories='auto', drop=None, sparse=True, dtype=<class 'numpy.float64'>, handle_unknown='error') 目的:将分类要素编码为one-hot数字数组

  • python库sklearn常用操作

    目录 前言 一.MinMaxScaler 前言 sklearn是python的重要机器学习库,其中封装了大量的机器学习算法,如:分类.回归.降维以及聚类:还包含了监督学习.非监督学习.数据变换三大模块.sklearn拥有完善的文档,使得它具有了上手容易的优势:并它内置了大量的数据集,节省了获取和整理数据集的时间.因而,使其成为了广泛应用的重要的机器学习库. sklearn是一个无论对于机器学习还是深度学习都必不可少的重要的库,里面包含了关于机器学习的几乎所有需要的功能,因为sklearn库的内容

  • python pandas 数据排序的几种常用方法

    前言: pandas中排序的几种常用方法,主要包括sort_index和sort_values. 基础数据: import pandas as pd import numpy as np data = { 'brand':['Python', 'C', 'C++', 'C#', 'Java'], 'B':[4,6,8,12,10], 'A':[10,2,5,20,16], 'D':[6,18,14,6,12], 'years':[4,1,1,30,30], 'C':[8,12,18,8,2] }

  • python机器学习sklearn实现识别数字

    目录 简介 数据集 数据处理 数据分离 训练数据 数据可视化 完整代码 简介 本文主要简述如何通过sklearn模块来进行预测和学习,最后再以图表这种更加直观的方式展现出来 数据集 学习数据 预测数据 数据处理 数据分离 因为我们打开我们的的学习数据集,最后一项是我们的真实数值,看过小唐上一篇的人都知道,老规矩先进行拆分,前面的特征放一块,后面的真实值放一块,同时由于数据没有列名,我们选择使用iloc[]来实现分离 def shuju(tr_path,ts_path,sep='\t'): tra

  • Python Pandas读写txt和csv文件的方法详解

    目录 一.文本文件 1. read_csv() 2. to_csv() 一.文本文件 文本文件,主要包括csv和txt两种等,相应接口为read_csv()和to_csv(),分别用于读写数据 1. read_csv() 格式代码: pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False

  • Python sklearn分类决策树方法详解

    目录 决策树模型 决策树学习 使用Scikit-learn进行决策树分类 决策树模型   决策树(decision tree)是一种基本的分类与回归方法.   分类决策树模型是一种描述对实例进行分类的树形结构.决策树由结点(node)和有向边(directed edge)组成.结点有两种类型:内部结点(internal node)和叶结点(leaf node).内部结点表示一个特征或属性,叶结点表示一个类.   用决策树分类,从根结点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子

  • Python sklearn转换器估计器和K-近邻算法

    目录 一.转换器和估计器 1. 转换器 2.估计器(sklearn机器学习算法的实现) 3.估计器工作流程 二.K-近邻算法 1.K-近邻算法(KNN) 2. 定义 3. 距离公式 三.电影类型分析 1 问题 2 K-近邻算法数据的特征工程处理 四.K-近邻算法API 1.步骤 2.代码 3.结果及分析 五.K-近邻总结 一.转换器和估计器 1. 转换器 想一下之前做的特征工程的步骤? 1.实例化 (实例化的是一个转换器类(Transformer)) 2.调用fit_transform(对于文档

  • Python 第三方库 Pandas 数据分析教程

    目录 Pandas导入 Pandas与numpy的比较 Pandas的Series类型 Pandas的Series类型的创建 Pandas的Series类型的基本操作 pandas的DataFrame类型 pandas的DataFrame类型创建 Pandas的Dataframe类型的基本操作 pandas索引操作 pandas重新索引 pandas删除索引 pandas数据运算 算术运算 Pandas数据分析 pandas导入与导出数据 导入数据 导出数据 Pandas查看.检查数据 Pand

  • python sklearn与pandas实现缺失值数据预处理流程详解

    注:代码用 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),colu

  • 对python抓取需要登录网站数据的方法详解

    scrapy.FormRequest login.py class LoginSpider(scrapy.Spider): name = 'login_spider' start_urls = ['http://www.login.com'] def parse(self, response): return [ scrapy.FormRequest.from_response( response, # username和password要根据实际页面的表单的name字段进行修改 formdat

  • Python疫情确诊折线图实现数据可视化实例详解

    目录 案例描述 实现步骤 一.导入模块 二.读取文件内容 三.json转换python 四.获取需要用到的数据 五.生成图表 六.关闭文件 案例描述 根据可参考数据,实现对疫情确诊人数数据的可视化. 利用json转换工具,将数据格式化,需要取出下面两部分的内容. 可视化效果图: 实现步骤 一.导入模块 导入可能用到的模块 import json from pyecharts.charts import Line 二.读取文件内容 打开相应的文件,使用变量us_data保存文件的内容 f_us =

  • Python利用pandas处理Excel数据的应用详解

    最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做自动化测试的时候,如果涉及到数据的读取和存储,那么而利用pandas就会非常高效,基本上3行代码可以搞定你20行代码的操作!该教程仅仅限于结合柠檬班的全栈自动化测试课程来讲解下pandas在项目中的应用,这仅仅只是冰山一角,希望大家可以踊跃的去尝试和探索! 一.安装环境: 1:pandas依赖处理Excel的xlrd模块,所以我们需要提前安装这个,安装命令

  • 对pandas处理json数据的方法详解

    今天展示一个利用pandas将json数据导入excel例子,主要利用的是pandas里的read_json函数将json数据转化为dataframe. 先拿出我要处理的json字符串: strtext='[{"ttery":"min","issue":"20130801-3391","code":"8,4,5,2,9","code1":"297734529

  • Python数据分析库pandas高级接口dt的使用详解

    Series对象和DataFrame的列数据提供了cat.dt.str三种属性接口(accessors),分别对应分类数据.日期时间数据和字符串数据,通过这几个接口可以快速实现特定的功能,非常快捷. 今天翻阅pandas官方文档总结了以下几个常用的api. 1.dt.date 和 dt.normalize(),他们都返回一个日期的 日期部分,即只包含年月日.但不同的是date返回的Series是object类型的,normalize()返回的Series是datetime64类型的. 这里先简单

  • python数据预处理 :数据共线性处理详解

    何为共线性: 共线性问题指的是输入的自变量之间存在较高的线性相关度.共线性问题会导致回归模型的稳定性和准确性大大降低,另外,过多无关的维度计算也很浪费时间 共线性产生原因: 变量出现共线性的原因: 数据样本不够,导致共线性存在偶然性,这其实反映了缺少数据对于数据建模的影响,共线性仅仅是影响的一部分 多个变量都给予时间有共同或相反的演变趋势,例如春节期间的网络销售量和销售额都相对与正常时间有下降趋势. 多个变量存在一定的推移关系,但总体上变量间的趋势一致,只是发生的时间点不一致,例如广告费用和销售

  • python 删除excel表格重复行,数据预处理操作

    使用python删除excel表格重复行. # 导入pandas包并重命名为pd import pandas as pd # 读取Excel中Sheet1中的数据 data = pd.DataFrame(pd.read_excel('test.xls', 'Sheet1')) # 查看读取数据内容 print(data) # 查看是否有重复行 re_row = data.duplicated() print(re_row) # 查看去除重复行的数据 no_re_row = data.drop_d

  • python神经网络学习数据增强及预处理示例详解

    目录 学习前言 处理长宽不同的图片 数据增强 1.在数据集内进行数据增强 2.在读取图片的时候数据增强 3.目标检测中的数据增强 学习前言 进行训练的话,如果直接用原图进行训练,也是可以的(就如我们最喜欢Mnist手写体),但是大部分图片长和宽不一样,直接resize的话容易出问题. 除去resize的问题外,有些时候数据不足该怎么办呢,当然要用到数据增强啦. 这篇文章就是记录我最近收集的一些数据预处理的方式 处理长宽不同的图片 对于很多分类.目标检测算法,输入的图片长宽是一样的,如224,22

  • python机器学习算法与数据降维分析详解

    目录 一.数据降维 1.特征选择 2.主成分分析(PCA) 3.降维方法使用流程 二.机器学习开发流程 1.机器学习算法分类 2.机器学习开发流程 三.转换器与估计器 1.转换器 2.估计器 一.数据降维 机器学习中的维度就是特征的数量,降维即减少特征数量.降维方式有:特征选择.主成分分析. 1.特征选择 当出现以下情况时,可选择该方式降维: ①冗余:部分特征的相关度高,容易消耗计算性能 ②噪声:部分特征对预测结果有影响 特征选择主要方法:过滤式(VarianceThreshold).嵌入式(正

随机推荐