NaN值的处理

目的:

  1.找到NaN值的位置(定位到哪一列、在列的哪个索引位置)

  2.对NaN值进行填充(向上填充、向下填充、线性填充等)

  3.忽略NaN值

构建简单的Dataframe数据结构环境

import pandas as pd
import numpy as np

#在df中nan和None都会被自动填充为NaN
df=pd.DataFrame({'a':[np.nan,1,2,3],'b':[None,5,6,7],'c':[8,9,10,11]})
print(df)

'''结果 
     a    b   c
0  NaN  NaN   8
1  1.0  5.0   9
2  2.0  6.0  10
3  3.0  7.0  11

'''

注意点

  1.None、nan在构建dataframe数据结构中都会被识别为NaN

  2.None与nan的类型是不一样的

#nan是个特殊的float类型
print(type(np.nan))  #<class 'float'>

#None是NoneType
print(type(None))   #<class 'NoneType'>

#打印空值看输出结果
print(df['a'][0])  #nan

目的1:查找NaN值

1.1 输出NaN值所在具体位置(调用math下面的isnan做判断)

from math import isnan
for i in df.columns:
    # print(df[i].values) #[nan  1.  2.  3.]  [nan  5.  6.  7.]  [ 8  9 10 11]
    for k in range(len( df[i].values)):
        if isnan(df[i].values[k]):
            print('字段%s存在NaN值:' % i + '索引位置是:%s'%k)

1.2 isnull、notnull

#1.2 isnull()
isnull_res=df.isnull()
print(isnull_res)
'''
       a      b      c
0   True   True  False
1  False  False  False
2  False  False  False
3  False  False  False
'''

1.3 isnull().values

# 1.2 isnull().values
isnull_res=df.isnull().values
print(isnull_res)
'''
[[ True  True False]
 [False False False]
 [False False False]
 [False False False]]
'''

1.4 isnull().sum() 统计显示

#1.4 isnull().sum() 统计
isnull_res=df.isnull().sum()
print(isnull_res)
'''
a    1
b    1
c    0
dtype: int64
'''

目的2:对NaN值填充

2.1 fillna直接填充

#1.fillna直接填充
df.fillna(0,inplace=True)
print(df)
'''
     a    b   c
0  0.0  0.0   8
1  1.0  5.0   9
2  2.0  6.0  10
3  3.0  7.0  11

'''

猜你喜欢

转载自www.cnblogs.com/yangzhizong/p/10271179.html