【基本工具】S02E10 Pandas缺失值的处理技巧

0.本集概览

1.Pandas中缺失值的表征方式及运算处理规则
2.如何发现缺失值
3.如何对缺失值进行丢弃处理
4.如何对缺失值进行填充处理

现实中的数据,往往不如我们在例子中演示的那般干净、整齐,经常会出现数据缺失的现象,今天这一集,我们就来说说Pandas中缺失值的处理方法。

1.缺失值的表征方式

python中采用一种NaN(Not a Number)标签来表示缺失值,NaN本质上是一种浮点数类型:
代码片段:

import pandas as pd
import numpy as np

var = np.array([1, np.nan, 3, 4])
print(var)
print(var.dtype)

运行结果:

[  1.  nan   3.   4.]
float64

运行结果很清楚的表明,NumPy为缺失值选择了一种原生类型的数据类型:浮点型

2.缺失值的运算处理规则

NaN缺失值类型有一个重要的特性,就是任何数与之运算,其结果都是NaN
代码片段:

import pandas as pd
import numpy as np

var = np.array([1, 2, np.nan, 4])
print(np.nan + 1)
print(np.nan * 5)
print(var.sum())
print(var.max())

运行结果:

nan
nan
nan
nan

当然,如果在NumPy中忽略掉NaN缺失值进行一些运算,也是有办法的,NumPy有专门的函数:
代码片段:

import pandas as pd
import numpy as np

var = np.array([1, 2, np.nan, 4])
print(np.nansum(var))
print(np.nanmax(var))
print(np.nanmin(var))

运行结果:

7.0
4.0
1.0

3.缺失值的处理类型

Pandas数据类型对缺失值的处理也是类似的,NaN表示缺失值时,他的类型是浮点数,如果表示缺失对象时,他的类型是object类型。

3.1.浮点缺失型

首先举一个浮点类型缺失值的例子,将整数型Series中的某值设置为缺失型,整个Series将强制变成浮点型:
代码片段:

import pandas as pd
import numpy as np

var = pd.Series([1,2],dtype=int)
print(var)
var[0] = np.nan
print(var)

运行结果:

0    1
1    2
dtype: int32

0    NaN
1    2.0
dtype: float64

3.2.object类型缺失对象

表示缺失对象的场景我们也可以举一个例子,如果Series中的数据类型是字符串,由于字符串是object类型,因此将该类型的Series中的某个字符串数据设置为缺失型,整个类型仍是object类型。
代码片段:

import pandas as pd
import numpy as np

var = pd.Series(['aa','bb'])
print(var)
var[0] = np.nan
print(var)

运行结果:

0    aa
1    bb
dtype: object

0    NaN
1     bb
dtype: object

4.缺失值的处理方法

了解了缺失值的基本知识,那重点来了,使用Pandas工具时如何处理缺失值呢?

4.1.发现缺失值

首先是如何发现缺失值。我们可以用isnull()notnull()两种方法来发现缺失值。
代码片段:

import pandas as pd
import numpy as np

var = pd.Series(['aa',np.nan,1,np.nan])
print(var.isnull())
print(var.notnull())

运行结果:

0    False
1     True
2    False
3     True
dtype: bool

0     True
1    False
2     True
3    False
dtype: bool

这两种方法,返回的都是布尔型的掩码数据,isnull()会在为空的位置上显示True,notnull则正好相反。

这种布尔型掩码数据可以作为一种过滤的工具:
代码片段:

import pandas as pd
import numpy as np

var = pd.Series(['aa',np.nan,1,np.nan])
print(var[var.notnull()])

运算结果:

0    aa
2     1
dtype: object

4.2.丢弃缺失值

那么自然,下一步我们就应该讨论如何处理缺失值,最简单的方法是丢弃缺失值

4.2.1.Series简单丢弃

Series数据类型对于缺失值的处理很简单,就是简单的丢弃相应的值:
代码片段:

import pandas as pd
import numpy as np

var = pd.Series(['aa',np.nan,1,np.nan])
print(var.dropna())

运行结果:

0    aa
2     1
dtype: object
top Created with Sketch.