首页 > 解决方案 > 如果至少 20% 的条目采用 pandas/numpy 的特定值,我如何删除数据框的特征/列?

问题描述

我正在使用熊猫和 numpy。

我想删除我的 9000 x 13 训练数据框中的每一列,其中至少 20% 的条目取值 -200。在这种情况下,-200 就像一个缺失值或 NaN,所以我要删除无用的变量。我有下面的数据样本。任何帮助,将不胜感激。这是某种尝试: train_mod = train.loc[:, train.isnull().mean() <.2]

A        B        C            D      E                 F          \
5723     0.5       846.25      -200    2.619270         627.50     79.0   
4014     1.5      1016.25      -200    6.810175         848.50     99.0   
4074     2.0      -200.00      -200    -200.000        -200.00    114.0   
4577     1.6       950.50      -200    8.649763         925.50    351.0   
6691     4.7      1469.75      -200   25.820425        1449.75    677.0   
2889     0.5       902.50      -200    2.676091         631.25   -200.0   
4387     2.0      1095.75      -200   12.972673        1082.75    310.0   
4289     1.0       885.50      -200    2.695146         632.50   -200.0   
2887     2.3      1355.00      -200   16.611225        1198.25    129.0   
5694     1.1       936.25      -200    6.821513         849.00    127.0   

标签: pythonpandasnumpydataframe

解决方案


val = -200
rows_20 = df.shape[0] // 5

train_mod = train[[c for c in train.columns if (train[c] == val).sum() <= rows_20]]

解释:

train[c] == val 返回一系列布尔值(真/假)。对此调用 .sum() 会计算“真”值的数量。然后对照 进行检查row_20,这是 DataFrame 中行数的 20%。

列表推导仅返回与if条件匹配的列。


推荐阅读