pandas基础--缺失数据处理
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基础--缺失数据处理的更多相关文章
- Pandas基础用法-数据处理【全】-转
完整资料:[数据挖掘入门介绍] (https://github.com/YouChouNoBB/data-mining-introduction) # coding=utf-8 # @author: ...
- Pandas | 17 缺失数据处理
数据丢失(缺失)在现实生活中总是一个问题. 机器学习和数据挖掘等领域由于数据缺失导致的数据质量差,在模型预测的准确性上面临着严重的问题. 在这些领域,缺失值处理是使模型更加准确和有效的重点. 使用重构 ...
- Pandas缺失数据处理
Pandas缺失数据处理 Pandas用np.nan代表缺失数据 reindex() 可以修改 索引,会返回一个数据的副本: df1 = df.reindex(index=dates[0:4], co ...
- Python数据分析入门之pandas基础总结
Pandas--"大熊猫"基础 Series Series: pandas的长枪(数据表中的一列或一行,观测向量,一维数组...) Series1 = pd.Series(np.r ...
- 利用Python进行数据分析(9) pandas基础: 汇总统计和计算
pandas 对象拥有一些常用的数学和统计方法. 例如,sum() 方法,进行列小计: sum() 方法传入 axis=1 指定为横向汇总,即行小计: idxmax() 获取最大值对应的索 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
- Pandas基础学习与Spark Python初探
摘要:pandas是一个强大的Python数据分析工具包,pandas的两个主要数据结构Series(一维)和DataFrame(二维)处理了金融,统计,社会中的绝大多数典型用例科学,以及许多工程领域 ...
- pandas 基础用法
pandas 是一个基于 Numpy 构建, 强大的数据分析工具包 主要功能 独特的数据结构 DataFrame, Series 集成时间序列功能 提供丰富的数学运算操作 灵活处理缺失数据 Serie ...
- 数据可视化基础专题(八):Pandas基础(七) 数据清洗与预处理相关
1.数据概览 第一步当然是把缺失的数据找出来, Pandas 找缺失数据可以使用 info() 这个方法(这里选用的数据源还是前面一篇文章所使用的 Excel ,小编这里简单的随机删除掉几个数据) i ...
- 利用Python进行数据分析(12) pandas基础: 数据合并
pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...
随机推荐
- 【笔记】go语言--(Slice)切片的概念
go--(Slice)切片的概念 //切片是什么,定义一个arr,定义一个s为arr中的2到6,这个s就是一个切片 arr := [...]int{0,1,2,3,4,5,6,7} s := arr[ ...
- vue-manage-system 版本更新,让开发更加简单
vue-manage-system 近期进行了一次版本升级,主要是支持了更多功能.升级依赖版本和优化样式,并且上线了官方文档网站,大部分功能都有文档或者使用示例,更加适合新手上手开发,只需要根据实际业 ...
- 五分钟学会使用 go modules(含在家办公使用技巧)
导读:go modules 是 golang 1.11 新加的特性.如今 1.13 都已经发布了第 7 个小版本了,几乎所有大项目均已开始使用,这自然也包括 Kubernetes 生态中的众多项目.笔 ...
- WPF 由于系统颜色配置 Mscms 组件损坏启动失败
本文记录 WPF 应用程序,因为系统的颜色配置 Mscms.dll 组件损坏导致应用加载图片失败,从而启动失败的原因和解决方法 在 WPF 应用加载图片时,将会调用到系统的 Mscms.dll 组件. ...
- dotnet 读 WPF 源代码笔记 提升调试效率的 NamedObject 类型
本文来聊聊 WPF 那些值得称赞的设计中的 NamedObject 类型.在 WPF 中,有很多值得我学习的设计开发思想,其中就包括本文将要介绍的 NamedObject 类型.此类型的定义仅仅只是为 ...
- spire.Doc -Index was out of the range
一直以来用的好好的,突然有一天出现:Index was out of the range ED04211_邵武市易逸行软件技术服务有限公司(万顺出行)_其他 升级后问题: 1.合并单元格出现问题 ...
- ITIL4之四维模型
ITIL4的一个核心概念.它定义了四个维度(图中的1~4),这四个维度旨在确保组织能够在多方面考虑其服务提供,从而更有效地创造和交付价值. 四维模型的整合流程 确立价值载体:明确信息服务提供商的价值主 ...
- 02 redis 三种特殊的数据类型
目录 一. 地理空间(geospatial) 索引半径查询 二.Hyperloglog 三. Bitmaps 课程学习地址: https://www.bilibili.com/video/BV1S54 ...
- 使用sshfs-win将linux服务器目录挂载到windows下
可以直接将服务器上的目录挂载到 Windows 的资源管理器,相当于多了一个磁盘,这样子就可以直接将数据下载到服务器上了,挺方便的. 原理说明 一般情况下,我们可以通过 samba 协议挂载远程服务器 ...
- 3 个好玩的前端开源项目「GitHub 热点速览」
单休的周末总是短暂的,还没缓过神新的一周就又开始了.如果你和我一样状态还没有完全恢复,那就让上周好玩的开源项目唤醒你吧! 每周 GitHub 上总是有一些让人眼前一亮的开源项目,上周好玩的前端项目特别 ...