是否有高效的方法来删除至少有20%缺失值的列?
假设我的数据框如下所示:
A B C D0 sg hh 1 71 gf 92 hh 103 dd 84 6 5 y 8`
删除列后,数据框变为如下所示:
A D0 sg 71 gf 92 hh 103 dd 84 6 5 y 8`
回答:
您可以在columns
上使用boolean indexing
,选择那些非空值数量大于80%
的列:
df.loc[:, pd.notnull(df).sum()>len(df)*.8]
这在许多情况下都很有用,例如,删除值大于1
的列数的代码如下:
df.loc[:, (df > 1).sum() > len(df) *. 8]
或者,对于.dropna()
的情况,您也可以像@EdChum展示的那样指定.dropna()
的thresh
参数:
df.dropna(thresh=0.8*len(df), axis=1)
后者会稍快一些:
df = pd.DataFrame(np.random.random((100, 5)), columns=list('ABCDE'))for col in df: df.loc[np.random.choice(list(range(100)), np.random.randint(10, 30)), col] = np.nan%timeit df.loc[:, pd.notnull(df).sum()>len(df)*.8]1000 loops, best of 3: 716 µs per loop%timeit df.dropna(thresh=0.8*len(df), axis=1)1000 loops, best of 3: 537 µs per loop