Pandas如何获取所有值均为0或NaN的列的列名
实现代码
你可以基于「判断每列所有元素均为0或NaN」的逻辑实现筛选,参考代码如下:
# 直接获取符合条件的列名 target_cols = df.columns[(df.isna() | (df == 0)).all(axis=0)] # 如需获取对应列的DataFrame子集 df_filtered = df.loc[:, (df.isna() | (df == 0)).all(axis=0)]
运行上述代码后target_cols的输出为:
Index(['b', 'c', 'd'], dtype='object')
逻辑说明
df.isna()会逐元素判断是否为NaN,返回布尔值矩阵df == 0会逐元素判断是否为0,返回布尔值矩阵- 两个矩阵用
|按位或运算后,只要元素是0或NaN就会返回True - 调用
.all(axis=0)对每列做聚合判断,只有整列所有元素都为True时,该列才会被标记为符合条件 - 最后用得到的布尔索引筛选列名即可
原有代码问题说明
你之前使用的~(df != 0).any(axis=0)逻辑等价于「列内所有元素都等于0」,而NaN和0做不等于比较时会返回True,因此全为NaN的c列会被过滤掉,不符合你的需求。
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

