numpy用isnan()检查是否存在NaN(Not a Number)。
pandas用.isna()或者.isnull()检查是否存在NaN。
判断缺失值:data.isna() / data.isnull(); data.notna()/ data.notnull()
填充缺失值:data.fillna(value=" ")
删除缺失值:data.dropna()
import numpy as np
import pandas as pd
df=pd.DataFrame(np.ones([5,2]),columns=['col1','col2'])
df['col3']=['a','b','a',np.nan,np.nan]
df['col4']=[3,2,3,np.nan,2]
df=df.reindex(columns=['col3','col4','col1','col2']) #将新增的一列排在第一列
df
col3 col4 col1 col2
0 a 3.0 1.0 1.0
1 b 2.0 1.0 1.0
2 a 3.0 1.0 1.0
3 NaN NaN 1.0 1.0
4 NaN 2.0 1.0 1.0
# 元素级别的判断,把对应的所有元素的位置都列出来,元素为空或者NA就显示True,否则就是False
pd.isna(df)/df.isna()
col3 col4 col1 col2
0 False False False False
1 False False False False
2 False False False False
3 True True False False
4 True False False False
pd.isnull(df)/df.isnull()
col3 col4 col1 col2
0 False False False False
1 False False False False
2 False False False False
3 True True False False
4 True False False False
pd.notna(df)/df.notna()
col3 col4 col1 col2
0 True True True True
1 True True True True
2 True True True True
3 False False True True
4 False True True True
pd.notnull(df)/df.notnull()
col3 col4 col1 col2
0 True True True True
1 True True True True
2 True True True True
3 False False True True
4 False True True True
df.isnull().sum()
col3 2
col4 1
col1 0
col2 0
dtype: int64
# 列级别的判断,只要该列有为空或者NA的元素,就为True,否则False
df.isnull().any()
col3 True
col4 True
col1 False
col2 False
dtype: bool
# 将为空或者NA的列找出来
df.columns[df.isnull().any()].tolist()
['col3', 'col4']
#设定参数选择筛选掉全部为NA的行
df.dropna(how='all')
col3 col4 col1 col2
0 a 3.0 1.0 1.0
1 b 2.0 1.0 1.0
2 a 3.0 1.0 1.0
3 NaN NaN 1.0 1.0
4 NaN 2.0 1.0 1.0
#也可以按列对缺失进行筛选
df.dropna(how='all',axis=1)
col3 col4 col1 col2
0 a 3.0 1.0 1.0
1 b 2.0 1.0 1.0
2 a 3.0 1.0 1.0
3 NaN NaN 1.0 1.0
4 NaN 2.0 1.0 1.0
df.isnull().values
array([[False, False, False, False],
[False, False, False, False],
[False, False, False, False],
[ True, True, False, False],
[ True, False, False, False]])
# 可以只显示存在缺失值的行列,清楚的确定缺失值的位置。
df[df.isnull().values==True]
col3 col4 col1 col2
3 NaN NaN 1.0 1.0
3 NaN NaN 1.0 1.0
4 NaN 2.0 1.0 1.0
# 数值型 -> 平均值,文本数据 -> NaN
df['col4'] = round(df['col4'].fillna(value=df['col4'].mean()), 2)
df
col3 col4 col1 col2
0 a 3.0 1.0 1.0
1 b 2.0 1.0 1.0
2 a 3.0 1.0 1.0
3 NaN 2.5 1.0 1.0
4 NaN 2.0 1.0 1.0
df.dropna()
col3 col4 col1 col2
0 a 3.0 1.0 1.0
1 b 2.0 1.0 1.0
2 a 3.0 1.0 1.0