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. leetcode:1381. 设计一个支持增量操作的栈

    1381. 设计一个支持增量操作的栈 请你设计一个支持下述操作的栈. 实现自定义栈类 CustomStack : CustomStack(int maxSize):用 maxSize 初始化对象,ma ...

  2. CDN基础知识

    什么是CDN? CDN的全称是Content Delivery Network,即内容分发网络.其实现是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络" ...

  3. CSS 样式清单整理(二)

    16.元素占满整个屏幕 heigth如果使用100%,会根据父级的高度来决定,所以使用100vh单位. .dom{ width:100%; height:100vh; } 17.CSS实现文本两端对齐 ...

  4. 力扣237(java&python)-删除链表中的节点(中等)

    题目: 有一个单链表的 head,我们想删除它其中的一个节点 node. 给你一个需要删除的节点 node .你将 无法访问 第一个节点  head. 链表的所有值都是 唯一的,并且保证给定的节点 n ...

  5. 这样才是代码管理和 Commit 的正确姿势! | 研发效能提升36计

    ​简介:效能提升从小习惯开始,这样才是代码管理和 Commit 的正确姿势! ​ 专栏策划|雅纯 志愿编辑|张晟 软件交付是以代码为中心的交付过程,其中代码的作用有几点:第一,最终的制品要交付成什么样 ...

  6. HBase读链路分析

    ​简介:HBase的存储引擎是基于LSM-Like树实现的,更新操作不会直接去更新数据,而是使用各种type字段(put,delete)来标记一个新的多版本数据,采用定期compaction的形式来归 ...

  7. Python采集知网

    Python爬虫初探 selenium+beautifulsoup4+chromedriver 安装模块:* import pymssql* pip install bs4* pip install ...

  8. VUE知识体系、VUE面试题

    1. computed(计算属性)和方法有什么区别? 计算属性本质上是包含 getter 和 setter 的方法 当获取计算属性时,实际上是在调用计算属性的 getter 方法.vue 会收集计算属 ...

  9. Educational Codeforces Round 160 (Rated for Div. 2)

    A 直接模拟,注意细节 #include<bits/stdc++.h> #define ll long long using namespace std; ll p[15] = {1}; ...

  10. validator库在gin中的使用

    目录 封装语言包翻译器 tag中设置验证规则 控制层验 curl请求 返回结果 封装语言包翻译器 package validator import ( "fmt" "ne ...