Pandas处理缺失值
如何发现缺失值
#Pandas数据结构有两种方法可以有效的发现缺失值
#isnull()方法
import pandas as pd
import numpy as np
df = pd.DataFrame([[1, np.nan, 2],
[2, 3, 5],
[np.nan, 4, 6]])
df.isnull()
#输出结果:
0 1 2
0 False True False
1 False False False
2 True False False
#False表示该位上数值不为NaN,相反,True表示该位上数值为NaN
剔除缺失值
#剔除缺失值时,我们没法从DataFrame中单独剔除一个值,要么是剔除缺失值所在的整行,要么是整列。可以通过axis值来指定需要含有剔除缺失值的行或列,默认情况下,dropna()会剔除任何包含缺失值的整行数据。
df.dropna(axis='rows')
#输出结果:
0 1 2
1 2.0 3.0 5
#指定删除包含确实值的列
df.dropna(axis='columns')
#输出结果:
2
0 2
1 5
2 6
#上面的做法会把非缺失值一并删除,因为可能有时候只需要剔除全部是缺失值的行或列,或者绝大多数是缺失值的行或列。这些需求可以通过设置how或thresh参数来满足,他们可以设置剔除行或列缺失值的数量阀值。
#只删除所有值都缺失的列
df.dropna(axis='columns', how='all')
#输出结果:结果显示没有删除某列,因为所有列都至少包含一个非空数值
0 1 2
0 1.0 NaN 2
1 2.0 3.0 5
2 NaN 4.0 6
#通过thresh参数设置行或列中非缺失值的最小数量,从而实现更加个性化的配置
df.dropna(axis='rows', thresh=3)
#输出结果:因为设置了行中非空数值的最小个数为3,所有最终只有第1行被保留下来了
0 1 2
1 2.0 3.0 5
填充缺失值
#填充缺失值可以使用fillna()实现,我们可以指定用于填充缺失值的数值。
#使用单独的值来填充缺失值,例如0
df.fillna(0)
#使用缺失值后面的有效值来从后往前填充,对于DataFrame来说,需要指定axis,未指定情况下按照rows方向填充
df.fillna(method='bfill',axis='columns')
#使用缺失值前面的有效值来从前往后填充,对于DataFrame来说,需要指定axis
df.fillna(method='ffill',axis='rows')
#结果分别如下:
Out[19]:
0 1 2
0 1.0 0.0 2
1 2.0 3.0 5
2 0.0 4.0 6
Out[22]:
0 1 2
0 1.0 2.0 2.0
1 2.0 3.0 5.0
2 4.0 4.0 6.0
Out[23]:
0 1 2
0 1.0 NaN 2
1 2.0 3.0 5
2 2.0 4.0 6
#需要注意的是,假如从前往后填充,需要填充的缺失值前面没有值,那么它仍然是缺失值