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

如何筛选DataFrame中A2或A3列含NaN值的行?

筛选DataFrame中A2或A3列含NaN的行

问题描述

现有如下DataFrame:

cl_id       a           c         d         e        A1              A2             A3
    0       1   -0.419279  0.843832 -0.530827    text76        1.537177      -0.271042
    1       2    0.581566  2.257544  0.440485    dafN_6        0.144228       2.362259
    2       3   -1.259333  1.074986  1.834653    system         NAN           1.100353
    3       4   -1.279785  0.272977  0.197011     Fifty       -0.031721       1.434273
    4       5    0.578348  0.595515  0.553483   channel        NaN               NaN
    5       6   -1.549588 -0.198588  0.373476     audio       -0.508501        NAN       

需要筛选出A2列或A3列中存在NaN,但不同时为NaN的行,期望结果如下:

cl_id       a           c         d         e        A1              A2             A3
    2       3   -1.259333  1.074986  1.834653    system         NAN           1.100353
    5       6   -1.549588 -0.198588  0.373476     audio       -0.508501        NAN   

解决方案

方法1:匹配用户期望结果(排除A2和A3均为NaN的行)

使用pandas的isna()方法检测空值,结合异或操作符筛选仅单一列为NaN的行:

import pandas as pd

# 假设你的DataFrame名为df
mask = df['A2'].isna() ^ df['A3'].isna()
result = df[mask]
print(result)

方法2:包含A2和A3均为NaN的行(符合“或”的常规逻辑)

如果需要包含两列都为NaN的行(即原始数据中的第4行),可以使用any()方法筛选至少一列为NaN的行:

mask = df[['A2', 'A3']].isna().any(axis=1)
result = df[mask]
print(result)

此方法会返回行2、行4、行5,完全符合“A2或A3为NaN”的字面逻辑。

关键方法说明

  • isna():检测元素是否为NaN,返回对应布尔值的Series或DataFrame
  • ^(异或):仅当两个布尔值一真一假时返回True,精准筛选单一列为NaN的行
  • any(axis=1):按行检查,只要指定列中有一个元素为True就返回True,筛选至少一列为NaN的行

内容的提问来源于stack exchange,提问作者user16971617

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:15:42