python缺失值怎么取消_pandas如何处理缺失值

在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值。常见的缺失值处理方式有,过滤、填充。

一、缺失值的判断

pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值,同时python内置None值也会被当作是缺失值。

a、Series的缺失值判断

s = Series(["a","b",np.nan,"c",None])

print(s)

'''

0 a

1 b

2 NaN

3 c

4 None

'''

#判断缺失值,如果是则返回True,否则返回False

print(s.isnull())

'''

0 False

1 False

2 True

3 False

4 True

'''

#输出缺失值的索引和值

print(s[s.isnull()])

'''

2 NaN

4 None

'''

b、DataFrame的缺失值判断

a = [[1,np.nan,2],[3,4,None]]

data = DataFrame(a)

#DataFrame的None值变成了NaN

print(data)

'''

0 1 2

0 1 NaN 2.0

1 3 4.0 NaN

'''

print(data.isnull())

'''

0 1 2

0 False True False

1 False False True

'''

print(data[data.isnull()])

'''

0 1 2

0 NaN NaN NaN

1 NaN NaN NaN

'''

注意:在使用Series和DataFrame的时候,如果其中有值为None,Series会输出None,而DataFrame会输出NaN,但是对空值判断没有影响。DataFrame使用isnull方法在输出空值的时候全为NaN,因为DataFrame对于False对应的位置,输出值会使用NaN代替,而Series对于Fasel对应的位置是没有输出值的。

二、过滤缺失数据

a、Series的缺失值过滤

s = Series(["a","b",np.nan,"c",None])

#通过使用notnull方法来获取非缺失数据

print(s[s.notnull()])

'''

0 a

1 b

3 c

'''

#使用dropna方法删除缺失数据,返回一个删除后的Series

print(s.dropna())

'''

0 a

1 b

3 c

'''

#并没有在原来的Series上进行直接删除

print(s)

'''

0 a

1 b

2 NaN

3 c

4 None

'''

#通过设置inplace参数为True,在原Series上进行删除,不会返回Series

print(s.dropna(inplace=True))

#None

print(s)

'''

0 a

1 b

3 c

'''

b、DataFrame的缺失值过滤

DataFrame删除缺失值相对于Series而言就要复杂一些,也许有的时候你是想删除含有缺失值的行或列,也许有时候你需要删除的是,当整行或整列全为缺失值的时候才删除,好在pandas对于这两种情况都有相对应的处理方法。

1、删除含有缺失值的行和列

a = [[1, np.nan, 2],[9,None,np.nan],[3, 4, None],[5,6,7]]

data = DataFrame(a)

print(data)

'''

0 1 2

0 1 NaN 2.0

1 9 NaN NaN

2 3 4.0 NaN

3 5 6.0 7.0

'''

#使用dropna方法删除含有缺失值的行,默认是行

print(data.dropna())

'''

0 1 2

3 5 6.0 7.0

'''

#删除含有缺失值的列

print(data.dropna(axis=1))

'''

0

0 1

1 9

2 3

3 5

'''

2、删除全为NaN的行和列

a = [[1, np.nan, 2],[np.nan,None,np.nan],[3, None, None],[5,None,7]]

data = DataFrame(a)

print(data)

'''

0 1 2

0 1.0 NaN 2.0

1 NaN NaN NaN

2 3.0 NaN NaN

3 5.0 NaN 7.0

'''

#当行全为NaN的时候,才删除,参数how默认是any,含有缺失值就删除

print(data.dropna(how="all"))

'''

0 1 2

0 1.0 NaN 2.0

2 3.0 NaN NaN

3 5.0 NaN 7.0

'''

#当列全为NaN的时候,才删除

print(data.dropna(how="all",axis=1))

'''

0 2

0 1.0 2.0

1 NaN NaN

2 3.0 NaN

3 5.0 7.0

'''

dropna方法的inplace的设置与Series一样。

3、指定删除数据后显示部分数据观察

a = [[1, np.nan, 2],[np.nan,None,np.nan],[3, None, None],[5,None,7]]

data = DataFrame(a)

print(data)

'''

0 1 2

0 1.0 NaN 2.0

1 NaN NaN NaN

2 3.0 NaN NaN

3 5.0 NaN 7.0

'''

#当行全为NaN的时候,才删除,参数how默认是any,含有缺失值就删除

print(data.dropna(how="all"))

'''

0 1 2

0 1.0 NaN 2.0

2 3.0 NaN NaN

3 5.0 NaN 7.0

'''

#通过thresh参数来控制显示删除数据的条数,删除列的时候thresh参数无效

print(data.dropna(how="all",thresh=2))

'''

0 1 2

0 1.0 NaN 2.0

3 5.0 NaN 7.0

'''

三、填充缺失值

数据都是宝贵的,也许有时候你的数据不够多,因为数据越多对于模型的训练,数据分析都是有好处的,所以很多的时候我们都不想删除数据。通常情况下,也许你会选择用一些特殊值来填充缺失值。下面介绍使用pandas的fillna方法来填充缺失数据。

1、指定特殊值填充缺失值

a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]

data = DataFrame(a)

print(data)

'''

0 1 2

0 1 2.0 2.0

1 3 NaN 6.0

2 3 7.0 NaN

3 5 NaN 7.0

'''

#用0填充所有的缺失数据

print(data.fillna(0))

'''

0 1 2

0 1 2.0 2.0

1 3 0.0 6.0

2 3 7.0 0.0

3 5 0.0 7.0

'''

2、不同列使用不同的填充值

a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]

data = DataFrame(a)

print(data)

'''

0 1 2

0 1 2.0 2.0

1 3 NaN 6.0

2 3 7.0 NaN

3 5 NaN 7.0

'''

print(data.fillna({1:1,2:2}))

'''

0 1 2

0 1 2.0 2.0

1 3 1.0 6.0

2 3 7.0 2.0

3 5 1.0 7.0

'''

3、前向填充和后向填充

a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]

data = DataFrame(a)

print(data)

'''

0 1 2

0 1 2.0 2.0

1 3 NaN 6.0

2 3 7.0 NaN

3 5 NaN 7.0

'''

#前向填充,使用默认是上一行的值,设置axis=1可以使用列进行填充

print(data.fillna(method="ffill"))

'''

0 1 2

0 1 2.0 2.0

1 3 2.0 6.0

2 3 7.0 6.0

3 5 7.0 7.0

'''

#后向填充,使用下一行的值,不存在的时候就不填充

print(data.fillna(method="bfill"))

'''

0 1 2

0 1 2.0 2.0

1 3 7.0 6.0

2 3 7.0 7.0

3 5 NaN 7.0

'''

4、使用列的平均值进行填充

a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]

data = DataFrame(a)

print(data)

'''

0 1 2

0 1 2.0 2.0

1 3 NaN 6.0

2 3 7.0 NaN

3 5 NaN 7.0

'''

print(data.fillna(data.mean()))

'''

0 1 2

0 1 2.0 2.0

1 3 4.5 6.0

2 3 7.0 5.0

3 5 4.5 7.0

'''

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值