• 登录
Skip to content

一起大数据-技术文章心得

一起大数据网由数据爱好者发起并维护,专注数据分析、挖掘、大数据相关领域的技术分享、交流。不定期组织爱好者聚会,期待通过跨行业的交流和碰撞,更好的推进各领域数据的价值落地。

Menu
  • 首页
  • 大数据案例
  • 数据&电子书
  • 视频
    • Excel视频
    • VBA视频
    • Mysql视频
    • 统计学视频
    • SPSS视频
    • R视频
    • SAS视频
    • Python视频
    • 数据挖掘视频
    • 龙星计划-数据挖掘
    • 大数据视频
    • Machine Learning with Python
  • 理论
    • 统计学
    • 数据分析
    • 机器学习
    • 大数据
  • 软件
    • Excel
    • Modeler
    • Python
    • R
    • SAS
    • SPSS
    • SQL
    • PostgreSQL
    • KNIME
  • 技术教程
    • SQL教程
    • SPSS简明教程
    • SAS教程
    • The Little SAS Book
    • SAS EG教程
    • R语言教程
    • Python3教程
    • IT 技术速查手册
    • Data Mining With Python and R
    • SAS Enterprise Miner
  • 问答社区
  • 我要提问
Menu

【Python-机器学习】数据缺失值的插补:Sciki-Learn VS pandas

Posted on 2022年12月30日

常见的数据框缺失数据插补有3种方式:

  1. pandas 中简单粗暴的替换取值;
  2. pandas 中的 fillna 函数;
  3. sklearn 机器学习包中的 Imputer。

经过一番对比之后,先上结论:pandas 的 fillna 函数功能最多,使用最灵活,所以可考虑用为 Python 数据插补工具的首选。

1. 数据准备

(完整代码见文末)

2. 数据框缺失值的查看

这里从count我们可以看出,取值为1460(df的长度)则没有缺失,反之有缺失。
接下来,用 isnull 或者 isna 函数进行缺失值的查看。

可见,这里有两列出现了数据缺失,”Alley“列缺失严重。像这种级别的缺失的变量,能提供的信息过少,应该考虑删除。
接下来,我们改进下结果的展现方式。

”Alley”缺失的比例高达 94%。

上面 “LotFrontage” 变量是一个很常见的数值型变量,有18%的缺失值。接下来,我们用该变量的均值,对缺失的数据进行替代。

3. 第一种方式,pandas 中简单的手工插补

关键就是一个赋值的等号“=”。

4. 第二种方式,利用 pandas 的插补函数进行插补

同样是均值插补,用pandas自带的函数会让插补变得更加简洁。

除了具体某个值如均值(由函数生成)替代,pandas 还带有多种插补的函数:

  • 基于正则表达式对字符型变量进行替代;
  • 临近值替代;
  • 使用 object 对象进行替代 …

更完整的说明,可以参考 pandas 官网文档:Working with missing data

5. 第三种方式:Sciki-Learn 的 imputer

作为机器学习第一包Sciki-Learn自带有功能丰富的数据插补函数,不过用起来稍显复杂。
比如,不能直接对某一列数据进行插补。

转换之后的df1,是 ndarray 而不是 dataframe。这是因为, Sciki-Learn 这个包是基于 NumPy 而不是pandas (虽然pandas 也是基于NumPy)。
考虑将这个 ndarray 数据转换为 DataFrame。

数据插补已经完成。
但是,这么操作显然过于啰嗦,难道 Sciki-Learn就不能直接插补一列?
答案是可以的——通过将某列写成二维的形式:

事实证明,Sciki-Learn是可以直接插补一列,只不过要将该列写成二维的样子(两个方括号)。


小结:

  1. pandas 和 sklearn 都提供了多种数据插补方式,其中最简单的是均值替代;
  2. pandas 的数据插补是最方便的;
  3. sklearn 基于 NumPy,且只能插补二维的数据(单列需要写成二维的形式)。

附完整代码:

#!/usr/bin/env python

import pandas as pd
import numpy as np

df = pd.read_csv('/Users/brycewang/Desktop/Python-ML-AI/Python 101/ep1/ep1_train.csv')

df.shape

df = df.iloc[:, 0:10] 

df.shape

df.head()

from pandasgui import show
show(df)

df.info()

df.describe() 

df.isnull().head() 

df.isnull().sum()

df.isnull().sum() / len(df)

np.round(df.isnull().sum() / len(df), 2)

df.LotFrontage.describe()

df.LotFrontage.isnull().sum()

df.shape

df.LotFrontage.mean()

df["l"] = df.LotFrontage.copy()
df.l.describe()

df.l[df.l.isnull()] = df.l.mean()

df.l.isnull().sum()


df = pd.read_csv('/Users/brycewang/Desktop/Python-ML-AI/Python 101/ep1/ep1_train.csv')
df = df.iloc[:, 0:10] 
df["l"] = df.LotFrontage.copy()
df.l.describe()

np.round(df.l.isnull().sum() / len(df), 2)

df.l.fillna(df.l.mean(), inplace=True)  
np.round(df.l.isnull().sum() / len(df), 2)

df.l.describe() 

df = pd.read_csv('/Users/brycewang/Desktop/Python-ML-AI/Python 101/ep1/ep1_train.csv')
df = df.iloc[:, 0:10] 
df["l"] = df.LotFrontage.copy()
df.l.describe()
from sklearn.impute import SimpleImputer 

imputer = SimpleImputer(missing_values = np.nan, strategy = 'mean')
imputer


df1 = df[["l", "MSSubClass"]]
df1.describe()

df1 = imputer.fit_transform(df1) 

pd.DataFrame(df1, columns=["l", "MSSubClass"]).describe()

df = pd.read_csv('/Users/brycewang/Desktop/Python-ML-AI/Python 101/ep1/ep1_train.csv')
df = df.iloc[:, 0:10] 
df["l"] = df.LotFrontage.copy()
df.l.describe()

df[['l']] = imputer.fit_transform(df[['l']]) 

df.l.describe()

发表评论 取消回复

要发表评论,您必须先登录。

推荐访问


数据分析交流:数据分析交流
Excel学习: Excel学习交流
Python交流:一起学习Python(数据分
SQL交流:一起学习SQL(数据分析
微博:一起大数据

最新提问

  • SQL Chat
  • sql server 不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的表进行了更改或者启用了”阻止保存要求重新创建表的更改”选项。
  • 偏相关分析
  • 复相关系数
  • 【R语言】熵权法确定权重
  • 如何破解Excel VBA密码
  • 解决 vba 报错:要在64位系统上使用,请检查并更新Declare 语句
  • 基于 HuggingFace Transformer 的统一综合自然语言处理库
  • sqlserver分区表索引
  • Navicat连接数据库后不显示库、表、数据

文章标签

ARIMA CBC Excel GBDT KNN Modeler Mysql pandas PostgreSQL python python数据可视化 R SAS sklearn SPSS SQL SVM Tableau TensorFlow VBA 主成分分析 关联规则 决策树 协同过滤 可视化 因子分析 大数据 大数据分析 推荐系统 数据分析 数据可视化 数据挖掘 数据透视表 文本挖掘 时间序列 机器学习 深度学习 神经网络 结构方程 统计学 联合分析 聚类 聚类分析 逻辑回归 随机森林
©2023 一起大数据-技术文章心得 | Design: Newspaperly WordPress Theme