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

如何从DataFrame中提取前四列无NaN值与含NaN值的行

没问题,这事儿用Pandas的布尔索引就能轻松搞定!我给你写好完整代码,顺便拆解下逻辑:

完整实现代码

首先先构造你的原始DataFrame(如果你的df已经存在,这部分可以直接跳过):

import pandas as pd
import numpy as np

data = {
    'DT': ['D1', 'D2', 'D1', 'D1', 'D2', 'D2', 'D1', 'D2'],
    'RE': ['E1', 'E3', 'E3', np.nan, np.nan, 'E3', 'E3', 'E2'],
    'FE': ['F1', 'F2', np.nan, 'F1', 'F1', np.nan, 'F1', 'F1'],
    'SE': ['S1', np.nan, 'S2', 'S1', 'S2', 'S1', 'S2', 'S1'],
    'C_Step': ['poor', np.nan, 'good', 'poor', 'poor', 'fair', 'fair', np.nan]
}
df = pd.DataFrame(data)

接下来是核心的筛选逻辑,直接生成你要的df1和df2:

# 筛选前四列完全无NaN的行,重置索引让格式更整洁
df1 = df[df[['DT', 'RE', 'FE', 'SE']].notna().all(axis=1)].reset_index(drop=True)

# 筛选前四列包含至少一个NaN的行,同样重置索引
df2 = df[df[['DT', 'RE', 'FE', 'SE']].isna().any(axis=1)].reset_index(drop=True)
逻辑拆解
  • df[['DT', 'RE', 'FE', 'SE']].notna():生成一个布尔值组成的DataFrame,标记每一个单元格是否不为空
  • .all(axis=1):横向检查每一行的前四列是否全部不为空,得到一个用来筛选行的布尔序列
  • .isna().any(axis=1):横向检查每一行的前四列是否存在至少一个空值,刚好对应df2的筛选条件
  • .reset_index(drop=True):把新生成的DataFrame索引重置为从0开始,和你期望的输出格式完全匹配
最终输出结果

运行后得到的df1:

DT  RE  FE  SE C_Step
0  D1  E1  F1  S1   poor
1  D1  E3  F1  S2   fair
2  D2  E2  F1  S1    NaN

df2:

DT   RE   FE   SE C_Step
0  D2   E3   F2  NaN    NaN
1  D1   E3  NaN   S2   good
2  D1  NaN   F1   S1   poor
3  D2  NaN   F1   S2   poor
4  D2   E3  NaN   S1   fair

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:46:55