python - 如何删除至少有 20% 缺失值的列

标签 python pandas machine-learning

是否有一种有效的方法来删除至少有 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/

相关文章:

python - 如何在keras中为共享层建模?

artificial-intelligence - 对分类器进行分类

python - 线性 curve_fit 总是产生 1 的斜率和 y 轴截距

python - TypeError: 'tuple' 对象在尝试调用方法时不可调用

python - 如何以前缀表示法恢复修改后的输入

Python Pandas、Dataframe 和从 excel 文件中读取

python - 模块未找到错误: No module named 'mport pandas as pd\r'

pandas - 如何提取 Pandas 中的年、月和日?

machine-learning - 在weka中自动对arff文件运行多个分类器

python - 有没有办法用python的win32security验证用户权限