You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:05:16