pandas含有是数据分析工作变得更快更简单的高级数据结构和操作工具,是基于numpy构建的。

本章节的代码引入pandas约定为:import pandas as pd,另外import numpy as np也会用到。

官方介绍:pandas - Python Data Analysis Library (pydata.org)

7 缺失数据处理

缺失数据是数据分析中的常见现象。pandas使用浮点值NaN(Not a Number)表示浮点和非浮点数组中的缺失数据。它只是一个便于被检测出来的标记而已。python内置的None值也会被当作NA处理。

 1 >>> string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])
2 >>> string_data
3 0 aardvark
4 1 artichoke
5 2 NaN
6 3 avocado
7 dtype: object
8 >>> string_data.isnull()
9 0 False
10 1 False
11 2 True
12 3 False
13 dtype: bool
14 >>> string_data[0] = None
15 >>> string_data.isnull()
16 0 True
17 1 False
18 2 True
19 3 False
20 dtype: bool
21 >>>

NA处理方法。

方式 说明
dropna 根据各标签的值中是否存在缺失数据对轴标签进行过滤,可通过阈值调节对缺失值的容忍度,也就是thresh参数,如设置为2,则至少行(列)有两个非NaN值才保留。
fillna 用指定值或插值方法(如ffill或bfill)填充缺失数据
isnull 返回一个含有布尔值的对象,这些布尔值表示哪些值是缺失值NA,该对象的类型和源类型一样
notnull isnull的否定式

部分官方说明:

pandas.DataFrame.dropna — pandas 1.3.4 documentation (pydata.org)

pandas.DataFrame.fillna — pandas 1.3.4 documentation (pydata.org)

>>> string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])
>>> string_data
0 aardvark
1 artichoke
2 NaN
3 avocado
dtype: object >>> string_data.dropna()
0 aardvark
1 artichoke
3 avocado
dtype: object >>> string_data.fillna(value='haha')
0 aardvark
1 artichoke
2 haha
3 avocado
dtype: object

7.1 滤除缺失数据

过滤掉缺失数据的方法有多种,可通过dropna实现。

 1 >>> from numpy import nan as NA
2 >>> data = pd.Series([1, NA, 3.5, NA, 7])
3 >>> data.dropna()
4 0 1.0
5 2 3.5
6 4 7.0
7 dtype: float64
8 >>> data[data.isnull()]
9 1 NaN
10 3 NaN
11 dtype: float64
12 >>> data[data.notnull()]
13 0 1.0
14 2 3.5
15 4 7.0
16 dtype: float64

对于DataFrame,可能希望丢弃全NA或含有NA的行或列。

 1 >>> data = pd.DataFrame([[1, 1.6, 3], [1, NA, NA], [NA, NA, NA], [NA, 6.5, 3]])
2 >>> data
3 0 1 2
4 0 1.0 1.6 3.0
5 1 1.0 NaN NaN
6 2 NaN NaN NaN
7 3 NaN 6.5 3.0
8 >>>
9 >>> cleaned = data.dropna() #默认丢弃任何含有缺失值的行
10 >>> cleaned
11 0 1 2
12 0 1.0 1.6 3.0
13 >>> data.dropna(how='all') #只丢弃全为NA的行
14 0 1 2
15 0 1.0 1.6 3.0
16 1 1.0 NaN NaN
17 3 NaN 6.5 3.0
18 >>> data[4] = NA
19 >>> data
20 0 1 2 4
21 0 1.0 1.6 3.0 NaN
22 1 1.0 NaN NaN NaN
23 2 NaN NaN NaN NaN
24 3 NaN 6.5 3.0 NaN
25 >>> data.dropna(axis=1, how='all') #丢弃列,且列的所有值为NaN才丢弃
26 0 1 2
27 0 1.0 1.6 3.0
28 1 1.0 NaN NaN
29 2 NaN NaN NaN
30 3 NaN 6.5 3.0
31 >>>

另一个滤除DataFrame行的问题涉及到时间序列数据。如果只想留下一部分观测数据,可以用thresh参数实现。

 1 >>> df = pd.DataFrame(np.random.randn(7, 3))
2 >>> df
3 0 1 2
4 0 0.752301 1.360969 -0.474561
5 1 0.466749 0.563536 1.978575
6 2 0.223606 0.414722 0.094315
7 3 -1.687511 -0.116227 0.442363
8 4 0.705580 -0.131169 -0.868425
9 5 -0.158964 -0.164512 -0.937150
10 6 -0.281537 -1.579942 -0.562886
11 >>> df.loc[:4, 1] = NA
12 >>> df.loc[:2, 2] = NA
13 >>> df
14 0 1 2
15 0 0.752301 NaN NaN
16 1 0.466749 NaN NaN
17 2 0.223606 NaN NaN
18 3 -1.687511 NaN 0.442363
19 4 0.705580 NaN -0.868425
20 5 -0.158964 -0.164512 -0.937150
21 6 -0.281537 -1.579942 -0.562886
>>> df.dropna(thresh=2) #行至少有两个非NaN值才保留
0 1 2
3 -0.845402 NaN -0.037411
4 -0.563560 NaN -0.992985
5 0.227253 -1.649384 -0.754437
6 1.090384 0.980745 0.661543

