python - 如果至少 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
解决方案
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
条件匹配的列。
推荐阅读
- sql - PostgreSQL:如何创建一个前缀序列作为唯一标识符?
- three.js - 将网格和对象边界框与辅助轴对齐
- python - 绘图时如何停止matplotlib中的y标签重叠?
- sdk - 如何使用空手道框架自动测试 razorpay sdk 调用?
- wordpress - 跨渠道的不同 Facebook 像素 - 附属公司
- amazon-web-services - 管理服务器(来自公共云)访问位于私有网络中的服务器提供的 REST API 的最佳方式是什么?
- python - 禁止导入笔记本的任何输出
- laravel-7 - 多列的验证规则
- javascript - 单击时 scoll 转到顶部
- r - 以编程方式从 RData 文件集合中提取对象