目的
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
#作为字典的key时,会被认为是不同的key
dic={None:1, NaN:2}
print(dic) #{None: 1, nan: 2}
目的1:查找NaN值
原始数据:
df=pd.DataFrame({ 'a':[0,1,np.nan,3,4],'b':[4,5,6,np.nan,8],'c':[9,10,np.nan,np.nan,13]}) print(df) '''结果 a b c 0 0.0 4.0 9.0 1 1.0 5.0 10.0 2 NaN 6.0 NaN 3 3.0 NaN NaN 4 4.0 8.0 13.0 '''
1.1 输出NaN值所在具体位置(调用math下面的isnan做判断)
from math import isnan for i in df.columns: # print(df[i].values) for k in range(len( df[i].values)): if isnan(df[i].values[k]): print('字段%s存在NaN值:' % i + '索引位置是:%s'%k)
1.2 分别找到NaN值所在的列名、行名:np.isnan()
import pandas as pd import numpy as np from math import isnan #在df中nan和None都会被自动填充为NaN df=pd.DataFrame({ 'a':[np.nan,1,2,3,4],'b':[4,5,6,np.nan,np.nan],'c':[9,10,np.nan,np.nan,np.nan]},index=['index_0','index_1','index_2','index_3','index_4']) print(df)