是否有一种有效的方法来删除至少有 20% 缺失值的列?
假设我的数据框是这样的:
A B C D
0 sg hh 1 7
1 gf 9
2 hh 10
3 dd 8
4 6
5 y 8`
删除列后,dataframe 变成这样:
A D
0 sg 7
1 gf 9
2 hh 10
3 dd 8
4 6
5 y 8`
最佳答案
您可以在列
上使用 bool 索引
,其中notnull
值的计数大于80%
:
df.loc[:, pd.notnull(df).sum()>len(df)*.8]
这在很多情况下都很有用,例如,删除值数量大于 1
的列:
df.loc[:, (df > 1).sum() > len(df) *. 8]
或者,对于 .dropna()
的情况,您还可以指定 .dropna()
的 thresh
关键字,如@所示EdChum:
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
关于python - 如何删除至少有 20% 缺失值的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37921703/