7.2 填充缺失数据

fillna方法可实现将缺失值替换为一个常数值。

官方文档:pandas.DataFrame.fillna — pandas 1.3.4 documentation (pydata.org)

 1 >>> df
2 0 1 2
3 0 0.752301 NaN NaN
4 1 0.466749 NaN NaN
5 2 0.223606 NaN NaN
6 3 -1.687511 NaN 0.442363
7 4 0.705580 NaN -0.868425
8 5 -0.158964 -0.164512 -0.937150
9 6 -0.281537 -1.579942 -0.562886
10 >>> df.fillna(0)
11 0 1 2
12 0 0.752301 0.000000 0.000000
13 1 0.466749 0.000000 0.000000
14 2 0.223606 0.000000 0.000000
15 3 -1.687511 0.000000 0.442363
16 4 0.705580 0.000000 -0.868425
17 5 -0.158964 -0.164512 -0.937150
18 6 -0.281537 -1.579942 -0.562886
19 >>> df.fillna({1:0.5, 3:-1}) #第1列的NA替换为0.5,第3列的NA替换为-1
20 0 1 2
21 0 0.752301 0.500000 NaN
22 1 0.466749 0.500000 NaN
23 2 0.223606 0.500000 NaN
24 3 -1.687511 0.500000 0.442363
25 4 0.705580 0.500000 -0.868425
26 5 -0.158964 -0.164512 -0.937150
27 6 -0.281537 -1.579942 -0.562886
28 >>>

fillna默认会返回新对象。但也可以对现有对象进行就地修改。

 1 >>> _ = df.fillna(0, inplace=True)
2 >>> df
3 0 1 2
4 0 0.752301 0.000000 0.000000
5 1 0.466749 0.000000 0.000000
6 2 0.223606 0.000000 0.000000
7 3 -1.687511 0.000000 0.442363
8 4 0.705580 0.000000 -0.868425
9 5 -0.158964 -0.164512 -0.937150
10 6 -0.281537 -1.579942 -0.562886
11 >>>

对reindex有效的插值方法也可以用于fillna。

 1 >>> df = pd.DataFrame(np.random.randn(6, 3))
2 >>> df.loc[2:, 1] = NA
3 >>> df.loc[4:, 2] = NA
4 >>> df
5 0 1 2
6 0 -1.433489 0.162951 -0.664600
7 1 0.033722 -0.478252 0.480072
8 2 -0.000977 NaN -1.555649
9 3 -0.947501 NaN 0.089918
10 4 1.360481 NaN NaN
11 5 -0.966030 NaN NaN
12 >>> df.fillna(method='ffill')
13 0 1 2
14 0 -1.433489 0.162951 -0.664600
15 1 0.033722 -0.478252 0.480072
16 2 -0.000977 -0.478252 -1.555649
17 3 -0.947501 -0.478252 0.089918
18 4 1.360481 -0.478252 0.089918
19 5 -0.966030 -0.478252 0.089918
20 >>> df.fillna(method='ffill', limit=2)
21 0 1 2
22 0 -1.433489 0.162951 -0.664600
23 1 0.033722 -0.478252 0.480072
24 2 -0.000977 -0.478252 -1.555649
25 3 -0.947501 -0.478252 0.089918
26 4 1.360481 NaN 0.089918
27 5 -0.966030 NaN 0.089918

下表是fillna的参数参考。

参数 说明
value 用于填充缺失值的标量值或字典对象
method 插值方式,如果函数调用时未指定其他参数的话,默认为“ffill”
axis 带填充的轴,默认为axis=0
limit (对于向前或先后填充)可以连续填充的最大数量

