数据清洗是一项复杂且繁琐的工作,同时也是整个数据分析过程中最为重要的环节。有人说一个分析项目80%的时间都是在清洗数据,这听起来有些匪夷所思,但在实际的工作中确实如此。

数据清洗的目的有两个,第一是通过清洗让数据可用。第二是让数据变的更适合进行后续的分析工作。换句话说就是有”脏”数据要洗,干净的数据也要洗。本篇文章将介绍几种简单的使用Python数据清洗DataFrame中缺失值的方法。

目录

1. 相关函数

2. 删除缺失值:dropna函数

3. 替换缺失值:fillna函数

4. 判断缺失值:isna函数

5. 判断缺失值:notna函数


1. 相关函数

删除缺失值:df.dropna()

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html

填充缺失值:df.fillna()

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html

判断缺失值:df.isna()

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.isna.html

判断缺失值:df.notna()

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.notna.html

2. 删除缺失值:dropna函数

dropna参数列表:

DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None, inplace=False)

输入:

import numpy as np
import pandas as pddf = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],"toy": [np.nan, 'Batmobile', 'Bullwhip'],"born": [pd.NaT, pd.Timestamp("1940-04-25"),pd.NaT]})
# df
#        name        toy       born
# 0    Alfred        NaN        NaT
# 1    Batman  Batmobile 1940-04-25
# 2  Catwoman   Bullwhip        NaT

1. dropna默认参数。删除含有NA的行。其中axis=0表示删除行,how='any'表示有一个NA就删除整行/列。

df.dropna()
#      name        toy       born
# 1  Batman  Batmobile 1940-04-25

2. 删除含有NA的列。参数axis=1或axis='columns'。

df.dropna(axis='columns')
#        name
# 0    Alfred
# 1    Batman
# 2  Catwomandf.dropna(axis=1)
#        name
# 0    Alfred
# 1    Batman
# 2  Catwoman

3. 当所有行/列为NA时才删除。参数how='all'。

df.dropna(how='all')
#        name        toy       born
# 0    Alfred        NaN        NaT
# 1    Batman  Batmobile 1940-04-25
# 2  Catwoman   Bullwhip        NaT

4. 提高删除NA的阈值。参数thresh=2,表示行/列中的NA数量大于2才删除。

df.dropna(thresh=2)
#        name        toy       born
# 1    Batman  Batmobile 1940-04-25
# 2  Catwoman   Bullwhip        NaT

5.设置判断的子集。参数subset设置待判断的列/行名,这些列/行中有NA值则所在行/列被删除。

df.dropna(subset=['name', 'born'])
#      name        toy       born
# 1  Batman  Batmobile 1940-04-25

6. 将处理后的df替换原本的df。参数inplace=True。

df.dropna(inplace=True)
df
#      name        toy       born
# 1  Batman  Batmobile 1940-04-25

3. 替换缺失值:fillna函数

fillna参数列表:

DataFrame.fillna(self, value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

输入:

import numpy as np
import pandas as pddf = pd.DataFrame([[np.nan, 2, np.nan, 0],[3, 4, np.nan, 1],[np.nan, np.nan, np.nan, 5],[np.nan, 3, np.nan, 4]],columns=list('ABCD'))
df
#      A    B   C  D
# 0  NaN  2.0 NaN  0
# 1  3.0  4.0 NaN  1
# 2  NaN  NaN NaN  5
# 3  NaN  3.0 NaN  4

1. fillna默认参数。传入值,填充所有NA。

df.fillna(0)
#      A    B    C  D
# 0  0.0  2.0  0.0  0
# 1  3.0  4.0  0.0  1
# 2  0.0  0.0  0.0  5
# 3  0.0  3.0  0.0  4

2. 设定每列NA的填充值。value为字典格式。

values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}
df.fillna(value=values)
#      A    B    C  D
# 0  0.0  2.0  2.0  0
# 1  3.0  4.0  2.0  1
# 2  0.0  1.0  2.0  5
# 3  0.0  3.0  2.0  4

3. 用前向值/后向值填充NA。method='fillna'表示NA被前一个值填充。例如A列2行的NA被A列1行的3.0填充,B列2行的NA被B列1行的4.0填充。

df.fillna(method='ffill')
#      A    B   C  D
# 0  NaN  2.0 NaN  0
# 1  3.0  4.0 NaN  1
# 2  3.0  4.0 NaN  5
# 3  3.0  3.0 NaN  4

4. 设定每列/行的填充数。limit=1表示每列/行仅仅填充1个NA。

df.fillna(value=values, limit=1)
#      A    B    C  D
# 0  0.0  2.0  2.0  0
# 1  3.0  4.0  NaN  1
# 2  NaN  1.0  NaN  5
# 3  NaN  3.0  NaN  4

5. 参数axis和inplace与dropna相同。

4. 判断缺失值:isna函数

1. 判断df中所有值是否为NA。

df.isna()
#     name    toy   born
# 0  False   True   True
# 1  False  False  False
# 2  False  False   True

2. 判断某一列(series格式)的值是否为NA。

