机器学习实战:这里没有艰深晦涩的数学理论,我们将用简单的案例和大量的示例代码,向大家介绍机器学习的核心概念。我们的目标是教会大家用Python构建机器学习模型,解决现实世界的难题。

现实和教程最大的区别之一是,现实的数据集是混乱不堪的,数据科学家90%的时间都花在数据预处理上,其中就包括处理缺失值(missing values)。

Python做数据科学项目时通常用Pandas存储数据,所以我们重点讨论如何用Pandas处理缺失值。

1. 如何表示缺失值

用python处理数据主要通过numpy和pandas实现,所以首先要理解它们是如何表示缺失值的。

import pandas as pd
import numpy as np

Python用None表示缺失值,如果创建一个包含None的列表,是无法直接进行数值运算的,调用mean,sum等数值计算函数会引发’TypeError’.

l = [1, 2, None, 4]
l
[1, 2, None, 4]

创建一个包含None的numpy数组。

nums = np.array([1, 2, None, 4])
nums
array([1, 2, None, 4], dtype=object)

dtype=object,当数组包含None,numpy将数组的类型推断为’object’,即包含原生的python对象,同样无法进行数值运算。

try:np.sum(nums)
except Exception as e:print(e)
unsupported operand type(s) for +: 'int' and 'NoneType'

Numpy提供了一种特殊的数据类型,np.nan,表示缺失值,就本质上而言,它是浮点值。

arr = np.array([1, 2, np.nan, 4])
arr
array([ 1.,  2., nan,  4.])

包含np.nan的数组可以进行数值运算而不引发类型异常。

需要明确一点,涉及np.nan的运算结果总是np.nan,忽略缺失值才能得到正确的结果,numpy提供了一系列针对缺失值的数值运算函数。

# 结果是np.nan
print(np.mean(arr), np.sum(arr), np.min(arr), np.max(arr))# 计算时剔除np.nan,获得正确结果
print(np.nanmean(arr), np.nansum(arr), np.nanmin(arr), np.nanmax(arr))
nan nan nan nan
2.3333333333333335 7.0 1.0 4.0

在pandas中可以同时使用None和np.nan表示缺失值。

创建pandas数组时,如果数组中包含None,会自动转换为np.nan,不仅如此,其它整数也被自动转化为浮点值。

ser = pd.Series([1, 2, None, np.nan])
ser
0    1.0
1    2.0
2    NaN
3    NaN
dtype: float64

2. 处理缺失值

从上面的讨论可知,pandas使用None和np.nan表示缺失值,pd.Series和pd.DataFrame均提供了几个常用方法来侦测,剔除和填充缺失值,它们分别是:

  • isnull()
  • notnull()
  • dropna()
  • fillna()
# 先创建一个包含缺失值的series
ser = pd.Series([1, None, 3, np.nan, 5])
ser
0    1.0
1    NaN
2    3.0
3    NaN
4    5.0
dtype: float64

2.1 侦测缺失值

isnull()返回布尔数组,如果元素是None或np.nan,返回True,否则返回False。

ser.isnull()
0    False
1     True
2    False
3     True
4    False
dtype: bool

notnull()是isnull()的逆运算,可以用于筛选非缺失的数据。

ser[ser.notnull()]
0    1.0
2    3.0
4    5.0
dtype: float64

2.2 剔除缺失值

在剔除缺失值之前,最好先理解缺失值产生的原因。导致数据缺失的原因有很多,例如记录员忘记录入数据,或由于条件限制无法获得真实的观测值等。

剔除缺失值可能是最简单的处理方法,但只有在数据集足够大,缺失数据的比例在可控范围内的时候才推荐使用。

# 先创建包含缺失值的数据框
arr = np.array([[1, 2, np.nan],[np.nan, np.nan, np.nan],[np.nan, 4, 5],[6, 7, 8]
])
df = pd.DataFrame(arr, columns=["A", "B", "C"])
df
A B C
0 1.0 2.0 NaN
1 NaN NaN NaN
2 NaN 4.0 5.0
3 6.0 7.0 8.0

