Python机器学习实战:如何用Pandas处理缺失值
机器学习实战:这里没有艰深晦涩的数学理论,我们将用简单的案例和大量的示例代码,向大家介绍机器学习的核心概念。我们的目标是教会大家用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处理缺失值相关推荐
- Python 机器学习实战 —— 无监督学习(下)
前言 在上篇< Python 机器学习实战 -- 无监督学习(上)>介绍了数据集变换中最常见的 PCA 主成分分析.NMF 非负矩阵分解等无监督模型,举例说明使用使用非监督模型对多维度特征 ...
- 送书 | 《人工智能数学基础与Python机器学习实战》
又到了每周三的送书时刻啦!今天给大家带来的是<人工智能数学基础与Python机器学习实战>! (文末查看送书规则) 简介 通常来说,人工智能(Artificial Intelligence ...
- Python 机器学习实战 —— 无监督学习(上)
前言 在上篇<Python 机器学习实战 -- 监督学习>介绍了 支持向量机.k近邻.朴素贝叶斯分类 .决策树.决策树集成等多种模型,这篇文章将为大家介绍一下无监督学习的使用. 无 ...
- Python机器学习实战:掌握这四个特征选择方法,提升模型预测性能
机器学习实战:这里没有艰深晦涩的数学理论,我们将用简单的案例和大量的示例代码,向大家介绍机器学习的核心概念.我们的目标是教会大家用Python构建机器学习模型,解决现实世界的难题. 当数据集包含很多特 ...
- 万字长文,Python数据分析实战,使用Pandas进行数据分析
文章目录 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类人,我 ...
- python机器学习实战(一)
原文链接:www.cnblogs.com/fydeblog/p/7140974.html 前言 这篇notebook是关于机器学习中监督学习的k近邻算法,将介绍2个实例,分别是使用k-近邻算法改进约会 ...
- Python数据分析实战基础 | 初识Pandas
这是Python数据分析实战基础的第一篇内容,主要是和Pandas来个简单的邂逅.已经熟练掌握Pandas的同学,可以加快手速滑动浏览或者直接略过本文. 01 重要的前言 这段时间和一些做数据分析的 ...
- 《Python数据分析实战》day2: Pandas中取得某行或者是某列的一点思考
今天看了<Python数据分析实战>这本书的第四章:Pandas的简介的部分,大概看了一半,在实践代码的时候发现了jupyter notebook提示warning,研究了一下有了一些自己 ...
- 团队拙作《Python机器学习实战》
之前看国内外的 Python 机器学习的书,鲜有将机器学习到底怎么做人脸识别.怎么做风险控制.怎么做 OCR 算法模型列出的,并且真正的一个 Python 应用,不止是从机器学习库中导入一下配置一下参 ...
最新文章
- 【机器学习-学习笔记】单/多变量线性回归、多项式回归、逻辑回归、过拟合、正则化
- java 代码效率_Java效率
- 【运筹学】线性规划 人工变量法 ( 单纯形法总结 | 人工变量法引入 | 人工变量法原理分析 | 人工变量法案例 )
- 跳槽必看:产品经理面试试题汇总
- 纪中A组模拟赛总结(2021.7.19)
- php如何判断是否关注,php如何判断用户是否关注微信公众号
- 本地上传代码到github仓库
- 一些经典的前端文章合集地址
- vba 定义类_工作表中如何响应自定义事件
- cbv、resful、APIView和序列化组件
- deepin linux固态硬盘安装教程,如何安装深度deepin 国产Linux教程 主要操作如下
- android edittext怎样获取输入的内容,如何获取edittext中输入的内容?
- 住房公积金约定提取业务问答
- Delphi判断是否为周末?今天是周几?
- 你好,你算什么东西?
- matlab分段函数
- 看板管理对项目管理有什么帮助?
- (附源码)计算机毕业设计ssm毕业生导师双选系统
- linux系统搭建redis cluster集群 切片集群 教程 centOS系统redis6
- 爬虫进阶教程:抖音APP无水印视频批量下载
热门文章
- 教师计算机返岗实践方案,国培计划返岗实践方案(word版)
- 5906. 【NOIP2018模拟10.15】传送门 (portal)
- ctf-web-No one knows regex better than me
- [Unity Mirror] 作弊与反作弊
- 随笔 | 写在七月末的这一天
- 选择合适的iOS培训机构有技巧
- 科普向 | Lucene,Solr,Elasticsearch之间的区别和联系
- 新手淘宝卖家不知道如何运营店铺,精细化运营让你走的更远
- 计算机大赛响亮口号,登山比赛团队名称和团队口号
- L1-036 A乘以B Python