DataFrame(7):缺失值处理
1、替换字符
例如把字符‘A’ 替换为字符‘B’
data.replace(to_replace="A", value='B')
to_replace:替换前的值, value:替换后的值
2、判断缺失值是否存在
(1)pd.notnull(dataframe) #新DataFrame(boolen类型)
(2)np.all(pd.notnull(dataframe)) #true/false
(3)pd.isnull(dataframe) #新DataFrame(boolen类型)
(4)np.any(pd.isnull(dataframe)) #true/false
(5)df.isnull() #通过isnull函数看一下是否有空值,结果是有空值的地方显示为True,没有的显示为False;再通过isnull().any()直接看每一列是否有空值,这个是只要这一列有1个空值,结果就是True;如果想具体看哪几行有空值,可以再用data.isnull().values==True来定位
(6)data[data.isnull().values==True] #有缺失值的行
(7)data.isna().all() #全为空的行或者列
(8)data.isnull().sum() #为空的列数总和
3、删除缺失值
data.dropna() #使用dropna的前提:缺失值的类型必须是np.nan
参数:
-axis: 删除行还是列,行是0或index,列是1或column,默认是行
-subst: 删除某几列的缺失值,可选,默认为所有列
-how: any or all,any表明只要出现1个就删除,all表示所有列均为na才删
-thresh: 缺失值的数量标准,达到这个阈值才会删除
-inplace: 是否替换
data.dropna(axis=0, how='all') #删除表中全部为NaN的行
data.dropna(axis=1, how='all') #删除表中全部为NaN的列
dropna(thresh=thr,axis=1) #将缺失率>thr的列删除
dropna(subset=['a'],axis=0) #删除列a 为空的行
4、填充缺失值
dataframe.fillna(value,method,{},limit,inplace,axis)
参数:
-value: 可以传入一个字符串或数字替代Na,值可以是指定的或者平均值,众数或中位数等
-method: 有ffill(用前一个填充)和bfill(用后一个填充)两种
-{}: 可以根据不同的列填充不同的值,列为键,填充值为值
-limit: 限定填充的数量
-inplace: 是否直接在原文件修改,True:会修改原数据,False:不替换修改原数据,生成新的对象
-axis: 填充的方向,默认是0,按行填充
data['age'].fillna(data['age'].mean(), inplace=True)
#用平均值填充缺失值