如何筛选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
相关产品推荐
相关产品推荐

