一本正经胡说八道的猫
面对缺失值三种处理方法:
参考原文链接
option 1: 去掉含有缺失值的样本(行)
option 2:将含有缺失值的列(特征向量)去掉
option 3:将缺失值用某些值填充(0,平均值,中值等)
对于dropna和fillna,dataframe和series都有,在这主要讲datafame的
方法一:dropna()
其他参数解析
dropna()
方法的其他参数。
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
参数说明:
-
axis:
-
axis=0: 删除包含缺失值的行
-
axis=1: 删除包含缺失值的列
-
how: 与axis配合使用
-
how=‘any’ :只要有缺失值出现,就删除该行货列
-
how=‘all’: 所有的值都缺失,才删除行或列
-
thresh: axis中至少有thresh个非缺失值,否则删除。比如 axis=0,thresh=10:标识如果该行中非缺失值的数量小于10,将删除改行
-
subset: list,在哪些列中查看是否有缺失值
-
inplace: 是否在原数据上操作。如果为真,返回None否则返回新的copy,去掉了缺失值
df = pd.DataFrame([[np.nan, 2, np.nan, 0],
[3, 4, np.nan, 1],
[np.nan, np.nan,2.5, 5],
[np.nan, 3, np.nan, 4]],
columns=list('ABCD'))
df
A B C D
0 NaN 2.0 NaN 0
1 3.0 4.0 NaN 1
2 NaN NaN 2.5 5
3 NaN 3.0 NaN 4
df.dropna(axis=0,subset=['C']) #axis=0,删除行,subset的列选择
A B C D
2 NaN NaN 2.5 5
方法二:替换并删除,Python pandas 如果某列值为空,过滤删除所在行数据
如上面的df数据,这个时候的思路是:
fillna()给空值填充一个数值(如999999)
index.tolist()找出值为填充值所在行的索引
drop根据索引干掉对应的行
df['A']=df['A'].fillna(999999)
find_index=df[(df.A==999999)].index.tolist()
find_index
[0, 2, 3]
d e f
a 1.0 6.5 3.0
d 6.5 3.0 NaN
df.drop(find_index)
A B C D
1 3.0 4.0 NaN 1
网友评论