dropna()默认剔除包含任意缺失值的行,通过指定axis=1可以对列进行操作。

# 剔除包含任意缺失值的行
df.dropna()# 剔除包含任意缺失值的列
# df.dropna(axis=1)
A B C
3 6.0 7.0 8.0

指定参数how=“all”,剔除全是缺失值的行。

df.dropna(how="all")
A B C
0 1.0 2.0 NaN
2 NaN 4.0 5.0
3 6.0 7.0 8.0

如果想保留缺失值较少的行/列,可以指定’thresh’。

# 当非缺失值的数量大于等于thresh,保留该行
df.dropna(thresh=2)
A B C
0 1.0 2.0 NaN
2 NaN 4.0 5.0
3 6.0 7.0 8.0

2.3 填充缺失值

有时候我们想填充而不是剔除缺失值,在调用fillna()之前,首先要明确用什么数据进行填充,下面介绍几种常用方法。

最简单的方法是用单一值填充,例如0,但这种方法的实用性不强。

df.fillna(0)
A B C
0 1.0 2.0 0.0
1 0.0 0.0 0.0
2 0.0 4.0 5.0
3 6.0 7.0 8.0

向前填充或向后填充,即用前面(后面)的观测值填充后面(前面)的缺失值。

# ffill表示forward fill, 向前填充
df.fillna(method="ffill")
A B C
0 1.0 2.0 NaN
1 1.0 2.0 NaN
2 1.0 4.0 5.0
3 6.0 7.0 8.0
# bfill表示backward fill, 向后填充
df.fillna(method="bfill")
A B C
0 1.0 2.0 5.0
1 6.0 4.0 5.0
2 6.0 4.0 5.0
3 6.0 7.0 8.0

用变量的推断值填充,这可能是最实用的方法,例如计算数值特征的均值,中位数或众数,用这些统计量填充缺失值。

# 计算每一列的均值,用均值填充
df.fillna(df.mean())
A B C
0 1.0 2.000000 6.5
1 3.5 4.333333 6.5
2 3.5 4.000000 5.0
3 6.0 7.000000 8.0

如果喜欢我们的文章,记得点赞和收藏哦,我们每天都会为大家带来Python,数据科学和量化交易的精品内容。

【关于我们】

蜂鸟数据:国内领先的金融数据API提供商。

蜂鸟数据团队由业界顶尖的数据工程师,数据科学家和宽客组成,我们正努力构建一个强大的金融数据库,并提供API接口,目标是令金融数据开源化和平民化。

浏览并测试我们接口吧,目前覆盖股票,外汇,商品期货,数字货币和宏观经济领域,包括实时报价(tick)和历史数据(分钟),提供REST API和Websocket两种接入方式,能够满足金融分析师,量化交易和理财app的需求。

需要金融数据?利用蜂鸟API将数据整合到您的应用

如果您准备好了,请登录蜂鸟官网,注册免费获取API密钥,然后开始探索我们的金融数据库吧。

