如何在Pandas中基于所有列生成含NaN标识的新列
解决方案:标记DataFrame中含任意NaN的行
你的核心问题是用错了判断方法——all(axis=1)是检查所有指定列全为NaN才返回True,但你需要的是任意一列存在NaN就标记,替换成any(axis=1)就能解决问题。
1. 检查所有列的情况
如果需要判断整行(所有列)是否存在NaN,直接用:
df['has_nans'] = df.isna().any(axis=1)
2. 检查指定范围列的情况
如果像你之前那样,只需要检查某几列(比如从第3列开始,对应iloc[:,2:]),代码调整为:
df['has_nans'] = df.iloc[:,2:].isna().any(axis=1)
补充:用lambda实现的写法(不推荐,效率更低)
如果一定要用lambda,写法如下,但优先推荐上面的内置方法(向量化操作比apply更高效):
df['has_nans'] = df.apply(lambda row: row.isna().any(), axis=1)
以你的示例DataFrame为例,运行上述代码后,has_nans列会正确标记出含NaN的行:
- 第一行(Col-2为NaN)→ True
- 第二行(无NaN)→ False
- 第三行(Col-n为NaN)→ True
内容的提问来源于stack exchange,提问作者filippo
相关产品推荐
相关产品推荐

