首页 > 解决方案 > 删除 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 中有效地做到这一点,而不是遍历列并检查值。

任何建议,将不胜感激。

标签: pandasdrop

解决方案


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


推荐阅读