基于条件列筛选的Pandas列空值校验问题求助
解决方法
你的核心需求是检查特定条件下对应列是否存在空值,而非过滤掉无空值的行。以下是具体实现:
1. 单独检查每个条件的空值存在情况
检查criteria为A时m列是否有任何空值
用布尔判断直接获取结果:
has_null_A = df[df['criteria'] == 'A']['m'].isnull().any() # has_null_A为True表示存在空值,False表示无空值
检查criteria为B时n列是否有任何空值
同理:
has_null_B = df[df['criteria'] == 'B']['n'].isnull().any()
2. 标记所有不符合规则的行(可选)
如果需要定位具体哪些行违反规则,可以生成一个标记列:
# 初始化违规标记列 df['violation'] = False # 标记criteria为A且m为空的行 df.loc[(df['criteria'] == 'A') & df['m'].isnull(), 'violation'] = True # 标记criteria为B且n为空的行 df.loc[(df['criteria'] == 'B') & df['n'].isnull(), 'violation'] = True # 查看所有违规行 violations = df[df['violation']]
你之前代码的问题说明
- 第一段代码存在语法错误:
df.loc[df['criteria']]=='A',[m]]括号不匹配,且列名m需加引号(如果是字符串类型的列名) - 第二段代码
df.query("criteria == A")中,字符串值A需要加单引号,正确写法为df.query("criteria == 'A'") - 第三段代码
df.loc[(df["criteria"] == "A") & ~ (df["m"].isnull()]是过滤出criteria为A且m非空的行,与你要的「检查是否存在空值」逻辑完全相反
内容的提问来源于stack exchange,提问作者RSK Rao
相关产品推荐
相关产品推荐