Python机器学习实战:如何用Pandas处理缺失值相关推荐

  1. Python 机器学习实战 —— 无监督学习(下)

    前言 在上篇< Python 机器学习实战 -- 无监督学习(上)>介绍了数据集变换中最常见的 PCA 主成分分析.NMF 非负矩阵分解等无监督模型,举例说明使用使用非监督模型对多维度特征 ...

  2. 送书 | 《人工智能数学基础与Python机器学习实战》

    又到了每周三的送书时刻啦!今天给大家带来的是<人工智能数学基础与Python机器学习实战>! (文末查看送书规则) 简介 通常来说,人工智能(Artificial Intelligence ...

  3. Python 机器学习实战 —— 无监督学习(上)

    ​​​ 前言 在上篇<Python 机器学习实战 -- 监督学习>介绍了 支持向量机.k近邻.朴素贝叶斯分类 .决策树.决策树集成等多种模型,这篇文章将为大家介绍一下无监督学习的使用. 无 ...

  4. Python机器学习实战:掌握这四个特征选择方法,提升模型预测性能

    机器学习实战:这里没有艰深晦涩的数学理论,我们将用简单的案例和大量的示例代码,向大家介绍机器学习的核心概念.我们的目标是教会大家用Python构建机器学习模型,解决现实世界的难题. 当数据集包含很多特 ...

  5. 万字长文,Python数据分析实战,使用Pandas进行数据分析

    文章目录 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类人,我 ...

  6. python机器学习实战(一)

    原文链接:www.cnblogs.com/fydeblog/p/7140974.html 前言 这篇notebook是关于机器学习中监督学习的k近邻算法,将介绍2个实例,分别是使用k-近邻算法改进约会 ...

  7. Python数据分析实战基础 | 初识Pandas

    这是Python数据分析实战基础的第一篇内容,主要是和Pandas来个简单的邂逅.已经熟练掌握Pandas的同学,可以加快手速滑动浏览或者直接略过本文. 01  重要的前言 这段时间和一些做数据分析的 ...

  8. 《Python数据分析实战》day2: Pandas中取得某行或者是某列的一点思考

    今天看了<Python数据分析实战>这本书的第四章:Pandas的简介的部分,大概看了一半,在实践代码的时候发现了jupyter notebook提示warning,研究了一下有了一些自己 ...

  9. 团队拙作《Python机器学习实战》

    之前看国内外的 Python 机器学习的书,鲜有将机器学习到底怎么做人脸识别.怎么做风险控制.怎么做 OCR 算法模型列出的,并且真正的一个 Python 应用,不止是从机器学习库中导入一下配置一下参 ...

最新文章

  1. 【机器学习-学习笔记】单/多变量线性回归、多项式回归、逻辑回归、过拟合、正则化
  2. java 代码效率_Java效率
  3. 【运筹学】线性规划 人工变量法 ( 单纯形法总结 | 人工变量法引入 | 人工变量法原理分析 | 人工变量法案例 )
  4. 跳槽必看:产品经理面试试题汇总
  5. 纪中A组模拟赛总结(2021.7.19)
  6. php如何判断是否关注,php如何判断用户是否关注微信公众号
  7. 本地上传代码到github仓库
  8. 一些经典的前端文章合集地址
  9. vba 定义类_工作表中如何响应自定义事件
  10. cbv、resful、APIView和序列化组件
  11. deepin linux固态硬盘安装教程,如何安装深度deepin 国产Linux教程 主要操作如下
  12. android edittext怎样获取输入的内容,如何获取edittext中输入的内容?
  13. 住房公积金约定提取业务问答
  14. Delphi判断是否为周末?今天是周几?
  15. 你好,你算什么东西?
  16. matlab分段函数
  17. 看板管理对项目管理有什么帮助?
  18. (附源码)计算机毕业设计ssm毕业生导师双选系统
  19. linux系统搭建redis cluster集群 切片集群 教程 centOS系统redis6
  20. 爬虫进阶教程:抖音APP无水印视频批量下载

热门文章

  1. 教师计算机返岗实践方案,国培计划返岗实践方案(word版)
  2. 5906. 【NOIP2018模拟10.15】传送门 (portal)
  3. ctf-web-No one knows regex better than me
  4. [Unity Mirror] 作弊与反作弊
  5. 随笔 | 写在七月末的这一天
  6. 选择合适的iOS培训机构有技巧
  7. 科普向 | Lucene,Solr,Elasticsearch之间的区别和联系
  8. 新手淘宝卖家不知道如何运营店铺,精细化运营让你走的更远
  9. 计算机大赛响亮口号,登山比赛团队名称和团队口号
  10. L1-036 A乘以B Python