pandas基础--缺失数据处理的更多相关文章

  1. Pandas基础用法-数据处理【全】-转

    完整资料:[数据挖掘入门介绍] (https://github.com/YouChouNoBB/data-mining-introduction) # coding=utf-8 # @author: ...

  2. Pandas | 17 缺失数据处理

    数据丢失(缺失)在现实生活中总是一个问题. 机器学习和数据挖掘等领域由于数据缺失导致的数据质量差,在模型预测的准确性上面临着严重的问题. 在这些领域,缺失值处理是使模型更加准确和有效的重点. 使用重构 ...

  3. Pandas缺失数据处理

    Pandas缺失数据处理 Pandas用np.nan代表缺失数据 reindex() 可以修改 索引,会返回一个数据的副本: df1 = df.reindex(index=dates[0:4], co ...

  4. Python数据分析入门之pandas基础总结

    Pandas--"大熊猫"基础 Series Series: pandas的长枪(数据表中的一列或一行,观测向量,一维数组...) Series1 = pd.Series(np.r ...

  5. 利用Python进行数据分析(9) pandas基础: 汇总统计和计算

    pandas 对象拥有一些常用的数学和统计方法.   例如,sum() 方法,进行列小计:   sum() 方法传入 axis=1 指定为横向汇总,即行小计:   idxmax() 获取最大值对应的索 ...

  6. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  7. Pandas基础学习与Spark Python初探

    摘要:pandas是一个强大的Python数据分析工具包,pandas的两个主要数据结构Series(一维)和DataFrame(二维)处理了金融,统计,社会中的绝大多数典型用例科学,以及许多工程领域 ...

  8. pandas 基础用法

    pandas 是一个基于 Numpy 构建, 强大的数据分析工具包 主要功能 独特的数据结构 DataFrame, Series 集成时间序列功能 提供丰富的数学运算操作 灵活处理缺失数据 Serie ...

  9. 数据可视化基础专题(八):Pandas基础(七) 数据清洗与预处理相关

    1.数据概览 第一步当然是把缺失的数据找出来, Pandas 找缺失数据可以使用 info() 这个方法(这里选用的数据源还是前面一篇文章所使用的 Excel ,小编这里简单的随机删除掉几个数据) i ...

  10. 利用Python进行数据分析(12) pandas基础: 数据合并

    pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...

随机推荐

  1. pytest-fixture使用

    fixture(scope='function',params=None,autouse=False,ids=None,name=None):scope:设置作用域:params:传参数,以列表进行存 ...

  2. Lattice下载器高速编程器HW-USBN-2B fpga仿真器ispdown烧录器

    1.概述 HW-USBN-2B 编程烧录Lattice所有芯片,速度非常快.支持Lattice FPGA芯片在线稳定仿真.烧录.加密,支持Lattice CPLD烧录.支持外部配置FLASH.PROM ...

  3. lattice的ip不显示,如何解决

    最近ip服务器可能会遇到问题,建议客户把更新检查关掉.我们有对应的IP下载链接.   diamond在     https://www.latticesemi.com/ispupdate/ipexpr ...

  4. 通过UI自动化方式获取文章、视频信息

    出于学习研究,对某账号的文章.视频分析一翻,尝试使用自动化方式看能否获取相应信息. 获取某号的文章有多重方法: 第一种是通过搜狗浏览器搜索账号(这种方式每天只能获取一篇文章,基本上没啥用.): 第二种 ...

  5. redis cluster 的核心原理分析:gossip 通信、jedis smart 定位、主备切换

    节点间的内部通信机制 基础通信原理 redis cluster 节点间采取 gossip 协议进行通信 gossip:互相之间不断通信,保持整个集群所有节点的数据是完整的 而集中式是将集群元数据(节点 ...

  6. Java集成系列:高效构建自定义插件

    前言 随着软件开发的快速发展和需求的不断增长,开发人员面临着更多的压力和挑战.传统的开发方法需要花费大量的时间和精力,而低代码开发平台的出现为开发人员提供了一种更加高效.快速的开发方式.今天小编就以构 ...

  7. 力扣534(MySQL)-游戏玩法分析Ⅲ(中等)

    题目: 需求:请编写一个 SQL 查询,同时报告每组玩家和日期,以及玩家到目前为止玩了多少游戏.也就是说,在此日期之前玩家所玩的游戏总数.详细情况请查看示例. 查询结果格式在以下示例中: 对于 ID ...

  8. HarmonyOS NEXT应用开发之使用AKI轻松实现跨语言调用

    介绍 针对JS与C/C++跨语言访问场景,NAPI使用比较繁琐.而AKI提供了极简语法糖使用方式,一行代码完成JS与C/C++的无障碍跨语言互调,使用方便.本示例将介绍使用AKI编写C++跨线程调用J ...

  9. 零信任策略下K8s安全监控最佳实践(K+)

    简介: 本文重点将围绕监控防护展开,逐层递进地介绍如何在复杂的分布式容器化环境中借助可观测性平台,持续监控K8s集群,及时发现异常的 API 访问事件.异常流量.异常配置.异常日志等行为,并且结合合理 ...

  10. 一文详解SQL关联子查询

    简介: 本文主要介绍什么是关联子查询以及如何将关联子查询改写为普通语义的sql查询. 本文主要介绍什么是关联子查询以及如何将关联子查询改写为普通语义的sql查询. 在背景介绍中我们将讲讲常见的关联子查 ...