1.查看缺失值
df.isnull().any(): 查看哪些字段存在缺失值
df.isnull().values.sum(): 检查缺失值总数
df.isnull().sum(): 查看具体每个字段的缺失值个数
df.loc[df[col].isnull().values==True,:]:查看col字段存在缺失的数据
df.columns[df.isnull().any()].tolist():输出缺失字段的列表
2.删除缺失值
dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
axis:方向,默认0,按照x方向,一行一行进行判断;
how:判断依据,默认为any,任意一个为空;how,指的是全部为空;
thresh:缺失个数筛选,默认为None,即大于0就要处理;例如输入2,缺失行至少含有2个缺失列,就要进行删除,换句话说,就是某行的缺失个数>=2,就要进行处理;
subset:生效范围,默认为None,即全部列都要处理;输入一个列表,例如["a","c"],即只按照a,c列的缺失情况进行判断;
inplace:是否在原来的数据上进行处理,默认为False,即不在原来的数据上进行处理。
3.找出缺失值的数据,并说明具体哪些字段存在缺失
说明:
该函数仅用来查找相应的缺失数据,并对缺失的数据进行标注(具体缺失那些字段)
df,是指要传入的数据帧;
exclude_col,要传入一个列表,不需要进行关注的缺失数据列,默认为空列表,即全部列都需要进行考虑;
remark,生成的标注列的名称;
def get_miss(df,exclude_col=[],remark="remark"):
"""df must be a DataFrame,exclude_col type must be a list"""
cols=list(df.columns)
#remove unnecessary fields
for i in exclude_col:
cols.remove(i)
#get a list of missing fields
miss_col=[]
for col in cols:
if df[col].isnull().sum()>0:
miss_col.append(col)
#remark the dataframe
miss_index=[]
new_df=df.copy()
new_df[remark]=""
for i in miss_col:
missing_index=list(df[df[i].isnull().values==True].index)
new_df.loc[missing_index,remark]=new_df[remark]+ ";" + i
miss_index+=missing_index #相当于extend
miss_index=list(set(miss_index))
miss_index.sort()
#remove the begining ";"
new_df.loc[miss_index,remark]=new_df.loc[miss_index,remark].str[1:]
return new_df.loc[miss_index,:]
4.缺失值的填充
在pandas中,常常会使用fillna来进行填充,具体请看这篇文章,网址:python做数据分析时缺失值填补、缺失值填充方法汇总_theskylife的博客-CSDN博客_python填充缺失值
5、不进行处理
贝叶斯网络和人工神经网络,贝叶斯网络是以概率论为理论依据,以概率推理为推理基础,对于缺失值并不敏感。使用贝叶斯网络时,应具有足够的专业知识,清楚各变量之间的关联。人工神经网络可以有效对付缺失值。