df['toy'].isna()
# 0     True
# 1    False
# 2    False
# Name: toy, dtype: bool

5. 判断缺失值:notna函数

与isna的结果完全相反,用法一样。

df.notna()
#    name    toy   born
# 0  True  False  False
# 1  True   True   True
# 2  True   True  False
df['toy'].notna()
# 0    False
# 1     True
# 2     True
# Name: toy, dtype: bool

Pandas 对DataFrame的缺失值NA值处理4种方法总结相关推荐

  1. R语言把dataframe中的NA值替换为0

    R语言把dataframe中的NA值替换为0 目录 R语言把dataframe中的NA值替换为0 缺失值替换 方法总结 缺失值替换

  2. pandas计算dataframe两列数据值相等的行号、取出DataFrame中两列值相等的行号

    pandas计算dataframe两列数据值相等的行号.取出DataFrame中两列值相等的行号 目录 pandas计算dataframe两列数据值相等的行号.取出DataFrame中两列值相等的行号

  3. R语言dplyr包将dataframe中的NA值替换(replace)为0实战:所有NA值替换(replace)为0、具体列的NA值替换(replace)为0、若干列的NA值替换(replace)为0

    R语言dplyr包将dataframe中的NA值替换(replace)为0实战:所有NA值替换(replace)为0.具体列的NA值替换(replace)为0.若干列的NA值替换(replace)为0 ...

  4. Pandas 对数值进行分箱操作的4种方法总结对比

    分箱是一种常见的数据预处理技术有时也被称为分桶或离散化,他可用于将连续数据的间隔分组到"箱"或"桶"中.在本文中,我们将讨论使用 python Pandas 库 ...

  5. 【Python】使用Pandas对数值进行分箱操作的4种方法

    使用Pandas对数值进行分箱操作的4种方法 方法1:between & loc 方法2:cut 方法3:qcut 方法4:value_counts 补充材料 分箱是一种常见的数据预处理技术, ...

  6. PHP获取数组最后一个值的2种方法

    这篇文章主要介绍了PHP获取数组最后一个值的2种方法,本文直接给出实现代码,代码中包含注释,需要的朋友可以参考下 代码如下: $array=array(1,2,3,4,5);     echo $ar ...

  7. html获取data-*值,html5 获取和设置data-*属性值的四种方法讲解

    1.获取id的对象 2.需要获取的就是data-id 和 dtat-vice-id的值 一:getAttribute()方法 const getId = document.getElementById ...

  8. 获取php数组最后,php获取数组最后一个值的2种方法

    摘要:这篇文章主要介绍了PHP获取数组最后一个值的2种方法,本文直接给出实现代码,代码中包含注释,需要的朋友可以参考下$array=array(1,2,3,4,5); echo $array[coun ...

  9. 去除html重复的元素 js,js数组中去除重复值的几种方法

    在日常开发中,我们可能会遇到将一个数组中里面的重复值去除,那么,我就将我自己所学习到的几种方法分享出来 去除数组重复值方法: 1,利用indexOf()方法去除 思路:创建一个新数组,然后循环要去重的 ...

最新文章

  1. 搞懂这些框架源码,带你吊打面试官
  2. 设计模式学习(五) 适配器模式
  3. 全球大半网络瘫痪,背后原因竟来自这家无名小公司
  4. linux ----- Vim进入和退出命令
  5. Ubantu16.4下fabric环境搭建
  6. centos7下nginx配置
  7. php pcntl 多进程学习
  8. Linux ReviewBoard安装与配置
  9. ajax后台重定向会返回什么_跳转,AJAX返回和重定向
  10. javascript中addEventListener与removeEventListener
  11. 【2020团体程序设计天梯赛】L2-3 完全二叉树的层序遍历(后序遍历转层次遍历)
  12. 服务器声卡硬件安装,虚拟声卡,详细教您怎么安装虚拟声卡
  13. RK3066和AML8726-MX方案对比 频率与功耗 / 性能 / 方案成本
  14. MMKV 组件-快速丶读丶查丶写的sp
  15. Python | 小白的 Asyncio 教程
  16. shift+右键,没有“在此处打开命令窗口”选项
  17. 面试问题:如何开展接口测试
  18. 基于身份的常数级环签名
  19. 类似于 qq发说说动态 基于原生servlet 后台方案
  20. [CQOI2014]危桥

热门文章

  1. 使用openocd调试Linux内核,OpenOCD-JTAG调试(示例代码)
  2. Win11快捷复制粘贴不能用怎么办?Win11快捷复制粘贴不能用
  3. 在springboot中导入spring-web相关包导致的错误经验(一)
  4. 实时网速显示_实例_python
  5. css鼠标点在文字上背景透明,CSS实现文字半透明显示在图片上方法(示例代码)
  6. python类的魔法方法和装饰器
  7. C语言入门:helloworld
  8. 你承认电子计算机是天之骄子改为双重否,双重否定句练习题
  9. 苹果开发者设置其他ios账号权限
  10. 2021-07-23 N卡显示器亮度设置