如何用Python获取DataFrame中全为NaN的列名列表(示例返回c、d)
获取DataFrame中全为NaN的列名列表
当然可以!在Pandas里有非常简洁的方法来实现这个需求,我给你演示两种常用的方式,都能轻松得到你想要的['c', 'd']结果。
方法一:使用isna() + all()(推荐)
这是最直接高效的方式,思路是先把所有值转换成布尔值(NaN为True,非NaN为False),再检查每一列是否所有值都是True:
import pandas as pd import numpy as np # 创建示例DataFrame df = pd.DataFrame({'a': [1,2,3],'b': [3,4,5], 'c':[np.nan, np.nan, np.nan], 'd':[np.nan, np.nan, np.nan]}) # 获取全NaN的列名列表 all_nan_cols = df.columns[df.isna().all(axis=0)].tolist() print(all_nan_cols) # 输出: ['c', 'd']
代码解释:
df.isna():将DataFrame中的每个元素转换为布尔值,NaN对应True,非NaN对应False.all(axis=0):按列(axis=0)判断该列是否所有元素都是True,返回一个布尔Series,索引是列名df.columns[...]:筛选出布尔值为True的列名,最后用.tolist()转成列表格式
方法二:使用notna() + any()反向判断
如果从“没有非NaN值”的角度出发,也可以这样写:
all_nan_cols = df.columns[~df.notna().any(axis=0)].tolist() print(all_nan_cols) # 同样输出: ['c', 'd']
代码解释:
df.notna():和isna()相反,非NaN对应True,NaN对应False.any(axis=0):按列判断是否存在至少一个True(即存在非NaN值)~:取反,把“存在非NaN值”的列变成False,“全是NaN”的列变成True,再筛选列名即可
两种方法都能达到目的,第一种更直观易懂,推荐日常使用~
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

