pandas - 删除 Pandas 中列子集为空的行
问题描述
我有以下格式的熊猫数据框
No ei1 ei2 ei3 ei4 ei1_val ei2_val ei3_val ei4_val
123
124
125 0 0 0 1 low low high high
为简化起见,我在此处仅显示了列的子集,但实际上 pandas 数据帧具有从 ei1 到 ei24 以及从 ei1_val 到 ei24_val 的列。
我已经使用以下代码检索了列名:
val_cols = df[[col for col in df.columns if col.endswith("_val")]]
cols = [col.replace('_val', '') for col in val_cols.columns]
之后,如果 val_cols 中的所有列和 cols 中的所有列都为空,我需要从数据帧 df 中删除行。因此,输出数据框将删除 No 为 123 和 124 的行。不确定是否有办法在 Pandas 中有效地做到这一点,而不是遍历列并检查值。
任何建议,将不胜感激。
解决方案
IIUC,尝试:
m = ~df.filter(regex='.*_val').isna().all(axis=1)
df[m]
输出:
No ei1 ei2 ei3 ei4 ei1_val ei2_val ei3_val ei4_val
2 125 0.0 0.0 0.0 1.0 low low high high
在方法中使用正则表达式查找列标题以 _val 结尾的所有列pd.DataFrame.filter
。
使用 isna 检查所有值是否为 NaN 并且所有值都使用 axis=1
推荐阅读
- javascript - Laravel 5.6 - 选中框时增加数字
- python - python中的多个日期验证
- ios - 对 SceneKit 中相机的正交投影感到困惑
- javascript - 如何在 mysql / express 中使用变量作为列名?
- javascript - 将图像从我的页面下载到我的文件夹,然后将此图像拖放到我的输入文件中
- r - 无法将边/路径/顶点添加到树
- c# - 什么可以阻止 OnDisconnectedAsync 为可耻地断开连接的客户端调用?
- javascript - 使用 Selenium webdriver 和 Python 获得完全渲染的 HTML
- java - 如何在不使用 Spring Boot Async 重新加载页面的情况下提交表单?
- c# - 解析类型为字符串的动态数据