小能豆

如何查找 Pandas 数据框中哪些列包含任何 NaN 值

py

给定一个包含散布在各处的可能的 NaN 值的 pandas 数据框:

问题:如何确定哪些列包含 NaN 值?具体来说,我可以获取包含 NaN 的列名列表吗?


阅读 48

收藏
2024-10-09

共1个答案

小能豆

你可以使用 Pandas 提供的 isna()isnull() 方法结合 any() 方法来轻松识别哪些列包含 NaN(Not a Number)值。以下是如何做到这一点的步骤:

获取包含 NaN 值的列名

  1. 使用 isna() 方法 创建一个布尔数据框,其中每个条目如果是 NaN 则为 True,否则为 False
  2. 使用 any() 方法 在列上(axis=0)来获取一个布尔序列,指示哪些列至少包含一个 NaN 值。
  3. 使用布尔索引 根据这个布尔序列筛选出列名。

示例代码

以下是一个示例,演示如何实现这一点:

import pandas as pd
import numpy as np

# 示例数据框,包含 NaN 值
data = {
    'A': [1, 2, np.nan, 4],
    'B': [np.nan, 1, 2, 3],
    'C': [1, 2, 3, 4],
    'D': [np.nan, np.nan, np.nan, 1],
}

df = pd.DataFrame(data)

# 确定哪些列包含 NaN 值
nan_columns = df.columns[df.isna().any()].tolist()

# 打印结果
print("包含 NaN 值的列名:", nan_columns)

解释:

  • df.isna() 生成一个与 df 形状相同的布尔数据框,其中 NaN 值对应为 True,非 NaN 值对应为 False
  • df.isna().any() 返回一个布尔序列,其中每个元素对应一列,指示该列是否包含任何 NaN 值。
  • df.columns[...] 根据布尔序列过滤数据框的列,并使用 tolist() 方法将结果转换为列名列表。

输出:

对于给定的示例,输出将是:

包含 NaN 值的列名: ['A', 'B', 'D']

这种方法高效且适用于识别数据框中包含 NaN 值的列。

2024-10-09